再生速度を変える
前述の例でDirectShowを使ったMPEG再生を説明しましたが、今度は再生速度の変更方法を説明したいと思います。 (注意)ここの例では、サンプルを簡潔にするためにエラー処理を書いていません。
とりあえず、コードを書いてみる
まず、何も考えずに以下のコードを書いてみましょう。 「C:\DXSDK\Samples\media\water.mpg」というMPEGファイルを半分の速度で再生します。
#include <stdio.h>
#include <dshow.h>
#define FILENAME L"c:\\DXSDK\\Samples\\Media\\butterfly.mpg"
int
main()
{
IGraphBuilder *pGraphBuilder;
IMediaControl *pMediaControl;
IMediaPosition *pMediaPosition;
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder,
(LPVOID *)&pGraphBuilder);
pGraphBuilder->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMediaControl);
pGraphBuilder->QueryInterface(IID_IMediaPosition,
(LPVOID *)&pMediaPosition);
pMediaControl->RenderFile(FILENAME);
// スロー再生(1.0が普通の速度になります)
// 0.5の部分を2.0にすると倍速再生になります
pMediaPosition->put_Rate(0.5);
pMediaControl->Run();
MessageBox(NULL,
"Block Execution",
"Block",
MB_OK);
pMediaPosition->Release();
pMediaControl->Release();
pGraphBuilder->Release();
CoUninitialize();
return 0;
}
この例では半分の速度で再生していますが、put_Rateの引数を2.0などに変更すると倍速再生になります。 put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります。