waveファイルの再生(VC++) mmio関数群を利用して、waveファイルを取り出して再生することについてのメモです。mmio関数群を利用する為に、winmm.libをリンクして、mmsystem.hをインクルードする必要があります。waveファイルの再生をするために、下記の処理が必要です。 1.ファイルオープン。WINMMAPI HMMIO WINAPI mmioOpen(LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)というAPI関数を呼び出して、waveファイルを開きます。 2.各情報チャンクの検索。WINMMAPI FOURCC WINAPI mmioStringToFOURCC(LPCSTR sz, UINT uFlags)関数を使って、各情報を保存する為の「チャンク」の番地を検索します。下記の三つのチャンクから必要な情報を取得します。RIFFチャンクで、WAV形式のデータファイルであるかを確認します。フォーマットチャンクは、サンプリング周波数などの音声制御情報(WAVEFORMATEX)を管理しています。データチャンクは、音声データの塊りです。 3.PCMデバイスを初期化して、再生します。再生のメモは、http://www.softist.com/programming/waveout/waveout.htmのページに載っています。フォーマットチャンクで取得したWAVEFORMATEX情報とデータチャンクで取得したデータを設定します。下のようです。 whOut.lpData = lpData; whOut.dwBufferLength = dwSize; whOut.dwBytesRecorded = 0; whOut.dwUser = 0; whOut.dwFlags = 0; whOut.dwLoops = 0; whOut.lpNext = NULL; whOut.reserved = 0 ; MMRESULT mmrError = waveOutOpen(&hWOut,WAVE_MAPPER,&wf, (DWORD)m_hWnd,0,CALLBACK_WINDOW); waveOutPrepareHeader(hWOut, &whOut, sizeof(WAVEHDR)); waveOutWrite(hWOut, &whOut, sizeof(WAVEHDR)); 4.サンプル。Dドライブのルートフォルダにある「file1.wav」を再生します。ソースコード。 |