Я понял, что мне плохо пренебрегать этой мыслью, потому что я ничего не читал о number of channels
а также bits per sample
В этом свете. Моя причина в том, что я не уверен, как будут выглядеть образцы 2-канальных 8-битных файлов PCM.
Это 1 sample = 1 channel
? или же 1 sample = 4 bits (left) + 4 bits (right)
Контекст:
Я пишу программу, которая читает файлы WAV, и мне пришло в голову, что, если я сталкиваюсь с 8-битными файлами WAV PCM, и мой код читает таким образом (см. Ниже), то моя программа не может правильно читать многоканальные 8 -бит PCM WAV файлы.
// read actual audio data after obtaining
// the headers
// audioData is a vector of vectors (1 vector per channel)
uint32_t temp;
while( !feof(wavFile) ) {
for(uint16_t i = 0; i < numChannels; i++) {
temp = 0;
fread(&temp,sizeof(uint8_t),1,wavFile);
audioData.at(i).push_back(temp);
}
}
Структура, которая обычно описывает формат аудиоданных WAV, описана в MSDN здесь: Структура WAVEFORMATEX:
nBlockAlign
значение — размер, в байтах, такого блока, соответствующего образцуnSamplesPerSec
значениеnChannels
значения, каждое из wBitsPerSample
То есть двухканальный файл с 8 битами на выборку имеет nSamplesPerSec
пары для каждой секунды аудиоданных, каждая пара включает в себя два 8-битных значения для каждого канала из двух.
(Вот пример того, как эта структура существует в файле WAV — хотя это более сложный случай с 24-битным / сэмплом, но вы должны понять)
Других решений пока нет …