Мелодии для пьезопищалки

Тема в разделе "Глядите, что я сделал", создана пользователем PULSE, 1 мар 2012.

  1. Makson_Burkov

    Makson_Burkov Нуб

    Народ, а почему в некоторых мелодиях цифры указаны с точкой. Что это дает, какой в этом смысл?


     
  2. Un_ka

    Un_ka Гуру

    Судя по документации — смысла нет.
     
  3. Makson_Burkov

    Makson_Burkov Нуб

    А почему тогда там цифры такие. Мне преподу нужно это объяснить.
     
  4. Un_ka

    Un_ka Гуру

    А вы где учитесь?
    Так-то это частоты нот с определённой точностью.
     
  5. sser

    sser Гик

    Там наверное десятичные дроби недавно проходили....
    Хотя фальш в звучащей мелодии не каждый человек может на слух определить и образование здесь не причём.
     
    Последнее редактирование: 9 дек 2021
  6. akl

    akl Гуру

    и дилей и тоне принимают миллисекунды в виде целых int (вернее унсигнед лонг) так что совершено непонятно нафига там дроби. возможно автор получил эти цифры из какого-нибудь миди посредством какой-нибудь программы, которая почему-то выдала такое
     
    Последнее редактирование: 9 дек 2021
  7. sser

    sser Гик

    Мелодию скопипастили.
     
  8. akl

    akl Гуру

    скопипастили это понятно. интересно другое - откуда это надо скопипастить или как чтобы получились такие длительности с точностью до наносекунд. вряд ли какие-нибудь миди-приблуды, не говоря уж о компьютерах, могут в такую точность
     
  9. Red Krok

    Red Krok Нерд

    Добрый день! Понадобилось мне создать мелодию для ардуино-будильника в формате
    Код (C++):

    int notes[]{};
    int times[]{};
    int delays[]{};

    for (int i = 0; i< 120; i++){
       tone(pin, notes[i], times[i]);
       delay(delays[i]);
    }
     
    В итоге создал программу на Python:
    Код (Python):

    notes = []
    times = []
    delays = []

    with open("src.txt") as file:
        line = "1"
        while line:
            line = file.readline()
            if line.startswith("tone"):
                notes.append(float(line.split(",")[1]))
                times.append(float(line.split(",")[2].replace(");", "").replace("'", "").strip()))
            elif line.startswith("delay"):
                delays.append(float(line.split("(")[1].replace(");", "").replace("'", "").strip()))

    print("int notes [] {" + str(notes).replace("[", "").replace("]", "") + "};")
    print("int delays [] {" + str(delays).replace("[", "").replace("]", "") + "};")
    print("int times [] {" + str(times).replace("[", "").replace("]", "") + "};")

    print(f"for (int i = 0; i < {len(notes)}; i++)" + "{tone(your_speaker_pin, notes[i], times[i]); delay(delays[i]);}")
     
    1) Помещаем музыку в формате
    Код (C++):

    tone(tonePin, 116, 124.999875);
    delay(138.88875);
    tone(tonePin, 174, 999.999);
    delay(1111.11);
    tone(tonePin, 195, 499.9995);
    delay(555.555);
    tone(tonePin, 220, 499.9995);
    delay(555.555);
    tone(tonePin, 233, 1999.998);
    delay(2222.22);
     
    в файл src.txt рядом с main.py

    2) Устанавливаем python 3
    3) Запускаем main.py
    4) Копируем результат из терминала

    Результат (гимн СССР) приложен
     

    Вложения:

    • ussr_anthem.ino
      Размер файла:
      2,9 КБ
      Просмотров:
      313
    Рокки1945 нравится это.
  10. b707

    b707 Гуру

    слушайте, ну вы же сами указали формат:
    Код (C++):
    int notes[]{};
    int times[]{};
    int delays[]{};

    for (int i = 0; i< 120; i++){
       tone(pin, notes[i], times[i]);
       delay(delays[i]);
    }
    times[] -массив типа int
    Так откуда же эти бредовые пять знаков после запятой?
    Код (C++):
    tone(tonePin, 116, 124.999875);
    delay(138.88875);
    прошу прщения за резкость, но этот код я вижу уже десятый раз - все тупо друг у друга этот бред копируют, нет чтобы немного своим умом подумать...
     
    Andrey12 нравится это.
  11. Airbus

    Airbus Радиохулиган Модератор

    А без python нельзя?
     
    Andrey12 нравится это.
  12. b707

    b707 Гуру

    можно.
    прямо в код ардуино - и оно отлично иргает без всякого питона
     
    Andrey12 нравится это.
  13. Un_ka

    Un_ka Гуру

    Лучше их во flash памяти хранить.
     
  14. save.l

    save.l Гик

    Добрый день!
    Если загружать мелодии из данного топика, звучит все довольно неплохо.
    Понадобился циклический звук, похожий на "стучание/перебор ногтями" по деревянной столешнице.
    Подключил пассивный зуммер, с помощью tone() в цикле прослушал звуки с различной частотой, все какое то пищащее. Глухого звука так и не услышал. Что-то похожее постукивает это если в tone() подать 20кГц. Посоветуйте какие нибудь варианты.
     
  15. b707

    b707 Гуру

    глухие звуки - это сотни герц, а 20кГц - это писк далеко за порогом слышимости взрослого человека
     
    Airbus нравится это.
  16. sser

    sser Гик

    Посмотреть стук на осциллографе. И проанализировать какая там частота.
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Записать стучание когтями по столешнице на диктофон. Переконвертировать его в waw формат. Воспроизводить с sd карты и Ардуино.
     
  18. save.l

    save.l Гик

    вариант конечно. У меня есть WT2003M02 (кстати вещь для своих целей), но считаю слишком жирно для "постучать" использовать целую железяку. Тем более что мне нужен всего один стук, который хочу воспроизводить в цикле определенное ко-во раз. Есть же зуммер за 10 рублей, есть же tone(). Ну как так то (((

    вопрос можно ли потом это повторить с помощью tone() и дешевого зуммера.

    ну на сотнях герц только противное "пииии" удается услышать. А есть вообще разница в зуммерах? может купить пару троек других каких-то?
     
  19. save.l

    save.l Гик

    В итоге воспользовался данной статьей. Всем спасибо.
     
  20. Рокки1945

    Рокки1945 Гуру

    20 кГц - дети слышат если что