我正在尝试读取原始 .wav 数据并将数据输出到扬声器,主要用于自我实验和教学。我自己想要数据的第二个原因是我可以解析它以尝试分离音高,或者构建均衡器或某种形式的可视化。到目前为止,我已经从正在工作的文件中读取数据,验证了标题和诸如此类的东西,但是后来我转到 WaveOut,它开始搞砸了。我的代码目前是相当意大利面条代码,当然,但这更像是一个初步测试,看看我是否可以这样做。据我现在所知,我的程序在 waveOutWrite() 处崩溃,老实说,我不知道为什么,而且我找不到任何关于如何让 WaveOut 工作的好例子。这是相关的位:
BYTE *sound=(BYTE*)malloc(sizeof(BYTE)*data_size);
readByte(&in,data_size,sound);
cout<<"Loaded. Now playing...\n";
HWAVEOUT waveOut;
WAVEFORMATEX wF={format_tag,channels,sample_rate,byteRate,block_align,bits_per_sample,0};
MMRESULT result;
waveOutOpen(&waveOut,WAVE_MAPPER,&wF,0,0,CALLBACK_NULL);
WAVEHDR hdr;
ZeroMemory(&hdr,sizeof(WAVEHDR));
hdr.dwBufferLength=data_size;
hdr.lpData=(LPSTR)&sound;
waveOutPrepareHeader(waveOut,&hdr,sizeof(WAVEHDR));
waveOutWrite(waveOut,&hdr,sizeof(WAVEHDR));//Crashes here, no crash if commented out. No sound either way.
Sleep(500);
while(waveOutUnprepareHeader(waveOut,&hdr,sizeof(WAVEHDR))==WAVERR_STILLPLAYING)
Sleep(100);
waveOutClose(waveOut);