簡體   English   中英

WaveOut程序崩潰

[英]WaveOut Program Crashing

我正在嘗試讀取原始的.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);

我成功地找到了問題所在,對於遇到的其他所有人。 我提取的數據純粹是聲音數據,減去標題。 我的問題是,它要求在聲音數據的頂部加上另一個頭,即44個字節。 我要做的是將數組的大小增加44個字節,將標頭拍回開頭,然后更改此行:

hdr.lpData=(LPSTR)&sound;

對此:

hdr.lpData=(LPSTR)sound;

現在,多虧我解析了標題,我還可以即時正確地選擇比特率,計算歌曲的長度以及使用它來做其他各種事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM