Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectSound Visual Basic チュートリアル」を参照すること。
この時点で、既に有効なファイル名を取得し、ウェーブ ファイルへのサウンド データの保存を開始する準備ができていることを想定する。このプロセスは、次の関数内で実施される。
BOOL StartWrite(TCHAR *pszFileName) { if (WaveOpenFile(pszFileName, &hmmio, &wfx, &mmckinfoData, &mmckinfoParent)) return FALSE; if (WaveStartDataWrite(&hmmio, &mmckinfoData, &mmioinfo)) { WaveCloseWriteFile(&hmmio, &mmckinfoData, &mmckinfoParent, &mmioinfo, dwTotalBytesWritten / (wfx.wBitsPerSample / 8)); DeleteFile(pszFileName); return FALSE; } if FAILED(IDirectSoundCaptureBuffer_Start(lpdscb, DSCBSTART_LOOPING)) { WaveCloseWriteFile(&hmmio, &mmckinfoData, &mmckinfoParent, &mmioinfo, 0); DeleteFile(pszFileName); return FALSE; } dwTotalBytesWritten = 0; return TRUE; }
この関数は最初に Wavwrite.cpp 内の WaveOpenFile 関数を呼び出し、RIFF ファイルの作成とウェーブ フォーマットに関連するヘッダーを書き込む。次に WaveStartDataWrite 関数を呼び出し、ファイル ポインタをデータ チャンクに進める。最後に、バッファのキャプチャを開始する。バッファの半分に相当する 1 秒が経過した時点で、アプリケーションはデータが利用可能であるとの通知を受けるので、その時点までにデータをファイルにコピーする準備をしておかなければならない。
dwTotalBytesWritten の初期化にも注意すること。キャプチャを終えた後で、データ チャンクのヘッダーはこの値を必要とする。
次項 : ステップ 6 : キャプチャの通知の処理