Вы знаете, что такое ASCII, но упускаете, что первые 32 символа этой кодировки являются управляющими. Блокнот не умеет правильно интерпретировать эти символы и искажает их. Откройте любой двоичный файл в блокноте, сохраните его оттуда под другим именем и сравните старый и новый файлы - они будут отличаться. Например, все нули (0x00) блокнот заменит на пробелы (0x20).
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
Вполне исчерпывающий ответ. Спасибо большущее. Кстати, Ваша программа лучшая из представленных - так как формирует самый удобный массив данных.
Разрешите еще один вопрос задам: Ваша программулина по разному декодирует 16ти_битные и 8ми_битные файлы. конвертация 8ми битных мне понятна например цифра 1 конвертируется в запись вида 0x31 ( ASKII - тут все понятно )
а вот 16ти битных - не понятна на выходе получается 32ух битное число
Так и должно быть? Или этой программой можно обрабатывать только 8ми битные сэмплы?
прикрепил 16ти битный сэмпл в формате RAW но вручную изменил его содержимое на цифру 1 программа выдает результат вида 0xFF 0xFE 0x31 0x00
ASKII - штука восьмибитная в принципе. но есть же всякие ANSI и юникод типа UTF-8(16,32 и тд) тут в обще не понимаю....
У меня встречный вопрос - из чего следует, что Ваш RAW 16-битный? Может просто это именно Вы знаете, что байты в этом файле следует интерпретировать, как 16-битный звук? А я же вижу просто последовательность данных длиной в 4 байта.
uwrtey писал(а):
Или этой программой можно обрабатывать только 8ми битные сэмплы?
uwrtey писал(а):
ASKII - штука восьмибитная в принципе. но есть же всякие ANSI и юникод типа UTF-8(16,32 и тд) тут в обще не понимаю
Вы запутались. Забудьте пока про ASCII, UTF-8 и прочие кодировки - это всё просто правила интерпретации. Положим, есть некий байт - в одной кодировке он интерпретируется так, в другой - эдак, в третьей - ещё как-то - но в своей сути это просто двоичные данные - "единица хранения и обработки цифровой информации; совокупность битов, обрабатываемая компьютером одномоментно" (Википедия). И моя (и подобные ей) утилита просто берёт этот байт и представляет его в 16-ричном формате и в текстовом виде, в котором его удобно прилинковать (вставить) в исходный текст программы.
Таким образом, утилита не знает и не должна знать (такое было ТЗ) какие данные обрабатывает. Для неё любой файл это просто поток одиночных байтов. Уже Вы, вставив эти данные в свой код, как хотите, так их и обрабатываете.
_________________ Платы для HLDI - установки лазерной засветки фоторезиста. ФоторезистыOrdyl Alpha 350 и AM 140. Жидкое олово для лужения плат (видео) - самое лучшее и только у меня. Паяльная маска XV501T-4 и KSM-S6189 (5 цветов). Заказ печатных плат - pcbsmac@gmail.com
Файл 16ти-битный потому, что я его сохранил как 32кГц, 16 бит, RAW. ( раз я его так сохранил, значит это только я об этом знаю ) потом я открыл этот файл блокнотом и удалил все данные. Вместо данных я написал этим-же блокнотом цифру "1" в итоге получил то, что показал выше.
А весит этот файл действительно 4 байта..
А-а, блин, мы же уже говорили, что не нужно RAW файлы открывать блокнотом, соответственно и править их блокнотом не нужно... Все понял свою ошибку. Прошу прощения, затупил чего-то... Спасибо.
_________________ не зная броду не лезь к вольтмоду
Теперь осталось выяснить как воспроизводить этот звук. Для воспроизведения я хочу использовать аппаратный ШИМ. А для этого нужно решить еще как минимум два вопроса: 1) Как вычислить необходимую частоту для ШИМа? 2) данные в получившемся массиве это длины импульсов или это коэффициент заполнения?
Попытаюсь сам ответить на этот вопрос. Звук когда то был аналоговым, но в компьютер он попал уже в цифровом виде, так как прошел АЦП. Качество преобразованного звука напрямую зависит от разрядности АУП, а так-же от частоты преобразований. Я взял некоторый сэмпл и сохранил его в формате RAW. Качество для сохранения я выбрал 8 бит и частоту 33кГц, но программа автоматически сохранила его как 44100 Гц - потому, как исходник был записан с такой частотой.
Значит частота моего ШИМа должна быть 44100 Гц ( попробую и 33кГц ) А файл с данными - это длительности импульсов, которые можно выводить в готовом виде без дополнительного преобразования.
_________________ не зная броду не лезь к вольтмоду
период ШИМ должен совпадать с частотой дискредитации аудиофайла частота на входе блока ШИМ зависит от разрядности - 8бит: умножаем на 256; 12 на 1024 у меня вполне нормальный звук был и при 16кГц/8бит правда в мегу16 (часы) 2 коротких звука влезло только после сжатия (ADPCM)
Для начала, вам необходимо прочитать документацию на контроллер и разобраться как работает PWM (эта информация не "Top Secret"). Без этого, вы будете пытаться что-то делать не понимая что делаете. Уже было сказано: Если вам нужно выводить в PWM числа 0-255 - частота тактирования секции PWM должна быть равна 256*(частота дискретизации). Разберётесь сами - запомните надолго. Мне, в своё время, удобнее было изучать PWM подключив к PWM-выходу осциллограф. Вывод звукового фрагмента - это уже следующий этап. На всякий случай: пересчитать звуковой файл под произвольную частоту дискретизации можно, к примеру, в CoolEditPro.
Как работает ШИМ я знаю И не однократно строил разные схемы в которых его использовал. Вопрос в другом. Я не совсем понимаю, что значит сохранить аудиофайл как 8 бит с частотой дискретизации, например, 4 кГц я представляю это как работу АЦП. 8 бит - это разрядность АЦП, а 4 кГц - это частота выполнения преобразований. если это так, то для того что-бы модулировать этими данными ШИМ, нужно настроит ШИМ на частоту 4 кГц и каждый раз ( во время прерывания, настроенного по компатору ) выводить новое значение из массива данных. Но видимо, я не правильно представляю сохранение аудиофайла. И данные, которые я получаю в массиве не являются тем, что я представляю.
_________________ не зная броду не лезь к вольтмоду
период ШИМ должен совпадать с частотой дискредитации аудиофайла
не обязательно совпадать. главное - частота ШИМ не должна быть ниже частоты дискретизации, но запросто может быть выше, желательно, кратно. а вот частота обновления значения скважности ШИМ-а должна быть в точно равной частоте дискретизации.
если частота ШИМ будет не кратно больше частоты дискретизации, будут, разумеется, искажения, но на мой неаудиофильский вкус они незначительны.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
если это так, то для того что-бы модулировать этими данными ШИМ, нужно
нужно: 1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует) 2. настроить таймер на частоту семплирования аудиофайла (4 кГц в вашем случае) 3. по прерыванию таймера с частотой 4 кГц выдавать на ШИМ байты
да, главное, надо учесть, что "отсутствию звука" в динамике соответствует не ШИМ со скважностью 0%, а ШИМ со скважностью 50%. то есть данные должны быть соответствующим образом "отнормированы" перед выдачей на ШИМ
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
...нужно: 1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует)...
Зачем так извращяться? Мне это напоминает: "Налепить ошибок, а потом всё свободное время их исправлять".
Если просчитана частота дискретизации, к примеру, 15625Hz - это значит что каждые 64µS вы получаете прерывания с таймера (который связан с PWM) и по этим прерываниям обновляете данные PWM. Не реже и не чаще (если хотите получить не "крякалку", а более-менее "приличный" звук). ---- P.S. Если делать так как вы предлагаете - на выходе получите кроме частоты дискретизации ещё и разность частот (частота PWM, частота дискретизации). Оно надо???
вы все правильно сказали, причем это совершенно не противоречит тому, что сказал я.
если частота семплов 4КГц, то обновлять значение ШИМ надо с частотой 4КГц - разве я говорил иное? где в ваших рассуждениях требование к частоте ШИМ? а я всего лишь сказал, что она должна быть по возможности как можно выше, желательно кратно частоте сэмплов, но в любом случае не ниже частоты семплирования.
в чем вы усматриваете подвох?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
1. настроить ШИМ на максимально возможную частоту (проще фильтровать, в самом простом случае вообще не фильтровать - динамик сам отфильтрует) 2. настроить таймер на частоту семплирования аудиофайла (4 кГц в вашем случае) 3. по прерыванию таймера с частотой 4 кГц выдавать на ШИМ байты
Я понял так, как вы сказали. "Частота ШИМ не равна частоте семплирования аудиофайла". Возможно, мы друг друга не поняли.
Последний раз редактировалось Albert_V Пн июл 20, 2015 09:57:31, всего редактировалось 3 раз(а).
главное - частота ШИМ не должна быть ниже частоты дискретизации, но запросто может быть выше, желательно, кратно. а вот частота обновления значения скважности ШИМ-а должна быть в точно равной частоте дискретизации.
Спасибо большое. Сразу видно достойный ответ! Все сразу стало на свои места. Я почему то думал, что частота ШИМ должна быть равна частоте дискретизации. Я еще подумал, что звук получится отвратительный....( вот и появились сомнения ) Теперь я понимаю что частота дискретизации это частота обновления данных в ШИМ. А частота ШИМ должна быть намного выше.
_________________ не зная броду не лезь к вольтмоду
Сейчас этот форум просматривают: nicruzhov и гости: 188
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения