импорт аудиофайла в МК

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3514
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

uwrtey писал(а):объясните пожалуйста - почему?
Вы знаете, что такое ASCII, но упускаете, что первые 32 символа этой кодировки являются управляющими. Блокнот не умеет правильно интерпретировать эти символы и искажает их. Откройте любой двоичный файл в блокноте, сохраните его оттуда под другим именем и сравните старый и новый файлы - они будут отличаться. Например, все нули (0x00) блокнот заменит на пробелы (0x20).
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Вполне исчерпывающий ответ. Спасибо большущее.
:beer:
Кстати, Ваша программа лучшая из представленных - так как формирует самый удобный массив данных.

Разрешите еще один вопрос задам:
Ваша программулина по разному декодирует 16ти_битные и 8ми_битные файлы.
конвертация 8ми битных мне понятна
например цифра 1 конвертируется в запись вида 0x31 ( ASKII - тут все понятно )

а вот 16ти битных - не понятна
на выходе получается 32ух битное число

Так и должно быть? Или этой программой можно обрабатывать только 8ми битные сэмплы?

прикрепил 16ти битный сэмпл в формате RAW
но вручную изменил его содержимое на цифру 1
программа выдает результат вида
0xFF 0xFE 0x31 0x00

ASKII - штука восьмибитная в принципе.
но есть же всякие ANSI и юникод типа UTF-8(16,32 и тд)
тут в обще не понимаю....
Вложения
сэмпл.zip
(114 байт) 128 скачиваний
не зная броду не лезь к вольтмоду
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3514
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Сообщение smacorp »

uwrtey писал(а):прикрепил 16ти битный сэмпл в формате RAW
У меня встречный вопрос - из чего следует, что Ваш RAW 16-битный? Может просто это именно Вы знаете, что байты в этом файле следует интерпретировать, как 16-битный звук? А я же вижу просто последовательность данных длиной в 4 байта.
uwrtey писал(а):Или этой программой можно обрабатывать только 8ми битные сэмплы?
uwrtey писал(а):ASKII - штука восьмибитная в принципе. но есть же всякие ANSI и юникод типа UTF-8(16,32 и тд) тут в обще не понимаю
Вы запутались. Забудьте пока про ASCII, UTF-8 и прочие кодировки - это всё просто правила интерпретации. Положим, есть некий байт - в одной кодировке он интерпретируется так, в другой - эдак, в третьей - ещё как-то - но в своей сути это просто двоичные данные - "единица хранения и обработки цифровой информации; совокупность битов, обрабатываемая компьютером одномоментно" (Википедия). И моя (и подобные ей) утилита просто берёт этот байт и представляет его в 16-ричном формате и в текстовом виде, в котором его удобно прилинковать (вставить) в исходный текст программы.

Таким образом, утилита не знает и не должна знать (такое было ТЗ) какие данные обрабатывает. Для неё любой файл это просто поток одиночных байтов. Уже Вы, вставив эти данные в свой код, как хотите, так их и обрабатываете.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Ну вот, теперь я еще больше запутался.

Файл 16ти-битный потому, что я его сохранил как 32кГц, 16 бит, RAW. ( раз я его так сохранил, значит это только я об этом знаю )
потом я открыл этот файл блокнотом и удалил все данные.
Вместо данных я написал этим-же блокнотом цифру "1"
в итоге получил то, что показал выше.

А весит этот файл действительно 4 байта..

А-а, блин, мы же уже говорили, что не нужно RAW файлы открывать блокнотом, соответственно и править их блокнотом не нужно...
Все понял свою ошибку. Прошу прощения, затупил чего-то...
Спасибо. :beer:
не зная броду не лезь к вольтмоду
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Теперь осталось выяснить как воспроизводить этот звук.
Для воспроизведения я хочу использовать аппаратный ШИМ.
А для этого нужно решить еще как минимум два вопроса:
1) Как вычислить необходимую частоту для ШИМа?
2) данные в получившемся массиве это длины импульсов или это коэффициент заполнения?

Попытаюсь сам ответить на этот вопрос.
Звук когда то был аналоговым, но в компьютер он попал уже в цифровом виде, так как прошел АЦП.
Качество преобразованного звука напрямую зависит от разрядности АУП, а так-же от частоты преобразований.
Я взял некоторый сэмпл и сохранил его в формате RAW.
Качество для сохранения я выбрал 8 бит и частоту 33кГц, но программа автоматически сохранила его как 44100 Гц - потому, как исходник был записан с такой частотой.

Значит частота моего ШИМа должна быть 44100 Гц ( попробую и 33кГц )
А файл с данными - это длительности импульсов, которые можно выводить в готовом виде без дополнительного преобразования.
не зная броду не лезь к вольтмоду
Реклама
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пт сен 21, 2007 17:53:23
Откуда: Зарайск

Сообщение mrFox »

период ШИМ должен совпадать с частотой дискредитации аудиофайла
частота на входе блока ШИМ зависит от разрядности - 8бит: умножаем на 256; 12 на 1024
у меня вполне нормальный звук был и при 16кГц/8бит
правда в мегу16 (часы) 2 коротких звука влезло только после сжатия (ADPCM)
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

частота на входе блока ШИМ зависит от разрядности - 8бит: умножаем на 256; 12 на 1024
Не пойму.
Для чего умножать на 256?
не зная броду не лезь к вольтмоду
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

