Если вы уже знаете тип волнового файла ... например, 16-битный моно, сэмплированный с частотой 48 кГц, тогда самый простой способ - просто открыть волновой файл как двоичный файл, переместиться за заголовок и начать анализировать выборка байтов.
Волновой заголовок выглядит следующим образом, если вы знакомы со структурой C и, если нет, имеется много онлайн-байтов для ссылок на байты.
typedef struct
{
char chunkID [4];
UINT32 chunkSize; // нужно вычислить только это поле
символьный формат [4];
char subchunk1ID [4];
UINT32 subchunk1Size;
UINT16 аудиоформат;
UINT16 numChannels;
UINT32 sampleRate;
UINT32 byteRate;
UINT16 blockAlign;
UINT16 bitsPerSample;
char subchunk2ID [4];
UINT32 subchunk2Size; // и это поле нужно вычислить
} WAVEHEADER;
Образцы после этой точки в порядке. Если моно, то есть один сэмпл, если стерео, затем один канал, за которым следует следующий канал в этом месте времени.
Конечно, вы всегда можете просто проанализировать заголовок, если вы еще не знаете тип волнового файла и / или размер.