波形程序崩溃

WaveOut Program Crashing

本文关键字:崩溃 程序 波形      更新时间:2023-10-16

我正在努力尝试读取原始。wav数据并将数据输出到扬声器,主要用于自我实验和教学。我自己想要这些数据的第二个原因是,这样我就可以解析它来尝试分离音调,或者构建均衡器或某种形式的可视化。到目前为止,我已经从文件工作中读取数据,验证头和什么的,但后来我去WaveOut,它开始搞砸了。当然,我的代码目前是意大利面条式的代码,但这更多的是一个初步测试,看看我是否能做到这一点。就我现在所知,我的程序在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);

我设法找到了问题所在,为其他人谁通过。我提取的数据只是纯粹的声音数据,减去头部。我的问题是,它需要顶部的声音数据,这是另一个44字节的头。我所要做的就是将数组的大小增加44个字节,将标题移回开头,并更改这一行:

hdr.lpData=(LPSTR)&sound;

:

hdr.lpData=(LPSTR)sound;

现在,由于我解析了标题,我也可以正确地选择比特率,计算歌曲的长度,并使用它做各种其他事情。