音量とバランスを変える

ここでは、音量とバランスの調整方法を説明します。 (注意)ここの例では、サンプルを簡潔にするためにエラー処理を書いていません。

とりあえず、コードを書いてみる

まず、何も考えずに以下のコードを書いてみましょう。 「C:\DXSDK\Samples\media\piano2.mp3」というMP3ファイルを再生します。 再生の際に音量とバランスを調整しています。 音量とバランスを調整している部分の引数を適当に変えてみてどうなるか手元で実験してみてください。


#include <stdio.h>

#include <dshow.h>

#define	FILENAME L"C:\\DXSDK\\Samples\\Media\\piano2.mp3"

int
main()
{
 IGraphBuilder *pGraphBuilder;
 IMediaControl *pMediaControl;
 IBasicAudio *pBasicAudio;

 CoInitialize(NULL);

 CoCreateInstance(CLSID_FilterGraph,
	NULL,
	CLSCTX_INPROC,
	IID_IGraphBuilder,
	(LPVOID *)&pGraphBuilder);

 pGraphBuilder->QueryInterface(IID_IMediaControl,
	(LPVOID *)&pMediaControl);

 pGraphBuilder->QueryInterface(IID_IBasicAudio,
	(LPVOID *)&pBasicAudio);

 pMediaControl->RenderFile(FILENAME);

 /*
 put_Balance()を使うとバランスを設定できます。
 使える値は-10000〜10000です。-10000は右を無音にします。
 逆に、10000は左を無音にします。
 この例では、0を渡して左右均等にしています。
 */
 pBasicAudio->put_Balance(0);

 /*
 put_Volume()を使うと音量を設定できます。
 使える値は-10000〜0です。
 最大音量は0です。
 -10000は無音です。
 この値を100で割った物が音量(dB)になります。
 例えば、-5000は-50dBになります。
 */
 pBasicAudio->put_Volume(-500);

 pMediaControl->Run();

 MessageBox(NULL,
	"Block Execution",
	"Block",
	MB_OK);

 pMediaControl->Release();
 pGraphBuilder->Release();
 pBasicAudio->Release();

 CoUninitialize();

 return 0;
}

この例では音声を再生するときのバランスと音量を設定しています。 色々な値を入れてみて手元で実験してみてください。

現在の音量を取得したい場合には、pBasicAudio->get_Volume(long *)を使ってください。

現在のバランスを取得したい場合には、pBasicAudio->get_Balance(long *)を使ってください。