Я пишу приложение C# для обработки файлов WAV, и я закончил достаточно кода для чтения любых фрагментов файла (т.е. считывает метаданные форматирования и все другие фрагменты, готовые обрабатывать данные с помощью этой информации).
Я подошел к тому моменту, когда мне нужно обработать фрагмент данных, но у меня нет идеи / ресурсов, чтобы узнать, как образцы собираются вместе. Если возможно, не могли бы вы ответить ссылками / информацией о блоке данных Только, а не о том, как в целом структурированы файлы WAV.
Мне нужно больше узнать о побайтовой структуре выборок с течением времени.
Спасибо! Если я сделал что-то не так, прокомментируйте, чтобы я мог перефразировать / отредактировать сообщение.
Это, конечно, зависит от используемого кодека, но мы предполагаем PCM, поскольку это, безусловно, наиболее распространенная вещь, которую вы найдете в файлах WAV.
PCM - это способ кодирования измерения давления в определенный момент времени. Если я измеряю уровни давления достаточно быстро и с достаточным разрешением, я могу точно аппроксимировать исходную форму волны.
Из Википедии: https://en.wikipedia.org/wiki/Pulse-code_modulation
Поскольку вы уже разбираете заголовок, вам известна частота дискретизации. Это количество выборок в секунду. 44 100 выборок в секунду (или частота дискретизации 44,1 кГц) - это типичный компакт-диск. Для видео чаще используется частота дискретизации 48 кГц.
Из заголовка вы также знаете количество бит на выборку. Это указывает разрешение каждого взятого образца. 16-битные выборки, естественно, занимают 2 байта для каждой выборки.
В аудиоданных выборки представляют собой просто числовые значения, одно за другим.
[sample 0][sample 1][sample 2][...]
Количество каналов также указано в заголовке, который сообщает вам, сколько дискретных каналов было выбрано. Монофонический звук - это всего лишь 1. Стереозвук будет иметь 2. Объемный звук 5.1 будет иметь 6. Сами значения отсчетов чередуются, отсчеты одного канала за другим, образуя кадр. Если бы у меня была стереодорожка с левым / правым каналами, она выглядела бы примерно так:
[L][R][L][R][L][R][L][R][...]
Чтобы фактически прочитать эти числовые значения, данные обычно записываются с прямым порядком байтов. Для 16-битных выборок и выше обычно используются целые числа со знаком.