2016-03-06 6 views
0

Я понял, что для меня это плохо, потому что я ничего не читал о number of channels и bits per sample на этом свете. Моя причина в том, что я не уверен, как будут выглядеть образцы 2-канальных 8-битных PCM-файлов.Может 8 бит (бит на выборку) Файлы PCM WAV содержат более одного канала?

Это 1 sample = 1 channel? или 1 sample = 4 bits (left) + 4 bits (right)

Контекст: Я пишу программу, которая читает WAV файлы, и мне пришло в голову, что если я приду через 8-битных файлов WAV PCM, и мой код читает этот путь (см ниже), то моя программа не может правильно прочитать многоканальные 8-битные файлы WMA с PCM.


// 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); 
    } 
} 
+1

Ваша программа также не сможет правильно прочитать одноканальные файлы WAV, потому что вы читаете данные с 1 октетом в 'uint32_t' и сохраняете некоторые неинициализированные биты. Используйте 'uint8_t' для чтения данных с типом' uint8_t'. – MikeCAT

+1

2-канальный 8-битный WAV содержит 16-битные блоки, потому что он 8-битный * 2-канальный. – MikeCAT

+0

@MikeCAT Просто подтверждая это означает, что 1-канальный 8-битный WAV содержит 8-битные блоки? – Nogurenn

ответ

1

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

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

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

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