Звуковой контроль событий

пользовательские блоки для работы с аудио/видео
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#1

Сообщение Igor » 21.06.2022{, 19:45}

Блок основан на станрдатной библиотеке Tone()
Используется именно пассивный пьезодинамик, либо обычный но подключать желательно через транзистор, в крайнем случае если динамик маломощный достаточно резистора в разрыв цепи.
Это первая версия, так что после допиливания будет описание в самом блоке, а пока что здесь.
Подключение к любому пину - в параметрах 1 пункт указываем пин.
Можно подключать несколько динамиков к одному пину, и так же несколько на разные пины.
Далее в параметрах pause_note - это пауза между нотами (не злоупотреблять так как используется delay())
Ну и Size_note - это длительность звучания ноты (об этом еще чуть позже)
Входы
En- понятно что при 1 он работает
Вход Time в миллисекундах определяет через какое время повторится мелодия при наличии на входе EN 1
Можно задать разное время для каждого динамика даже если они на одном пине.

Дальше чуть сложнее.
Вы можете создать свою мелодию или набор из нот!
Для этого нужно отредактировать блок
В функции deсlare в самом начале указаны все ноты -например #define NOTE_C1 33 где С1 нота а 33 ее частота
Далее ниже находим
int melody[] = {
NOTE_C4, NOTE_E5, NOTE_A3, NOTE_D5, NOTE_B2 ,NOTE_C4
};
Тут мы вставляем нужные ноты, и не забываем про количество, через запятую, точно так как я скопировал
Потом находим ниже
int noteDurations[] = {
4, 4, 4, 4, 4, 4
};
Видим что у нас 6 нот, и цифра означает длительность звучания каждой ноты, можно поиграться, 2- длинно, 8 -коротко
Если у вас больше 6 нот добавляем циферки через запятую

и последнее находим в цикле loop строчку

for (int thisNote = 0; thisNote < 6; thisNote++) {
и меняем цифру 6 на количество ваших нот

Вроде все, вот сам блок и пример на 6 нот
Buzzer_my_(Code_-_Basic).ubi
(319.51 КБ) 76 скачиваний

Обновление - блок от Андрея(Dryundel)
Без delay(), правда логика другая
Пост viewtopic.php?f=70&t=8094&p=115462#p115492 и viewtopic.php?f=70&t=8094&p=115462#p115497
Описание внутри блока
Мелодия_(Code_-_Basic).ubi
(68.8 КБ) 62 скачивания
Обновление_2
В блоке добавлен Вход - количество раз проигранных мелодий при подаче короткого импульса на вход En
MelodyC_(Code_-_Basic).ubi
(102.69 КБ) 72 скачивания
Последний раз редактировалось Igor 28.06.2022{, 12:30}, всего редактировалось 5 раз.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#21

Сообщение Dryundel » 28.06.2022{, 13:28}

Igor писал(а):
28.06.2022{, 12:46}
Dryundel, И еще вопрос нельзя ли сделать длительность такта еще меньше чем 100мс? Ноты то можно а вот паузы уже не получается.
В описании "пауза между нотами" стоит в скобках. На самом деле это длительность такта. Это не одно и то же.
Я уже писал:
Dryundel писал(а):
26.06.2022{, 09:46}
Ерунда может начинаться вопервых в том случае, если пауза меньше чем длина ноты. К примеру 4 - это 1/4 секунды = 250 мс. Поэтому паузу надо ставить чуть больше.

Это время между началом звучания каждой ноты.
Вы можете вообще убрать формулу вычисления долей ноты. Это больше для тех кто привык к музыкальным терминам.
И вместо: 1000 / Melody[ArrayCounter + 1] оставить только Melody[ArrayCounter + 1]
Выкинуть числитель.
И тогда будете задавать длительность нот в миллисекундах.

НО! ОБЯЗАТЕЛЬНО!
Длительность такта должна быть чуть длиннее чем длительность ноты. Хотя бы на 1мс, иначе функция tone() не справляется и не успевает переустанавливать частоту.

Специально проверил. Длина нот - 20мс, длина такта 21мс. Все отлично работает.

И ПОМНИ!
Ровно в полночь Ардуинка превратится в тыкву!
Если длительность основного цикла превысит длительность ноты или такта, будет ппц.

Отправлено спустя 5 минут 41 секунду:
Igor писал(а):
28.06.2022{, 12:52}
Еще его можно клонировать и сделать несколько блоков с разными мелодиями!
Как бы да, можно. Базовый редактор позволяет такую вольность. Но вообще это не правильно. Некорректно отсылать команду на один пин из разных мест. В случае если включить одновременно два таких блока, тоже будет ппц.
В новом редакторе этот глюк исключен и нельзя назначить один и тот же пин в разных блоках.

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#22

Сообщение Igor » 28.06.2022{, 15:01}

Еще, тестирую пока, не знаю с чем связано, но в большом проекте мелодия звучит правильно, но с такими тормозами что ужас. Возможно где то косяк в проекте - у меня три датчика температуры, меню , дисплей 1602 и аж 9 плат получилось. На отдельных платах идет сравнение показаний датчиков - если больше 150гр и меньше 70 гр то на дисплей выводится off.
Не знаю решит ли проблему, нельзя ли блок оформить в функцию? Типа по условию вызывается функция , или это одно и то же?
И еще вопрос - у меня между платами все оформлено через переменные. Или лучше использовать клеммы?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#23

Сообщение Dryundel » 28.06.2022{, 17:02}

Igor писал(а):
28.06.2022{, 15:01}
в большом проекте мелодия звучит правильно, но с такими тормозами что ужас.
Dryundel писал(а):
28.06.2022{, 13:33}
И ПОМНИ!
Ровно в полночь Ардуинка превратится в тыкву!
Если длительность основного цикла превысит длительность ноты или такта, будет ппц.
ВРЕМЯ ЦИКЛА или что убивает ваш проект.

Началась борьба за выживание. :) Трудности - основа прогресса.
Для того, что бы все получилось, достаточно прочитать всего половину форума.
Ну и разработки ecoins Вам в помощь. :D
...

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#24

