DirectShowオーディオキャプチャでのWavファイル出力(その2)
プログラムとしては単純なコンソールアプリケーションです。マイク(オーディオ入力)からの音声を録音してwavファイルに出力します。開始でメッセージボックスで中断しますのでそこで音声を入力します。メッセージボックスの中断解除で終了します。
GraphEditでのグラフ

メインプログラム
//
// メイン関数
//
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
// COMを初期化
CoInitialize(NULL);
// FilterGraphを生成
IGraphBuilder *pGraphBuilder = NULL;
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(LPVOID *)&pGraphBuilder);
// グラフ構築の一連の処理
// 入力デバイス(ここではマイクが接続されていることを想定)をグラフに追加
IBaseFilter *pDeviceFilter = NULL;
hr = AddAudioInputDevice(pGraphBuilder,&pDeviceFilter);
if(FAILED(hr)){
return hr;
}
// WavDestをグラフに追加
GUID CLSID_WavDest;
UuidFromString((RPC_CSTR)"3C78B8E2-6C4D-11D1-ADE2-0000F8754B99", &CLSID_WavDest);
IBaseFilter *pWavDest = NULL;
hr = AddFilter(pGraphBuilder, CLSID_WavDest , L"Wav Dest", &pWavDest);
if(FAILED(hr)){
printf("WavDestフィルターが追加出来ません。\n");
return hr;
}
// FileWriterをグラフに追加
IBaseFilter *pFileWriter = NULL;
hr = AddFilter(pGraphBuilder, CLSID_FileWriter, L"Writer", &pFileWriter);
// 各フィルターを接続する
// オーディオ入力 → WavDest
hr = ConnectFilters(pGraphBuilder, pDeviceFilter,pWavDest);
// WavDest → FileWriter
hr = ConnectFilters(pGraphBuilder, pWavDest,pFileWriter);
// ここまででグラフ構築完了
// ファイル名を設定する
IFileSinkFilter *pSink;
pFileWriter->QueryInterface(IID_IFileSinkFilter2,(VOID**)&pSink);
pSink->SetFileName(WAVFILE_NAME_L, NULL);
pSink->Release();
// 出力ファイルを一応削除する
DeleteFile(WAVFILE_NAME);
// MediaControlインターフェース取得
IMediaControl *pMediaControl = NULL;
pGraphBuilder->QueryInterface(IID_IMediaControl,(LPVOID *)&pMediaControl);
// 録音開始
pMediaControl->Run();
// 録音終了待ち
MessageBox(NULL,"終了待ち","録音",MB_OK);
// 録音終了
pMediaControl->Stop();
// 終了処理
pMediaControl->Release();
pDeviceFilter->Release();
pWavDest->Release();
pFileWriter->Release();
pGraphBuilder->Release();
CoUninitialize();
return 0;
}
プログラム全体の表示
ソースファイル一式
プロジェクトファイル一式(Visual C++ 2005 Express Editionで作成)
参考リンク
オーディオ キャプチャ(Microsoft DirectX 9.0)
キャプチャ アプリケーションの書き方(※Microsoft DirectX 8.0のドキュメントです)
Windowsプログラミング関連記事
Posted by nishida at 01:03:27


