首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WaveOut程序崩溃

WaveOut程序崩溃
EN

Stack Overflow用户
提问于 2015-05-24 00:28:12
回答 1查看 426关注 0票数 0

我正在努力阅读原始的.wav数据,并将数据输出给演讲者,主要是为了自我实验和教学。我自己想要数据的另一个原因是,我可以解析它,尝试分离音高,或者构建均衡器或某种可视化。到目前为止,我已经读取了文件中的数据,验证了头文件和诸如此类的内容,但是我去了WaveOut,它开始搞砸了。当然,我的代码目前是意大利面代码,但它更像是一个初步的测试,看我是否能做到这一点。据我目前所知,我的程序正在waveOutWrite()上崩溃,老实说,我不知道为什么,也找不到如何让WaveOut工作的好例子。以下是相关的部分:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-24 14:28:47

我设法找出了什么不对劲的地方,对其他通过的人来说。我所提取的数据只是纯粹的声音数据,减去标题。我的问题是,它需要在声音数据之上的标题,这是另外44个字节。我所要做的是将数组的大小增加44个字节,在开始时将标头放回原处,并更改这一行:

代码语言:javascript
复制
hdr.lpData=(LPSTR)&sound;

对此:

代码语言:javascript
复制
hdr.lpData=(LPSTR)sound;

现在,感谢我解析出标题,我也可以正确地选择一个比特率,计算歌曲的长度,并做各种其他事情,它,也。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30418907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档