Быстрое воспроизведение звуков.

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

Добрый день.
Делаю лазертаг на ардуино нано. Посылаю принимаю сигнал с помощью iRemote Возникла проблема с воспроизведением звуков.
Сначала сделал вариант с воспроизведением звуков с sd карточки самой ардуиной.
Что-то типа такого
https://portal-pk.ru/news/223-arduino-sd-karta-vosproizvodim-zvuki-i-muz...
Все вроде отлично. Звук есть, темп стрельбы в норме. 650в/мин поддерживает. Спаял 2 тагера, попробовали сыграть с сыном. Заметил особенность, что когда тагер стреляет его поразить невозможно. Когда воспроизведение звуков убрал, все работает замечательно. Насколько понял, воспроизведение звуков грузит ардуино настолько, что с библиотекой iRemote она уже не успевает работать.
Второй этап был применение DFmp3 плеера. Здесь воспроизведением заведует сам плеер. Проблема в том, что он не может. Воспроизводить файлы с частотой 650/мин. То есть около 10/ сек.
Третий этап - производители до перехода на stm32 использовали pic16 для управления всем и isd1700серии для воспроизведения звуков. Приобрел такую. Нашел программу для записи в нее звуков. Подсказали как управлять ей по ISP. Микросхема хранит звуки по ячейкам памяти. Нпапример звук выстрела (примерно 1 сек) хранится в 0x10 - 0x1B если воспроизводить весь диапазон с задержкой 100мсек, то звуки выстрела полностью повтаряются, примерно раз в сек.
Если воспроизводить минимальный отрезок 0х10 - 0х11 с такой же задержкой, уже лучше, но все равно слышны паузы в начале воспроизведения каждого звука. Опять с быстродействием беда.
Вопрос. Как обеспечить воспроизведение звуков Ардуиной с темпом 10/сек? Или это невозможно? Ну не вторую же ардуину для этого ставить?

rkit
Offline
Зарегистрирован: 23.11.2016

Возможно. Твоя проблема явно в недостатке квалификации. Обратись в платный раздел.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Что такое "частота 650/мин и почему, вдруг, мр3 плеер не может её играть? 

Можно и вторую ардуино поставить. Нано дешевле модуля плеера стоит.

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

rkit пишет:

Возможно. Твоя проблема явно в недостатке квалификации. Обратись в платный раздел.

Согласен, тогда в каком направлении двигаться? В платный однозначно нет, поскольку интересно разобраться самому.

asam пишет:

Что такое "частота 650/мин и почему, вдруг, мр3 плеер не может её играть? 

Можно и вторую ардуино поставить. Нано дешевле модуля плеера стоит.

Звук должен выводиться каждые 100 миллисекунд, прерывая предыдущий. DFplayer это 100% сможет? Попробую еще раз тогда.

rkit
Offline
Зарегистрирован: 23.11.2016

Если хочешь разбираться сам, то направление только одно: разбираться самому. А если забыть про твое лицемерие на секунду, то разберись как работает твой случай, и почему не получилось.

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Я не понял, почему вы хотите выводить звуки с темпом 10 в секунду, а не заранее собранный кусок (имеется в виду воспроизведение через плеер). Можно пояснить?

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

rkit пишет:

Если хочешь разбираться сам, то направление только одно: разбираться самому. А если забыть про твое лицемерие на секунду, то разберись как работает твой случай, и почему не получилось.

Странно, я думал форум, и уж тем более раздел песочница, служит для того, чтобы помочь человеку. Я же не прошу вас код за меня писать, просто объяснить как это лучше сделать. (Оставить SDкарту напрямую в ардуину, DFplayer, или еще какие-либо пути).

Ну и круто, конечно, задал вопрос - лицемер. 

Спасибо, подожду более адекватный ответ.

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

Bruzzer пишет:

Я не понял, почему вы хотите выводить звуки с темпом 10 в секунду, а не заранее собранный кусок (имеется в виду воспроизведение через плеер). Можно пояснить?

Выстрел может быть одиночным, тогда надо воспроизводить полностью звуковой файл длиной около 1 сек.

А может быть очередью, тогда звуки надо выводить каждые 100мсек.

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Так я и спрашиваю, почему нельзя записать целиком очередь и потом ее воспроизводить, прерывая при необходимостию

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

Bruzzer пишет:

Так я и спрашиваю, почему нельзя записать целиком очередь и потом ее воспроизводить, прерывая при необходимостию

Тогда звук одиночного выстрела будет обрезанным, длиной 100мсек всего.  А сам файл звука одиночного выстрела около 1сек.

b707
Offline
Зарегистрирован: 26.05.2017

Aleksandr Makarov пишет:

Тогда звук одиночного выстрела будет обрезанным, длиной 100мсек всего.  А сам файл звука одиночного выстрела около 1сек.

ну сделайте отдельно одиночный. отдельно очередь...

На одной ардуино вы вашу проблему не решите. Берите две.

Bruzzer
Offline
Зарегистрирован: 17.03.2020

Я так понял, что звук не Т-Т-Т-Т-Т-Т-Т а Пиу-Пиу-Пиу-Пиу-Пииууууу, т.е в конце выстрела надо вставлять эхо, тогда действительно прерывать нельзя и надо собирать из частей.

rkit
Offline
Зарегистрирован: 23.11.2016

Aleksandr Makarov пишет:

Я же не прошу вас код за меня писать, просто объяснить как это лучше сделать.

А в предыдущем сообщении ты хотел сам разобраться. А теперь уже объяснить тебе должны. Это и есть лицемерие. Ну хорошо, объясняю: нужно выбрать контроллер с аппаратным ЦАП, способным к DMA, прочитать по нему учебник (подразумевая что уже прочитан учебник по общему программированию), и написать код.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ещё вариант: поискать плеер пореактивней.

nik182
Offline
Зарегистрирован: 04.05.2015

Тут или много ядерный процессор или много ардуин на каждый выстрел генерящих звук. Обрезать будет убого.

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

nik182 пишет:
Тут или много ядерный процессор или много ардуин на каждый выстрел генерящих звук. Обрезать будет убого.

Спасибо, как думаете, дигиспарк Attyny85 с этим справится?

sadman41 пишет:
Ещё вариант: поискать плеер пореактивней.

Есть примеры таких?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А откуда процессор поймет будет одиночный выстрел или очередь? Если переключателем огня - тогда совет про разные звуковые файлы в кассу. Если каким-то другим мистическим образом, то к хрустальному шару.

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

mykaida пишет:

А откуда процессор поймет будет одиночный выстрел или очередь? Если переключателем огня - тогда совет про разные звуковые файлы в кассу. Если каким-то другим мистическим образом, то к хрустальному шару.

Как в автомате. Нажимаешь кратковременно - есть один выстрел, держишь - получается очередь, пока магазин не кончится.

Например звук условно БАХХХХ. - 0,8сек

Очередь будет БА-БА-БА-БАХХХХ

БА условно по 0,1 сек.

последним выстрелом должен быть полный звук.

Если брать выстрелы из разных звуковых файлов, отдельно записать БА и отдельно БАХХХХ то между ними получится небольшая пауза. совсем короткая, но ее слышно. Да и очередь же может быть любой длины. Так было на DFPlayer и на ISD1700

Попробую DIGISPARK + SDcard не получится, тогда вторую ардуину поставлю.

b707
Offline
Зарегистрирован: 26.05.2017

Aleksandr Makarov пишет:

Попробую DIGISPARK + SDcard не получится

не получится

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Aleksandr Makarov пишет:

Как в автомате. 

Например в АК74 надо переключить на одиночную или автоматическую стрельбу. АК103 - так же плюс отсечка по 3 патрона. Так про какой автомат идет речь?

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

Одиночный и очередь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Aleksandr Makarov пишет:

Согласен, тогда в каком направлении двигаться? В платный однозначно нет, поскольку интересно разобраться самому.

В таком случае Вы явно выбрали не ту задачу. С этой Вам пока не справится. Так что, если действительно хотите разобраться (а не сделать конкретный проект, которой здесь описали), то действовать нужно иначе. А именно, забыть о звуке и сделать несколько небольших проектов, которые Вы при небольшой помощи можете осилить.

В качестве первого такого проекта могу порекомендовать задачу - заставить мигать несколько светодиодов (2-3) с различными некратными периодами.

Цитата:

Звук должен выводиться каждые 100 миллисекунд, прерывая предыдущий. DFplayer это 100% сможет? Попробую еще раз тогда.

А теперь "почему Вам не с этой задачей не справится".

Дело в том, что Вы хотите добиться поведения несколько нетипичного для устройств, создаваемых на базе Ардуино. По умолчанию предполагается, что погрешность или пауза в несколько десятых долей секунды несущественна. А это значит, что для воплощения проекта достаточно квалифицированный исполнитель должен будет провести достаточно объемную работу, протестировав несколько вариантов (причем, неизвестно даже - сколько). Ваша квалификация для этого явно недостаточна, а объем работы таков, что бесплатно это никто делать не будет. Ну и готового решения, естественно, ни у кого нет в силу экзотических требований. 

