Platform SDK: DirectX

ステップ 5 : ウェーブ ファイルの作成

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectSound Visual Basic チュートリアル」を参照すること。

[C++]

この時点で、既に有効なファイル名を取得し、ウェーブ ファイルへのサウンド データの保存を開始する準備ができていることを想定する。このプロセスは、次の関数内で実施される。

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 : キャプチャの通知の処理