Поиск количества образцов в файле .wav и редакторе шестна
-
28-10-2019 - |
Вопрос
Нужна помощь с редактором HEX и аудиофайлами. У меня проблемы с выяснением формулы, чтобы получить количество образцов в моих файлах .WAV.
Я скачал Stripwav, который сообщает мне количество образцов в волнах., Но все еще не может выяснить формулу.
Не могли бы вы скачать эти два. Wavs, откройте их в шестнадцатеричном редакторе и сообщите мне формулу, чтобы получить количество образцов.
Если вы так любезно сделаете это для меня, пожалуйста, скажите мне количество образцов для каждого.
http://sinewavemultimedia.com/1wav.wavhttp://sinewavemultimedia.com/2wav.wav
Вот проблема, у меня есть две программы,
Один читает данные WAV, а другой показывает, что Numsamples - это данные
RIFF 'WAVE' (wave file)
<fmt > (format description)
PCM format
2 channel
44100 frames per sec
176400 bytes per sec
4 bytes per frame
16 bits per sample
<data> (waveform data - 92252 bytes)
Но другая программа говорит, что Numsamples
23,063 samples
/*******ОБНОВИТЬ*********/ Еще одна вещь, которую я сделал по расчету с 2 файлами, этот правильный
92,296 bytes and num samples is 23,063`
Но этот другой не выходит правильно, это более 2 мег, я только что подписал 44 байта, и я делаю это неправильно? Вот размещение файлов
2,473,696 bytes
Но правильные номеры
617,400
Решение
Нет простой формулы для определения количества образцов в файле WAV. Так называемый «канонический» файл WAV состоит из 44-байтового заголовка, за которым следует фактические данные образца. Итак, если вы знаете, что в файле используются 2 байта на образец, то количество образцов равно размеру файла в байтах, минус 44 (для заголовка), а затем разделен на 2 (поскольку есть 2 байта на за каждого образец).
К сожалению, не все файлы WAV «канонические», как это. Файл WAV использует формат риффа, поэтому правильный способ анализа файла WAV - это поиск через файл и найти различные куски.
Вот образец (не уверен, на каком языке вам нужно это сделать):
Другие советы
Вы должны прочитать fmt
Заголовок, чтобы определить количество каналов и битов на образец, затем прочитайте размер data
Chunk, чтобы определить, сколько байтов данных находится в аудио. Затем:
NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)
А WAVE
S. format chunk
(fmt
) имеет «байты на кадр образца», указанные как wBlockAlign
.
Так: framesTotal = data.ck_size / fmt.wBlockAlign;
а также samplesTotal = framesTotal * wChannels;
Таким образом, samplesTotal===FramesTotal IIF wChannels === 1
!!
Обратите внимание, как вышеуказанный ответ элегантно избегал, чтобы объяснить, что ключевые уравнения, спецификация (и ответы, основанные на них), неверны: рассмотрите пример Flor A 2-й канал 12 бит в секунду.
В определении объясняется, что мы размещаем каждый образец 12bps одним словом:
note: t=point in time, chan = channel +---------------------------+---------------------------+----- | frame 1 | frame 2 | etc +-------------+-------------+-------------+-------------+----- | chan 1 @ t1 | chan 2 @ t1 | chan 1 @ t2 | chan 2 @ t2 | etc +------+------+------+------+------+------+------+------+----- | byte | byte | byte | byte | byte | byte | byte | byte | etc +------+------+------+------+------+------+------+------+-----
Итак .. сколько байтов делает образец (образец (BlockAlign
) для волны 2CH 12BPS есть в соответствии со спецификацией?
u003Csarcasm> CEIL(wChannels * bps / 8)
= 3 байта ..u003C/sarcasm>
Очевидно, правильное уравнение: wBlockAlign=wChannels*CEIL(bps/8)