Нет, разумеется, есть отличная от нуля вероятность найти где-нибудь на просторах англоязычного И-нета похожий проект. Но это - как повезет. И, опять же, разбираться нужно будет самому, а Вы к этому пока не готовы.

Ну и мой прогноз: проект этот вполне реальный при адекватном выборе "железа". Вот только я с ходу не могу сказать, каково же оно должно быть. Надо пробовать. Лично я вижу два основных варианта:

1. Применение какой-либо дешевой Ардуины + специализированный плеер - dfpayer или mp3-плеер на основе чипа VS1053b. 

2. Использование Arduino Due.

Первый вариант может наглухо упереться в особенности самого формата mp3 (или подобных), который не гарантирует, что при сжатии не будет изменена длительность звука, т.е. алгоритм произвольным образом сдвигает звук во времени, и в звуке могут появиться лишние паузы. Это только сам звук. Воспроизводящее устройство ничего с этим фактом поделать не может, более того, может добавить собственные непрошенные "особенности". Лично я сталкивался с тем, что при сжатии в mp3 в звук банально добавляется пауза около 50 мс. Выяснив это, я предпочел просто отказаться от mp3 и соответствующих аппаратных плееров.

Второй вариант имеет, минимум, три недостатка.

- Arduino Due - самый дорогой из контроллеров Arduino.

- соответственно, он хуже всего поддерживается в библиотеках и очень малая доля Arduino проектов использует этот контроллер. Т.е. при использовании библиотек велика вероятность столкнуться с несовместимостью.

- сложная программная реализация: все, что в простейшем случае делает аппаратный плеер под управлением простых команд, придется делать ручками, притом, явно выходя за пределы концепции Arduino и тщательно изучая дэйташит на контроллер. При этом примеры кода в И-нете практически отсутствуют.

 

Так что могу только повториться: хотите разобраться, забудьте на время (полгода-год-два) о звуке и начните с мигания светодиодами. Иначе Вам эту задачу не одолеть.

Upper
Offline
Зарегистрирован: 23.06.2020

Автор в первом топике пишет, что у него есть устраивающий его вариант воспроизведения звуков. В чем тогда сложность разделить задачу на две ардуины? Зачем начинать с моргания светодиодами?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Upper пишет:

Автор в первом топике пишет, что у него есть устраивающий его вариант воспроизведения звуков. В чем тогда сложность разделить задачу на две ардуины? Зачем начинать с моргания светодиодами?

Автор пишет "вроде" и систему из двух ардуинок не проверял.

В контексте моего сообения №21 это означает, что кроме двух упомянутых существует еще вариант:

3. Использование двух ардуинок.

Что, кстати, совсем не отменяет того, что могут дополнительно появиться варианты 4, 5, 6 и т.д.

 

PS. Сам я при написании №21 по указанной ссылке не заглядывал, но откинул этот вариант по причине неудовлетворительного, на мой взгляд, качества звука. После Вашего сообщения №22 я все-таки открыл ссылку и убедился, что автор этой статьи оценивает звук: "Качество воспроизводимой музыки не очень хорошее"

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

andriano пишет:

Upper пишет:

Автор в первом топике пишет, что у него есть устраивающий его вариант воспроизведения звуков. В чем тогда сложность разделить задачу на две ардуины? Зачем начинать с моргания светодиодами?

Автор пишет "вроде" и систему из двух ардуинок не проверял.

В контексте моего сообения №21 это означает, что кроме двух упомянутых существует еще вариант:

3. Использование двух ардуинок.

Что, кстати, совсем не отменяет того, что могут дополнительно появиться варианты 4, 5, 6 и т.д.

 

PS. Сам я при написании №21 по указанной ссылке не заглядывал, но откинул этот вариант по причине неудовлетворительного, на мой взгляд, качества звука. После Вашего сообщения №22 я все-таки открыл ссылку и убедился, что автор этой статьи оценивает звук: "Качество воспроизводимой музыки не очень хорошее"


Спасибо за развернутый ответ. Насколько я понял, специализированных решений здесь нет, то есть поставить какой-либо модуль и просто им управлять не получится. Значит пойду максимально простым для меня путем, поставлю вторую ардуину. Говорить о качестве звука, воспроизводимого динамиком в 4 см как-то не приходится. А ребенку без звуков играть не так интересно.
Еще обидно, что производители реализовали как-то вывод звуков от ISD1760, а у меня не получается и инфы очень мало по этой теме.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Aleksandr Makarov пишет:
Насколько я понял, специализированных решений здесь нет, то есть поставить какой-либо модуль и просто им управлять не получится. Значит пойду максимально простым для меня путем, поставлю вторую ардуину.