Сообщение Igor » 04.07.2022{, 09:21}

Подскажи почему при компиляции при вклчении руского выдает такую ошибку - invalid use of template-name 'LCD_1602_RUS' without an argument list

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#25

Сообщение Dryundel » 04.07.2022{, 11:03}

Igor писал(а):
04.07.2022{, 09:21}
Подскажи почему при компиляции при вклчении руского выдает такую ошибку - invalid use of template-name 'LCD_1602_RUS' without an argument list
Это как то к звуковому контролю событий относится?

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#26

Сообщение Igor » 06.07.2022{, 03:15}

Dryundel писал(а):
04.07.2022{, 11:03}
Это как то к звуковому контролю событий относится?
А как же, мелодия играет с дикими паузами, вы выше писали почему тормозит скетч - из за штатного блока дисплея. Я заменил блоки дисплея на ваши альтернативные. Хотелось бы русский язык но компиляция не проходит.

Отправлено спустя 2 часа 3 минуты 55 секунд:
Igor писал(а):
04.07.2022{, 09:21}
Подскажи почему при компиляции при вклчении руского выдает такую ошибку - invalid use of template-name 'LCD_1602_RUS' without an argument list
С дисплеем разобрался - может кому пригодится
В IDE почему то были 2 библиотеки
LCD_1602_RUS_ALL
и
LCD_1602_RUS_ALL-master
И компилятор использовал первую, а в блоке указана вторая, и выдавал ошибку.
Просто удалил первую и все компилируется!
Далее буду проверять работу блока мелодия с дисплеем, отпишусь

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#27

Сообщение Dryundel » 06.07.2022{, 08:52}

Igor писал(а):
06.07.2022{, 05:18}
Я заменил блоки дисплея на ваши альтернативные.
Не факт что поможет. На самом деле они работают даже медленнее штатных. Тему надо изучать, а не по диагонали читать.

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#28

Сообщение Igor » 06.07.2022{, 16:43}

