Вроде бы особой необходимости в этой библиотеке и не было, да и времени в обрез, но рутина и скука доедает остатки мозгов. А тут под рукой и динамик пищащий и платка с подключенной к ней SD карточкой периодически на глаза попадается. В общем два вечера просижены почти не зря - на выходе библиотека которая позволяет проигрывать звуковые файлы к подключенному на порт D3 зуммеру или спикеру/динамику считывая данные налету с файлов расположенных на SD карточке.
Идея взята на форуме сайта CarMonitor.ru, где обсуждается их чудесная библиотека PlaySound. Но автор эту идею прикопал, как я понимаю, т.к. по умолчанию библиотека использует пин D11 под пищалку, но этот пин входит в SPI протокол, по которому общается SD карточка. Т.е. конфуз…
Первый вечер потратил, чтоб накидать скетч для Processing который переводит звуковые файлы с текстового формата "*.h", которые прицеплены к примеру в библиотеке PlaySound, в цифровой "*.raw", чтоб не делать это на лету тратя драгоценные микросекунды.
В тот же вечер выяснил, что динамик, висящий на 11м пине, противненько так пищит при инициализации карточки, так что необходимость перекидывать его куда-то была очевидной.
Следующий вечер ушел на вспоминание/ознакомление с принципами управления PWM изнутри процессора, а не командой AnalogWrite. Выбор пал на пин D3, т.к. используется тот же таймер, а значит исправлять придется не так уж и много. Так что спустя пару плясок с бубнами под ритмы трабелшутинга динамик выдал несложную мелодию. А чуть попозже заговорил человеческим голосом, мужским кстати. Хотя должен был женским...
Отсюда и первый плюх - как и следовало ожидать, из-за задержки считывания с карточки замедляется воспроизведение, отсюда и искажение голоса и звука.
Второй недостаток - отсутствие программы конвертирования звуковых файлов в нужный нам формат. Автор свою программку придержал, обещая выдать для личных нужд только доверенным лицам, а я в их круг пока не вхожу. Но есть варианты, например если взять звуковой файлик и с помощью программы Audacity ( ну или какой другой) поколдовать со скоростью, частотой сэмплирования и чего-то там еще, а затем сохранить в формате [RAW (headeer-less)] с кодированием [Unsigned 8bit PCM], то на выходе получим готовый файл нужной нам кондиции.
Переписал библиотеку слегка по другому.
Выкинул экстраполяцию, т.к. нам объем звукового файла уже не принципиален, то и нет смысла его ужимать, чтоб потом восстанавливать.
Добавил функцию досрочной остановки проигрывания StopPlaybackSD() и флажок isPlay, чтоб знать, когда закончится проигрыш и можно начинать следующий.
Кроме того приспособился создавать звуковые файлы в нужном формате.
Идея взята на форуме сайта CarMonitor.ru, где обсуждается их чудесная библиотека PlaySound. Но автор эту идею прикопал, как я понимаю, т.к. по умолчанию библиотека использует пин D11 под пищалку, но этот пин входит в SPI протокол, по которому общается SD карточка. Т.е. конфуз…
Первый вечер потратил, чтоб накидать скетч для Processing который переводит звуковые файлы с текстового формата "*.h", которые прицеплены к примеру в библиотеке PlaySound, в цифровой "*.raw", чтоб не делать это на лету тратя драгоценные микросекунды.
В тот же вечер выяснил, что динамик, висящий на 11м пине, противненько так пищит при инициализации карточки, так что необходимость перекидывать его куда-то была очевидной.
Следующий вечер ушел на вспоминание/ознакомление с принципами управления PWM изнутри процессора, а не командой AnalogWrite. Выбор пал на пин D3, т.к. используется тот же таймер, а значит исправлять придется не так уж и много. Так что спустя пару плясок с бубнами под ритмы трабелшутинга динамик выдал несложную мелодию. А чуть попозже заговорил человеческим голосом, мужским кстати. Хотя должен был женским...
Отсюда и первый плюх - как и следовало ожидать, из-за задержки считывания с карточки замедляется воспроизведение, отсюда и искажение голоса и звука.
Второй недостаток - отсутствие программы конвертирования звуковых файлов в нужный нам формат. Автор свою программку придержал, обещая выдать для личных нужд только доверенным лицам, а я в их круг пока не вхожу. Но есть варианты, например если взять звуковой файлик и с помощью программы Audacity ( ну или какой другой) поколдовать со скоростью, частотой сэмплирования и чего-то там еще, а затем сохранить в формате [RAW (headeer-less)] с кодированием [Unsigned 8bit PCM], то на выходе получим готовый файл нужной нам кондиции.
UPDATE!
Написанное выше не числить!Переписал библиотеку слегка по другому.
Выкинул экстраполяцию, т.к. нам объем звукового файла уже не принципиален, то и нет смысла его ужимать, чтоб потом восстанавливать.
Добавил функцию досрочной остановки проигрывания StopPlaybackSD() и флажок isPlay, чтоб знать, когда закончится проигрыш и можно начинать следующий.
Кроме того приспособился создавать звуковые файлы в нужном формате.
Для этого нужно программой Audacity:
- перевести в моно [Дорожки ->; Стерео в моно]
- открыть нужный файл, подредактировать чего там нужно (повысить громкость по максимуму, к примеру);
- сменить частоту сэмплирования [Дорожки ->; Сменить частоту дискретизации дорожки] с 44100 Гц на 16000 Гц
- изменить скорость воспроизведения [Эффекты ->; Смена скорости…->; Процентное изменение 400.0]
- сохранить в формате RAW [Файл ->; Экспортировать… ->; Тип Файла: 'Прочие несжатые файлы' ->; Параметры… ->; Заголовок:'RAW (header-less)', Кодирование:'Unsigned 8bit PCM' ->; Ok ->; Сохранить]
- сохранить файл на карточку, при этом имя файла не должно превышать 8 символов и быть в латинице
Напиши мне в личку свой Email я скину тебе программу
ОтветитьУдалить