А вот на этот вопрос у меня нет ответа. 

1. Мне известны только широко распространенные бюджетные решения для Ардуино. Возможно, существуют решения из существенно иного ценового диапазона, которые полностью удовлетворяют Вашим требованиям. Мне о них просто не известно.

2. По поводу "не получится", я, собственно, писал: нужны достаточно объемные исследования. Без них сделать вывод, получится или не получится, нельзя.

Опять же: пока не сформулировано точных требований к звуку:

- максимальная сдвижка во времени,

- максимальная добавляемая пауза,

- максимальный уровень помех в звуке (качество звука).

При снижении этих требований повышается вероятность найти существующий готовый проект, что не требует такой квалификации, как самостоятельное решение задачи.

 

Ну и уже поднятый здесь вопрос о "лицемерии":

Действительно ли Вы хотите разобраться, или на самом деле Вам нужна реализация конкретного проекта? На текущем форуме эти две вещи считаются противоположными (слова "хочу разобраться" без реального желания изучать схемотехнику и программирование рассматриваются как попытка получить код на халяву).

Aleksandr Makarov
Offline
Зарегистрирован: 01.02.2019

Я про разобраться вроде не писал. Мне нужно решение для моего проекта. Просто я дума, что есть какой-нибудь другой плеер, или микросхема записи воспроизведения, которые работают вообще без пауз, или в дф плеере какой-нибудь другой кодек мп3 применить, не знаю. Оказывается такого решения нет. Ставлю ардуину, иду читать как их соединить. Мнения услышал.

По параметрам надо, чтобы это субъективно нормально звучало.
Допустим допустимые 20мсек сдвижка, 20мсек задержка
Звук
частота дискретизации: 16000 Гц;
количество каналов: моно;
количество бит: 8.
Можно хуже, звук выводится на китайский 4ома 3ватта динамик так что качество там понятие очень сильно относительное.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Aleksandr Makarov пишет:
Я про разобраться вроде не писал.

Сообщение №3 писали не Вы?

Aleksandr Makarov пишет:

Согласен, тогда в каком направлении двигаться? В платный однозначно нет, поскольку интересно разобраться самому.

Цитата:

Мне нужно решение для моего проекта. 

Тогда Вам однозначно в платный раздел "Ищу исполнителя" и rkit был прав насчет лицемерия: слова "разобраться самому" нужны были исключительно для обретения халявы. Но не прошло.

Цитата:

Просто я дума, что есть какой-нибудь другой плеер, или микросхема записи воспроизведения, которые работают вообще без пауз, или в дф плеере какой-нибудь другой кодек мп3 применить, не знаю. Оказывается такого решения нет.

На самом деле это пока неизвестно. И насколько критично 50 мс - тоже неизвестно. В общем, решение, возможно, и есть, но для того, чтобы его найти надо основательно поработать. Готового - скорее всего нет.

Цитата:

Ставлю ардуину, иду читать как их соединить. Мнения услышал. По параметрам надо, чтобы это субъективно нормально звучало.

Это вообще ни о чем: если мы слушаем через 300-Ваттный стереокомплекс, у нас одно представление о "субъективно нормальном звуке", а если через 5-сантиметровый динамик - совсем другое. Т.к. от последнего мы в принципе ничего "нормального" не ожидаем.

Цитата:

Допустим допустимые 20мсек сдвижка, 20мсек задержка Звук частота дискретизации: 16000 Гц; количество каналов: моно; количество бит: 8. Можно хуже, звук выводится на китайский 4ома 3ватта динамик так что качество там понятие очень сильно относительное.

Если использовать mp3 - 20 мс будет под вопросом.

Если использовать указанный в исходном сообщении проект, то под вопросом параметры качества звука. В частности, в динамик будут лезть те самые 16000 Гц, попадающие в звуковой диапазон, притом с амплитудой много выше амплитуды полезного сигнала. Притом вот лично я не слышу частоты 16000, а жена - слышит. А уж как дети могут реагировать на такой звук - вообще страшно представить. Другими словами, без анализа вопроса лично я мог бы, не заметив, сделать очень вредное для детского слуха устройство. Ну а схема подключения динамика - вообще никуда не годится. Мне кажется, ардуинщики вообще не знают, как следует подключать динамик, даже схема из известной https://ditecnomakers.com/wp-content/uploads/2018/11/Arduino-BC.pdf динамик подключен очень странно (хотя это намного лучше, чем по Вашей ссылке).