再生速度を変える

前述の例で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の引数に負の値(マイナスの値)を渡すと巻き戻し再生になります。