全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1788
推到 Plurk!
推到 Facebook!

WAV播放速度即時處理

尚未結案
zeonchuang
一般會員


發表:3
回覆:0
積分:0
註冊:2007-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-19 00:17:39 IP:140.122.xxx.xxx 訂閱
我想要在播放WAV檔的同時,利用TrackBar直接調整播放的速度.. 我看過版上的類似問題,是利用取樣率來修改.. <textarea class="cpp" rows="10" cols="60" name="code">TMemoryStream *wav_stream=new TMemoryStream(); wav_stream->LoadFromFile(wavname); long newSamplingRate=52000; wav_stream->Position=24; wav_stream->Write(&newSamplingRate,4);</textarea>
可是在寫記憶體放音的時候,要怎樣即時去修改標頭檔的取樣率呢? 以下是我參考書上的記憶體放音的程式.. 請各位高手幫忙,謝謝..
<textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall Tf14_5_1::btnPlayClick(TObject *Sender) { char szOpenError[] = "Open device Error!"; if(pVoiceBuffer == NULL) { MessageDlg("No data for playing!",mtWarning,TMsgDlgButtons()<Enabled = true; dwDataSize = lFileSize; pFormat.wFormatTag = WAVE_FORMAT_PCM; pFormat.nChannels = sChannels; pFormat.nSamplesPerSec = lSamplingRate; if(sBitsPerSample == 8) { pFormat.nAvgBytesPerSec = lSamplingRate * sChannels * (sBitsPerSample / 8); pFormat.nBlockAlign = sChannels * (sBitsPerSample / 8); pFormat.wBitsPerSample = 8; } else // 16 bits { pFormat.nAvgBytesPerSec = lSamplingRate * sChannels * (sBitsPerSample / 8); pFormat.nBlockAlign = sChannels * (sBitsPerSample / 8);; pFormat.wBitsPerSample = 16; } pFormat.cbSize = 0; if( !(waveOutOpen((LPHWAVEOUT)&hWaveOut, WAVE_MAPPER,(LPWAVEFORMATEX)&pFormat ,(DWORD)f14_5_1->Handle, 0, 0) == MMSYSERR_NOERROR) ) { MessageDlg(szOpenError,mtInformation,TMsgDlgButtons()<Enabled = false; // Allocate and lock memory for the header. hWaveHdr = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, (DWORD)sizeof(WAVEHDR)); if(hWaveHdr == NULL) { MessageDlg("Not enough memory for header.",mtInformation,TMsgDlgButtons()<lpData = (char *)pVoiceBuffer; lpWaveHdr->dwBufferLength = lFileSize; lpWaveHdr->dwFlags = 0L; //WHDR_BEGINLOOP | WHDR_ENDLOOP; lpWaveHdr->dwLoops = 0L; // // if(waveOutPrepareHeader(hWaveOut, lpWaveHdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { MessageDlg("WaveOutPrepareHeader Error 1!",mtInformation,TMsgDlgButtons()<ProcessMessages(); } if(waveOutReset(hWaveOut) != MMSYSERR_NOERROR) { MessageDlg("WaveOutReset Error!",mtInformation,TMsgDlgButtons()<Enabled = true; btnStop->Enabled = false; } } </textarea>
系統時間:2024-05-02 8:10:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!