Я хочу создать инструмент, который может воспроизводить файл wav
.
К счастью, я нашел хороший пример, который отлично работает при воспроизведении моно или стерео файлов WAV.
Но мне действительно нужен инструмент, который может воспроизводить многоканальные файлы WAV.
Я обнаружил, что многоканальный wav-файл имеет формат тега 65534 (означает расширяемый волновой формат), и этот формат содержит больше информации заголовка, поэтому я просто добавил waveformatexx мой код:
waveFormatExt.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX);
waveFormatExt.Format.nAvgBytesPerSec = riffFormat.nAvgBytesPerSec;
waveFormatExt.Format.nBlockAlign = riffFormat.nBlockAlign;
waveFormatExt.Format.nChannels = riffFormat.nChannels;
waveFormatExt.Format.nSamplesPerSec = riffFormat.nSamplesPerSec;
waveFormatExt.Format.wFormatTag = riffFormat.wFormatTag;
waveFormatExt.Format.wBitsPerSample = riffFormat.wBitsPerSample;
waveFormatExt.dwChannelMask = extFormat.dwChannelMask;
waveFormatExt.SubFormat = extFormat.SubFormat;
waveFormatExt.Samples.wSamplesPerBlock = extFormat.wSamplesPerBlock;
waveFormatExt.Samples.wValidBitsPerSample = extFormat.wValidBitsPerSample;
waveOutOpen(&hWaveOut, WAVE_MAPPER, &waveFormatExt, (DWORD)WaveOutProc, (DWORD)lpWaveData, CALLBACK_FUNCTION);
{
dwDelay = (riffFormat.wBitsPerSample / 8) * riffFormat.nSamplesPerSec * riffFormat.nChannels;
_tprintf(TEXT("bytesPerSec = %d\n"), dwDelay);
dwDelay = riffData.dwChunkSize / dwDelay;
_tprintf(TEXT("TotalSec = %d (%02d:%02d)\n"), dwDelay, (dwDelay / 60), (dwDelay % 60));
waveHeader.lpData = (LPVOID)lpWaveData;
waveHeader.dwBufferLength = riffData.dwChunkSize;
waveHeader.dwBytesRecorded = 0;
waveHeader.dwFlags = 0L;
waveHeader.dwLoops = 0L;
waveHeader.dwUser = 0;
waveHeader.lpNext = NULL;
waveHeader.reserved = 0L;
waveOutPrepareHeader(hWaveOut, &waveHeader, sizeof(WAVEHDR));
{
waveOutWrite(hWaveOut, &waveHeader, sizeof(WAVEHDR));
Sleep(dwDelay * 1000 + 1000);
}
waveOutUnprepareHeader(hWaveOut, &waveHeader, sizeof(WAVEHDR));
Я использую структуру, называемую waveformatex, когда тег форматирования равен 1, и использую структуру воспроизведения, аналогичную приведенному выше коду, и приведенный выше код является кодом для воспроизведения, когда файл является многоканальным WAV-файлом.
Независимо от того, какой метод я использую, я хочу воспроизвести многоканальный WAV-файл.
Может кто-нибудь помочь с этой проблемой ..?
Спасибо.