線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2785
推到 Plurk!
推到 Facebook!

使用waveOutWrite播放wave

尚未結案
asd98537
一般會員


發表:27
回覆:25
積分:10
註冊:2002-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-27 02:17:23 IP:163.25.xxx.xxx 未訂閱
底下這段程式碼為什麼在console 下播放不出聲音,但是在BCB下卻可以?請問問題出在哪裡?謝謝  
 
char* WaveData;
  WAVEFORMATEX WaveFmt;
  HWAVEOUT WaveHandle;
  int DataSize;
  WAVEHDR WaveHeader;      MMCKINFO ChunkInfo;
  MMCKINFO FormatChunkInfo;
  MMCKINFO DataChunkInfo;      // Zero out the ChunkInfo structure.
  memset(&ChunkInfo, 0, sizeof(MMCKINFO));      // Open the file.
  HMMIO handle = mmioOpen( "C:\\MYLIBR~1\\CSPBUF\\ex\\mic.wav", 0,  MMIO_READ);
  
  // Find the RIFF chunk.
  DWORD Res = mmioDescend(handle, &ChunkInfo, 0, MMIO_FINDRIFF);      // Descend into the format chunk.
  FormatChunkInfo.ckid = mmioStringToFOURCC("fmt", 0);
  Res = mmioDescend(handle, &FormatChunkInfo, &ChunkInfo, MMIO_FINDCHUNK);      // Read the wave format.
  memset(&WaveFmt, 0, sizeof(WAVEFORMATEX));
  // mmioRead and mmioWrite return the number of
  // bytes read or written so don't call the
  // CheckMMIOError fucntion for those.
  mmioRead(handle, (char*)&WaveFmt, FormatChunkInfo.cksize);      // Ascend out of the format chunk.
  Res = mmioAscend(handle, &FormatChunkInfo, 0);      // Descend into the data chunk.
  DataChunkInfo.ckid = mmioStringToFOURCC("data", 0);
  Res = mmioDescend(handle, &DataChunkInfo, &ChunkInfo,        MMIO_FINDCHUNK);      // Read the data into a buffer.
  DataSize = DataChunkInfo.cksize;
 // if (WaveData)
 //   delete[] WaveData;
  WaveData = new char[DataSize];
  mmioRead(handle, WaveData, DataSize);      
   Res = waveOutOpen(&WaveHandle, WAVE_MAPPER, &WaveFmt,  0, 0, WAVE_FORMAT_QUERY);      Res = waveOutOpen(&WaveHandle, WAVE_MAPPER, &WaveFmt,NULL,NULL, CALLBACK_NULL);      // Set up the wave header.
  memset(&WaveHeader, 0, sizeof(WaveHeader));
  WaveHeader.lpData = WaveData;
  WaveHeader.dwBufferLength = DataSize;
  // If the LoopEdit contains a value greater
  // than 1 then set the loop count and flags.      // Prepare the wave header.
  Res = waveOutPrepareHeader(WaveHandle, &WaveHeader, sizeof(WAVEHDR));      // Start playback.
  Res = waveOutWrite(WaveHandle, &WaveHeader, sizeof(WAVEHDR));    
asd98537
一般會員


發表:27
回覆:25
積分:10
註冊:2002-10-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-27 02:50:55 IP:163.25.xxx.xxx 未訂閱
找到原因了 waveOutOpen採用非同步播放,console下程式結束,但還未播放聲音 但是再改個方法如下,加個WAVE_ALLOWSYNC 還是不行,why? Res = waveOutOpen(&WaveHandle, WAVE_MAPPER, &WaveFmt,NULL,NULL, CALLBACK_NULL | WAVE_ALLOWSYNC ); 發表人 - asd98537 於 2002/12/27 02:59:50
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-06 16:30:02 IP:211.23.xxx.xxx 未訂閱
請結案。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D -------------------------------
系統時間:2024-05-03 10:14:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!