0
我正在尝试读取原始.wav数据并将数据输出到扬声器,主要是用于自我实验和教学。我自己想要数据的第二个原因是我可以解析它以尝试分离音高,或者构建均衡器或某种类型的可视化。到目前为止,我已经从文件的数据中读取数据,验证头文件和什么,但是然后我去WaveOut,它开始搞乱了。我的代码目前相当意大利面代码,当然,但它更多的是初步测试,看看我能不能做到这一点。据我现在可以告诉,我的程序崩溃在waveOutWrite(),我真的不知道为什么,我找不到任何如何让WaveOut工作的好例子。这里的相关位: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);
检查返回值,特别是来自waveOutOpen。如果您没有将所有格式参数设置为声卡可以处理的内容,则会失败。 –
waveOutOpen和waveOutPrepareHeader都返回MMSYSERR_NOERROR。 waveOutWrite不会返回。 – Bioniclegenius