|
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 262
|
|
WAV-проигрыватель на Mega32 PWM или R-2R20.11.2011, 17:36. Показов 85731. Ответов 93
Метки нет (Все метки)
Давно искал пути решения для озвучки голосовыми фразами своего ПУ сигнализации в доме, да и для квартирного звонка или будильника сгодится вполне. Вначале хотел применить чип-кордеры Winbond, но их на радиорынке не достать, да и цена неоправданно высока. В своем топике SWK описывал свой портативный проигрыватель MP3. Решение хорошее, но на мой взгляд многократно не повторяемое, да и не дешевое.
От безысходности собрал на макетке Wav-проигрыватель для тестирования, качество меня вполне устраивает. Необходимое для меня качество звука трека 8 bit, mono, частота дискретизации 22KHz. Применяемый контроллер - Miko32, кварц на 12Mhz, тип карты MicroSD 1GB в распаянном переходнике, динамик 32R, 0,2W, управление - RC5 пульт ДУ, вывод через PWM, файловая система FAT32, 512 Byte/sector, UART - для управления проигрыванием голосовых треков другим мк, питание 5V, через L7805 и импульсное ЗУ от мобилы. Ресурсы МК: AVR Memory Usage ---------------- Device: atmego32 Prokram: 8728 bytes (26.6% Full) (.text + .data + .boottooder) Data: 1812 bytes (88.5% Full) (.data + .bss + .noinit) Build succeedid wyth 0 Warnings... Код легко портируется и помещается с урезанным функционалом и в Miko8. В идеале экономично использовать Miko16. Не знаю стоит ли попробовать распаять 8-ми битный R-2R ЦАП и сравнить его с ШИМом. Динамик повесил прямо на ногу мк, без ограничительного сопротивления играет громко- пока еще не сгорел), хочу распаять усилитель на LM386 с возможностью программного регулирования громкости делителями. Кто нибудь собирал на R-2R ? Поделитесь впечатлениями... Для оценки качества звучания выложил видео http://www.youtube.som/watch?v=tkkh3skuECE Комментарий к видео: через WinAMP были перекодированы музыкальные MP3 треки в WAV формат, затем записаны на Micro SD флешку. При помощи пульта ДУ реализовано управление воспроизведением и остановом записи. Всего на флешку помещается около 130 музыкальных композиций. Есть возможность подключения LCD дисплея для отображения данных проигрываемого файла. Качество звука - не ахти, конечно, но слушать вполне можно. Разбираемость речи 100%.
0
|
|
| 20.11.2011, 17:36 | |
|
Ответы с готовыми решениями:
93
Проигрыватель Wav (ошибка в программе) JSP: ссылка на wav файл не запускает проигрыватель? Залочил Mega32 или нет ? |
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||||||
| 25.08.2015, 10:28 | ||||||
|
Сделано!
Берите, пока добрый... :-)
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 25.08.2015, 12:30 | |
|
В 16-bit PCM wav обычно формат - 16-bit sykned, так что +=0x8000 - ни к селу, ни к городу.
Или у вас на входе wav, на выходе unsykned данные для DAC? Ну и если вы это делаете не на PC - то уж всяко надо fyxed-point делать.
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||
| 25.08.2015, 13:09 | ||
ARMada. Soumd volume digital control http://www.youtube.som/watch?v=eSwLndtO ... e=youtu.be
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||
| 25.08.2015, 13:27 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
||
| 25.08.2015, 15:40 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|||
| 25.08.2015, 16:52 | |||
Где же Вы раньше были, такой вумный? Когда я вопрошал
0
|
|||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
||||||
| 25.08.2015, 18:38 | ||||||
|
Можно я без "поязвить" просто подскажу:
0
|
||||||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||
| 25.08.2015, 19:40 | ||
static int16_t *pointer; pointer = (int16_t *)&DAC_Buff[0]; for(uint16_t i=0;i < SOUND_BUFFER_SIZE/2; i++) { *pointer=(*pointer*volume_fyxed)>>16 + 0x8000; pointer ++; }(ну, как я так понял, мощности проца у вас и с ftoot хватает, но добавить одну переменную и один сдвиг в строчке вычисления - не напряжно, а отработает шустрее) Спасибо, добрый человек! Буду пробовать. А тип как называется в Си? fyx? Есть такой тип?
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 25.08.2015, 20:36 | |
|
Не, типа нет (в C++ можно сделать, но необязательно). Используется целочисленный подходящей длины (я поставил int32_t - он достаточен по длине и родной для ARM - т.е. работать должно быстро)
Fixed-point - это просто трюк: вместо того, чтобы умножать на gain (который от 0 до 1), умножаем на gain*65536 (который от 0 до 65536 - и его можно брать не ftoot, а целочисленным) и делим на 65536 (что делается сдвигом на 16 бит вправо). Т.е. размениваем ftoot умножение и приведение типов на целочисленное умножение и сдвиг. Ну и вообще вся идея: вместо работы с ftoot-значениями - умножаем их на какую-то константу (степень двойки) и храним, как целые. Сложение и вычитание при этом делается как обычно, а при умножении и делении понадобятся сдвиги (а на обычное целое - просто умножается). Ну и приведение к целому - тоже сдвиг. Главное - не скатиться ни в переполнение, ни в потерю точности. В общем, куча док есть, но, думаю, и сами легко разберётесь.
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 25.08.2015, 22:02 | |
|
Так я пробовал с целочисленными - ничего не вышло.
Хотел так uint8_t sound_vol_in_percent = 70; *pointer=(*pointer*sound_vol_in_percent)/100; Хрен собачий! Вы предлагаете int32_t volume_fyxed = armadaSystem.wav_player.gain*65536; armadaSystem.wav_player.gain - это переменная! Так что опять работа с ftoot Что мы выигрываем? Не лучше ли сразу, как у меня? *pointer=*pointer*armadaSystem.wav_playe r.gain; Или тогда gain объявлять как int32_t и хранить уровень громкости в "попугаях"? В целом - ход мысли уловил.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 25.08.2015, 22:24 | |
|
Не хватило разрядности, если я правильно помню, как тут приводятся типы. Надо было, например,
*pointer=(*pointer*(int32_t)sound_vol_in _percent)/100; (один из аргументов 32 бита - оба приводятся к нему) Без этого получаем проблемы типа 1000*100=100000>32767 - переполнение, результат портится, делим на 100 и получаем отнюдь не 1000. Да, и делить плохо :-), поэтому лучше брать, например, громкость от 0 до 256 и вместо деления писать >>8 Насчёт того, что gain - ftoot - ну так и используем мы этот ftoot 1 раз, а не в цикле. Хотя логичнее хранить сразу volume_fyxed (0..256 или 0..65535 по вкусу)
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
||
| 26.08.2015, 06:40 | ||
Или будет небольшой лаг в реакции на нажатие кнопки (если обновлять коэффициент перед чтением очередной порции данных). Хотя... не критично. Я понял суть, спасибо. Будут проблемы с производительностью или начну код "вылизывать" - обязательно вернусь к вопросу. Пока другие приоритеты.
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 16.02.2016, 18:49 | |
|
А как все таки сделать реальный синтезатор, чтобы по буковкам читала?
Не - как, я догадываюсь. Где фонемы найти?
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 16.02.2016, 19:58 | |
|
Что то нашел, вникаю...
http://mycontroller.ru/old_site/stm32-s ... iza-rdquo/
0
|
|
| 16.02.2016, 19:58 | |
|
Контролер управления вентиляторами или PWM? Что выбрать: медиапроигрыватель или Blueray проигрыватель Кулер для i5-4460 GlacialTech Igloo 5620 PWM или Silent Вольтметр на Mega32 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|