Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Анализ WAV формата


Автор: IvanTG 16.5.2004, 16:43
Нужно провести быстрый Фурье-анализ несжатого WAV файла. А как его правильно перевести в числа?

Автор: dwr_budr 17.5.2004, 21:20
Пропускаешь заголовок и читаешь собственно семплы. Вот тебе и числа.
Размерность чисел зависит от формата вавки (ну там 8 бит на семпл или 16 бит на семпл).
Если у тебя вавка в догонку стерео, то семплы просто чередуются для каждого канала (правый, левый, правый, левый и т.п.)


Если лень парсить заголовок вавки, то просто пропусти первые 44 байта (обычно он такой длины, может быть и больше)
Главное при пропускании заголовка не разорвать семплы (если они по 16 бит)
Более того если ты при фурье анализе будешь заголовок интерпретировать как аудио данные не думаю что случится нечто трагичное smile.gif

Автор: Royan 19.5.2004, 07:12
dwr_budr, а в каких единицах измерения храняться данные в одном семпле, и как вытащив число из семпла перевести его в децибелы?

Автор: dwr_budr 19.5.2004, 07:56
Royan
На счет едениц измерения я без понятия! Используя 16битный диапазон значений при дискретизации сигнала ты лишь получаешь более точное его представление, чем используя 8ми битный. Не думаю что сигнал снимается конкретно в еденицах чего-то. Просто вопрос в точности снятия стоит.

А по поводу децибел я вряд ли помогу! Сам еще начинающий smile.gif
Когда у тебя частота/амплитуда то вроде так: 10 * log10(x) (могу ошибаться)
А когда чисто время/амплитуда не знаю. Может аналогично?

Кто знает,пожалуйста, поделитесь теорией smile.gif

PS Да и я не совсем понял что значит вытащить число из семпла. Семпл это и есть число в данном вопросе.

Автор: Royan 19.5.2004, 08:13
Цитата
Да и я не совсем понял что значит вытащить число из семпла. Семпл это и есть число в данном вопросе.
Это я так выразился, а понял ты меня аболютно правильно

Цитата
На счет едениц измерения я без понятия! Используя 16битный диапазон значений при дискретизации сигнала ты лишь получаешь более точное его представление

В моем случае информации и в 8 битах хватит за глаза и за уши smile.gif поэтому я работаю одноканальном режиме на частоте 220500 - 44100Hz, все что мне нужно это просто просекать заданную амплитуду и запсывать после нее сигнал за фиксированное время.

Автор: DonPager 19.5.2004, 21:20
все что мне нужно это просто просекать заданную амплитуду и запсывать после нее сигнал за фиксированное время.
а в чём проблема ?
ампрлитуду мерить проще всего : берёшь отсчётов 20 (чтобы реакию на трески отсечь) и ищешь
их среднее по модулю значение (читай данный в знаковые пременные так проще smile.gif)
а в отношении дБ , то для знакового онобайтового формата 0 = -120дБ; 127= 0 дБ дальше считай сам (зависимость логарифмическая)

Автор: Royan 21.5.2004, 08:26
DonPager, а под отсчетом ты 1 сэмпл понимаешь (рассматривая моно сигнал)? И почему у меня должны быть трески? Я вот когда записывал streaming audio со звуковухи никаких тресков не обнаружил...

Да и продолжительность wav'а наскольео я понял выисляется по такой формуле:

time = (dataChunk / bitsPerSample)/samplesPerSecond, где dataChunk, это собственно размер звуковых данных (без хэдэра)

Автор: Alexei 21.5.2004, 08:36
http://websound.ru/index.cgi?articles/theory/fft

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)