Могут ли 8-битные (бит на семпл) файлы PCM WAV содержать более одного канала?

Я понял, что мне плохо пренебрегать этой мыслью, потому что я ничего не читал о 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);
}
}

0

Решение

Структура, которая обычно описывает формат аудиоданных WAV, описана в MSDN здесь: Структура WAVEFORMATEX:

  • «семпл» для аудио PCM — это блок данных, который включает в себя все каналы
  • nBlockAlign значение — размер, в байтах, такого блока, соответствующего образцу
  • образцы идут с определенной фиксированной скоростью, определенной nSamplesPerSec значение
  • каждый блок выборки состоит из nChannels значения, каждое из wBitsPerSample

То есть двухканальный файл с 8 битами на выборку имеет nSamplesPerSec пары для каждой секунды аудиоданных, каждая пара включает в себя два 8-битных значения для каждого канала из двух.

(Вот пример того, как эта структура существует в файле WAV — хотя это более сложный случай с 24-битным / сэмплом, но вы должны понять)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]