Для начала, вам необходимо прочитать документацию на контроллер и разобраться как работает PWM (эта информация не "Top Secret").
Без этого, вы будете пытаться что-то делать не понимая что делаете.
Уже было сказано:
Если вам нужно выводить в PWM числа 0-255 - частота тактирования секции PWM должна быть равна 256*(частота дискретизации).
Разберётесь сами - запомните надолго.
Мне, в своё время, удобнее было изучать PWM подключив к PWM-выходу осциллограф.
Вывод звукового фрагмента - это уже следующий этап.
На всякий случай: пересчитать звуковой файл под произвольную частоту дискретизации можно, к примеру, в CoolEditPro.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

Как работает ШИМ я знаю :)
И не однократно строил разные схемы в которых его использовал.
Вопрос в другом.
Я не совсем понимаю, что значит сохранить аудиофайл как 8 бит с частотой дискретизации, например, 4 кГц
я представляю это как работу АЦП.
8 бит - это разрядность АЦП, а 4 кГц - это частота выполнения преобразований.
если это так, то для того что-бы модулировать этими данными ШИМ, нужно
настроит ШИМ на частоту 4 кГц и каждый раз ( во время прерывания, настроенного по компатору ) выводить новое значение из массива данных.
Но видимо, я не правильно представляю сохранение аудиофайла.
И данные, которые я получаю в массиве не являются тем, что я представляю.
не зная броду не лезь к вольтмоду
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

mrFox писал(а):период ШИМ должен совпадать с частотой дискредитации аудиофайла
не обязательно совпадать. главное - частота ШИМ не должна быть ниже частоты дискретизации, но запросто может быть выше, желательно, кратно. а вот частота обновления значения скважности ШИМ-а должна быть в точно равной частоте дискретизации.

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

mrFox писал(а):период ШИМ должен совпадать с частотой дискредитации аудиофайла
добавлю - в этой конструкции частота шим 250kHz, а частота сэмплирования может быть от 8 до 48kHz
http://elm-chan.org/works/sd8p/report.html
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

Если вы имели ввиду "настроит ШИМ на частоту 4 кГц" это получать с него прерывания с этой частотой - это правильно.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

uwrtey писал(а):если это так, то для того что-бы модулировать этими данными ШИМ, нужно
нужно:
1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует)
2. настроить таймер на частоту семплирования аудиофайла (4 кГц в вашем случае)
3. по прерыванию таймера с частотой 4 кГц выдавать на ШИМ байты

да, главное, надо учесть, что "отсутствию звука" в динамике соответствует не ШИМ со скважностью 0%, а ШИМ со скважностью 50%. то есть данные должны быть соответствующим образом "отнормированы" перед выдачей на ШИМ
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

ARV писал(а):...нужно:
1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует)...
Зачем так извращяться?
Мне это напоминает: "Налепить ошибок, а потом всё свободное время их исправлять".
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Albert_V писал(а):Зачем так извращяться?
где вы видите извращения? в чем ошибки? я, по-моему, вполне доступно объяснил, почему даю такой совет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

ARV писал(а):где вы видите извращения?....
Если просчитана частота дискретизации, к примеру, 15625Hz - это значит что каждые 64µS вы получаете прерывания с таймера (который связан с PWM) и по этим прерываниям обновляете данные PWM.
Не реже и не чаще (если хотите получить не "крякалку", а более-менее "приличный" звук).
----
P.S.
Если делать так как вы предлагаете - на выходе получите кроме частоты дискретизации ещё и разность частот (частота PWM, частота дискретизации). Оно надо???
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

вы все правильно сказали, причем это совершенно не противоречит тому, что сказал я.

если частота семплов 4КГц, то обновлять значение ШИМ надо с частотой 4КГц - разве я говорил иное?
где в ваших рассуждениях требование к частоте ШИМ? а я всего лишь сказал, что она должна быть по возможности как можно выше, желательно кратно частоте сэмплов, но в любом случае не ниже частоты семплирования.

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

ARV писал(а): 1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует)
2. настроить таймер на частоту семплирования аудиофайла (4 кГц в вашем случае)
3. по прерыванию таймера с частотой 4 кГц выдавать на ШИМ байты
Я понял так, как вы сказали. "Частота ШИМ не равна частоте семплирования аудиофайла".
Возможно, мы друг друга не поняли.
:beer:
Последний раз редактировалось Albert_V Пн июл 20, 2015 09:57:31, всего редактировалось 3 раза.
Друг Кота
Аватара пользователя
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Сообщение Albert_V »

uwrtey писал(а):...Но видимо, я не правильно представляю сохранение аудиофайла...
Возможно, вам ТАК будет проще представить...
/smpl - значение данных 0-255, "точки" на второй картинке - значения данных (то, что нужно выдать в PWM)/
Изображение

Изображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Сообщение uwrtey »

ARV, приветствую Вас. Аватарку сменили?
главное - частота ШИМ не должна быть ниже частоты дискретизации, но запросто может быть выше, желательно, кратно. а вот частота обновления значения скважности ШИМ-а должна быть в точно равной частоте дискретизации.
Спасибо большое. Сразу видно достойный ответ! Все сразу стало на свои места.
Я почему то думал, что частота ШИМ должна быть равна частоте дискретизации.
Я еще подумал, что звук получится отвратительный....( вот и появились сомнения )
Теперь я понимаю что частота дискретизации это частота обновления данных в ШИМ.
А частота ШИМ должна быть намного выше.
не зная броду не лезь к вольтмоду
Ответить

Вернуться в «AVR»