Поиск количества образцов в файле .wav и редакторе шестна

StackOverflow https://stackoverflow.com/questions/5861821

  •  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 - это поиск через файл и найти различные куски.

Вот образец (не уверен, на каком языке вам нужно это сделать):

http://msdn.microsoft.com/en-us/library/ms712835

Другие советы

Формат волны

Вы должны прочитать fmt Заголовок, чтобы определить количество каналов и битов на образец, затем прочитайте размер data Chunk, чтобы определить, сколько байтов данных находится в аудио. Затем:

NumSamples = NumBytes / (NumChannels * BitsPerSample / 8)

А WAVES. 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top