Dryundel писал(а):
06.07.2022{, 08:52}
Не факт что поможет. На самом деле они работают даже медленнее штатных
Может подскажите что сделать?
Я думал может перенести блок в функцию - произошло событие - вызывается функция -блок играет мелодию
Мне для проекта не важно что функция затормозит основной цикл, главное чтобы мелодия звучала без тормозов вне зависимости от времени цикла

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#29

Сообщение Dryundel » 06.07.2022{, 17:41}

Igor писал(а):
06.07.2022{, 16:43}
Мне для проекта не важно что функция затормозит основной цикл, главное чтобы мелодия звучала без тормозов вне зависимости от времени цикла
Мне ехать пофигу, главное что бы шашечки были.
:smile171: :smile171: :smile171:
С таким диагнозом не ко мне. Извините.

Прикупи медиа-модуль и хоть Робертино Лоретти на нем по сигналу запускай.

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#30

Сообщение Igor » 14.07.2022{, 11:04}

Dryundel,


Разобрался как ноты играть,по МК, вы не указали-- это оказываться для каждой ноьы а не дяя всей медоии

Остался главный вопрос -мелодия играет большими тормозами в составе скетча
Нужели незя вызывть блок по какому либо событию?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#31

Сообщение Dryundel » 14.07.2022{, 11:45}

Igor писал(а):
14.07.2022{, 11:04}
Остался главный вопрос -мелодия играет большими тормозами в составе скетча
А какая длительность нот и такта?

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#32

Сообщение Igor » 14.07.2022{, 13:17}

Dryundel, Сделал так
NOTE_C4, 300, NOTE_D4, 300, NOTE_E4, 300, NOTE_F4, 300, NOTE_G4, 300,0,300
Нот = 6
Длительность такта = 305
Кол нот =6

Играет но с тормозами

И да, переделал блок на Миллисекунды

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#33

Сообщение Dryundel » 14.07.2022{, 14:15}

Итак, разбор полетов.
1. Вы ставите в строке мелодии 300. Это 1/300 секунды это 3 миллисекунды.
Где Вы слышали такую музыку? Какой пианист вам сыграет 300 нот за секунду? Хорошо, Вы взяли электронного пианиста, но имейте же совесть. Я понимаю хотите услышать пилимпилим, Вам нравится этот перелив. Хорош извращаться. Это не квантовый компьютер.
Я уже писал, хотите воспроизвести любой звук, возьмите какой нибудь MP3 модуль и не изгаляйтесь над Ардуинкой.

2. Такт - это промежуток времени между началом нот. Вы видели метроном у пианистов? Вот это такая же штука, только электронная.
Его длительность надо ставить немного больше длительности ноты, а не от балды 305 мс. Паузой будет такт минус длительность ноты.

3. Об этом я уже тоже писал, но видимо кто то из модераторов потер. Как только длительность цикла вашей программы превысит длительность ноты или такта, Ардуинка превращается в тыкву. Вы как то соизмеряйте свои хотелки с возможностями контроллера, тем более когда пишете программу в FLProg.

4.
Igor писал(а):
14.07.2022{, 11:04}
Нужели незя вызывть блок по какому либо событию?
Можно. Можно сделать цикл в функции. Только это будет равносильно delay() и все другое в это время не будет выполняться.
Про то, что Вам и нормально и фиг с ним, я уже слышал. Но это сиюминутный порыв рассуждений.
В это время ни один датчик не сможет опрашиваться, ни одна кнопка, ее нажатие не может быть считано, вообще ничего не будет работать кроме вашего пилимпилим. Другие блоки тоже используют тайминги и их алгоритм сломается.
А знаете что скажет watchdog, он точно гавкнет на вашу музычку. Ну об этом наверное еще рано.
ОфтопПоказать
И засунули сибирские мужики железный лом в японскую лесопилку. Дриньк - сказала лесопилка. Нууу ё... - сказали мужики.

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#34

Сообщение Igor » 15.07.2022{, 12:13}

Dryundel писал(а):
14.07.2022{, 14:15}
Вы ставите в строке мелодии 300. Это 1/300 секунды это 3 миллисекунды.
С чего это вы решили? это как раз 300 миллисекунд, мелодия из 5 нот играет 1,5 секунды
Dryundel писал(а):
14.07.2022{, 14:15}
Я уже писал, хотите воспроизвести любой звук, возьмите какой нибудь MP3 модуль и не изгаляйтесь над Ардуинкой.
МР3 это уже перебор
Я делаю термометр который при превышении заданной температуры сыграет 5 раз по пять нот.
И зачем мне во время игры снимать показания с датчика или давить кнопки - основной цикл в это время мне не нужен.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#35

Сообщение Dryundel » 15.07.2022{, 12:42}

Igor писал(а):
15.07.2022{, 12:13}
С чего это вы решили? это как раз 300 миллисекунд, мелодия из 5 нот играет 1,5 секунды
С того, что я делал именно так. А если Вы переделали, то я вроде бы не обязан догадаться об этом.
Igor писал(а):
15.07.2022{, 12:13}
МР3 это уже перебор
Igor писал(а):
15.07.2022{, 12:13}
И зачем мне во время игры снимать показания с датчика или давить кнопки - основной цикл в это время мне не нужен.
Ключевое слово здесь мне, но образовано оно от слова сегодня.
Завтра, вам потребуется срочно выключить кнопкой прибор, когда заиграет сигнал тревоги.
А послезавтра вы захотите использовать какой нибудь watchdog и будете сильно разочарованы тем, что контроллер уходит в бесконечный ребут при использовании блока.

Ищите способы сократить время основного цикла.

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#36

Сообщение Igor » 15.07.2022{, 13:17}

Dryundel писал(а):
15.07.2022{, 12:42}
Ключевое слово здесь мне, но образовано оно от слова сегодня.
Завтра, вам потребуется срочно выключить кнопкой прибор, когда заиграет сигнал тревоги.
А послезавтра вы захотите использовать какой нибудь watchdog и будете сильно разочарованы тем, что контроллер уходит в бесконечный ребут при использовании блока.
Ничего не захочу Это будет законченное устройство 2 в 1 - термометр для коптилки на газовой плите который будет сигнализировать о превышении или понижении температуры
И термостат с гистерезисом для изготовления йогурта. Он не будет использовать блок мелодии. Работать они будут конечно по отдельности.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#37

Сообщение Dryundel » 15.07.2022{, 14:07}

Aaaaaaaaaaaaaaaaaaaaaa!!!
Проект давай.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Звуковой контроль событий

#38

Сообщение Rovki » 15.07.2022{, 16:26}

Dryundel писал(а):
15.07.2022{, 14:07}
Aaaaaaaaaaaaaaaaaaaaaa!!!
Проект давай.
И Йогурта побольше :D
Электронщик до мозга костей и не только

Igor
Рядовой
Сообщения: 55
Зарегистрирован: 28.11.2020{, 06:20}
Репутация: 3
Имя: test

Звуковой контроль событий

#39

Сообщение Igor » 15.07.2022{, 17:19}

Rovki писал(а):
15.07.2022{, 16:26}
И Йогурта побольше :D
Вы зря смеётесь - покупается пленка на 220в для отопления( не помню как называется, то ли инфракрасная то ли просто графитовая, в общем прозрачная и с черными полосками которые и греют)
Достаточно пол метра, сворачивается в рулон и туда как раз входит трехлитровая банка. Я еще обернул термоизоляцией.
Покупаете молоко и закваску - либо в аптеке, либо просто в магазине - хоть кефир, хоть сметану, хоть йогурт
10 часов обязательно при температуре 38 гр и три литра полезного напитка готово!

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Звуковой контроль событий

#40

Сообщение Dryundel » 15.07.2022{, 17:28}

Igor писал(а):
15.07.2022{, 17:19}
Покупаете молоко и закваску - либо в аптеке, либо просто в магазине - хоть кефир, хоть сметану, хоть йогурт
10 часов обязательно при температуре 38 гр и три литра полезного напитка готово!
Да ладно! :shok:
У меня как то проще. Берешь молоко, ставишь на стол, на следующий день полезный напиток готов. А если сварить, то и творог прекрасный.
Вот любите Вы поизвращаться. И с заквасками в том числе. Еще и импортные небось. :D

Ответить

Вернуться в «Звук и видео»