Страница 2 из 3

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

Добавлено: Сб июл 18, 2015 21:48:54
smacorp
uwrtey писал(а):объясните пожалуйста - почему?
Вы знаете, что такое ASCII, но упускаете, что первые 32 символа этой кодировки являются управляющими. Блокнот не умеет правильно интерпретировать эти символы и искажает их. Откройте любой двоичный файл в блокноте, сохраните его оттуда под другим именем и сравните старый и новый файлы - они будут отличаться. Например, все нули (0x00) блокнот заменит на пробелы (0x20).

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

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

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

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

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

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

ASKII - штука восьмибитная в принципе.
но есть же всякие ANSI и юникод типа UTF-8(16,32 и тд)
тут в обще не понимаю....

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

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

Таким образом, утилита не знает и не должна знать (такое было ТЗ) какие данные обрабатывает. Для неё любой файл это просто поток одиночных байтов. Уже Вы, вставив эти данные в свой код, как хотите, так их и обрабатываете.

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

Добавлено: Вс июл 19, 2015 00:34:28
uwrtey
Ну вот, теперь я еще больше запутался.

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

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

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

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

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

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

Значит частота моего ШИМа должна быть 44100 Гц ( попробую и 33кГц )
А файл с данными - это длительности импульсов, которые можно выводить в готовом виде без дополнительного преобразования.

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

Добавлено: Пн июл 20, 2015 00:15:13
mrFox
период ШИМ должен совпадать с частотой дискредитации аудиофайла
частота на входе блока ШИМ зависит от разрядности - 8бит: умножаем на 256; 12 на 1024
у меня вполне нормальный звук был и при 16кГц/8бит
правда в мегу16 (часы) 2 коротких звука влезло только после сжатия (ADPCM)

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

Добавлено: Пн июл 20, 2015 07:46:34
uwrtey
частота на входе блока ШИМ зависит от разрядности - 8бит: умножаем на 256; 12 на 1024
Не пойму.
Для чего умножать на 256?

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

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

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

Добавлено: Пн июл 20, 2015 08:30:23
uwrtey
Как работает ШИМ я знаю :)
И не однократно строил разные схемы в которых его использовал.
Вопрос в другом.
Я не совсем понимаю, что значит сохранить аудиофайл как 8 бит с частотой дискретизации, например, 4 кГц
я представляю это как работу АЦП.
8 бит - это разрядность АЦП, а 4 кГц - это частота выполнения преобразований.
если это так, то для того что-бы модулировать этими данными ШИМ, нужно
настроит ШИМ на частоту 4 кГц и каждый раз ( во время прерывания, настроенного по компатору ) выводить новое значение из массива данных.
Но видимо, я не правильно представляю сохранение аудиофайла.
И данные, которые я получаю в массиве не являются тем, что я представляю.

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

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

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

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

Добавлено: Пн июл 20, 2015 08:39:36
oleg110592
mrFox писал(а):период ШИМ должен совпадать с частотой дискредитации аудиофайла
добавлю - в этой конструкции частота шим 250kHz, а частота сэмплирования может быть от 8 до 48kHz
http://elm-chan.org/works/sd8p/report.html

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

Добавлено: Пн июл 20, 2015 08:43:20
Albert_V
Если вы имели ввиду "настроит ШИМ на частоту 4 кГц" это получать с него прерывания с этой частотой - это правильно.

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

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

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

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

Добавлено: Пн июл 20, 2015 08:49:06
Albert_V
ARV писал(а):...нужно:
1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует)...
Зачем так извращяться?
Мне это напоминает: "Налепить ошибок, а потом всё свободное время их исправлять".

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

Добавлено: Пн июл 20, 2015 08:50:17
ARV
Albert_V писал(а):Зачем так извращяться?
где вы видите извращения? в чем ошибки? я, по-моему, вполне доступно объяснил, почему даю такой совет.

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

Добавлено: Пн июл 20, 2015 09:03:06
Albert_V
ARV писал(а):где вы видите извращения?....
Если просчитана частота дискретизации, к примеру, 15625Hz - это значит что каждые 64µS вы получаете прерывания с таймера (который связан с PWM) и по этим прерываниям обновляете данные PWM.
Не реже и не чаще (если хотите получить не "крякалку", а более-менее "приличный" звук).
----
P.S.
Если делать так как вы предлагаете - на выходе получите кроме частоты дискретизации ещё и разность частот (частота PWM, частота дискретизации). Оно надо???

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

Добавлено: Пн июл 20, 2015 09:34:43
ARV
вы все правильно сказали, причем это совершенно не противоречит тому, что сказал я.

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

в чем вы усматриваете подвох?

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

Добавлено: Пн июл 20, 2015 09:44:50
Albert_V
ARV писал(а): 1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует)
2. настроить таймер на частоту семплирования аудиофайла (4 кГц в вашем случае)
3. по прерыванию таймера с частотой 4 кГц выдавать на ШИМ байты
Я понял так, как вы сказали. "Частота ШИМ не равна частоте семплирования аудиофайла".
Возможно, мы друг друга не поняли.
:beer:

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

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

Изображение

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

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