Windows Media Player : DSP Plug-in の作成方法
こんにちははらだんです。今回は Windows Media Player で使用できる DSP Plug-in の作成方法をご紹介します。
DSP Plug-in は Windows Media Player (以下 WMP )のメニューの [表示] - [プラグイン] で追加や設定ができる WMP 用のフィルタの一種です。このプラグインの使用により、音や映像に任意のエフェクト(デジタル シグナル プロセッシング:Digital Signal Processing )処理を行うことが可能です。今回は Audio DSP Plug-in について実際に作成しながら説明します。
目次
1. Plug-in Wizard のインストール
2. サンプル Plug-in の作成
3. Plug-in のインストール
4. WMP で動作確認
1. Plug-in Wizard のインストール
DSP Plug-in の開発をするための準備として Windows SDK の中に同梱されている Visual Studio の Plug-in Wizard をインストールします。 Plug-in Wizard を使用して Plug-in プロジェクトを作成すると必要なインターフェイスがすでに用意された状態のプロジェクトが作成されますので簡単に開発を行うことができます。
Plug-in Wizard は、はらだんのインストールしている Windows SDK for Windows Server 2008 の場合ですと以下のフォルダにあります。
C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\WMP_11\wizards\VSNET
a. ファイルを選択します。
フォルダ内にある wmpwiz○○○.vsz の中からお手持ちの Visual Studio のバージョンのものを選択します。( Visual Studio 2008 の場合 2005 のをご使用ください)
Wmpwiz.vsz Visual Studio .NET 2002
Wmpwiz2003.vsz Visual Studio .NET 2003
Wmpwiz2005.vsz Visual Studio 2005
さらに以下の 2 ファイルも選択します。
wmpwiz.ico
wmpwiz.vsdir
b. Visual Studio のvcprojectsフォルダ内にコピーします。
これらの 3 つのファイルを Visual Studio のインストールされているフォルダ以下の vcprojects フォルダ内にコピーします。
はらだんのインストールしている Visual Studio 2008 の場合以下になります。
C:\Program Files\Microsoft Visual Studio 9\VC\vcprojects
c. wmpwiz ○○○.vsz のファイル名を Wmpwiz.vsz に変更します。
d. Wmpwiz.vsz に Windows SDK のパスを記入します。
Wmpwiz.vsz をメモ帳で開き、以下の行に Windows SDK の VSNET のフォルダを記入し保存します。
(管理者権限でメモ帳を起動してください)
例:
Param="ABSOLUTE_PATH = <path to wmpwiz directory goes here>"
↓↓↓↓↓
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\WMP_11\wizards\VSNET"
2. サンプル Plug-in の作成
早速 Plug-in Wizard を使用してサンプル Plug-in を作成してみましょう。
a. Visual Studio を起動して新しいプロジェクトを作成します。
図のように Windows Media Player Plug-in Wizard が追加されています。プロジェクト名や保存場所を確認し、[OK] ボタンで先に進みます。(Vista では Visual Studio を管理者権限で起動してください。)
b. DSP Plug-in を選択します。
次の画面では図のように DSP Plug-in だけではなく Windows Media Player で使える Plug-in が選択できます。今回は DSP Plug-in を選択します。[Next] ボタンを押して進みます。
c. Audio DSP plug-in を選択します。
次の画面では [Audio DSP plug-in] を選択して [Next] ボタンを押して進みます。
※ Windows SDK for Windows Server 2008 の場合 [Audio DSP plug-in (dual mode)] という選択項目もあります。こちらは DirectX Media Object (DMO) と Media Foundation Transform (MFT) の両方のインターフェイスを実装したものです。今回は使用しません。
d. ビルド
今回の図例の場合 wmpplugin1 というプロジェクトが作成されます。そしてすでに DSP Plug-in として動作するプログラムが出来あがっています。ビルドすると wmpplugin.dll と呼ばれる DSP Plug-in ができます。
簡単な音響エフェクトを作成する場合には wmpplugin1.cpp の中の CWmpplugin1::DoProcessOutput() 関数内のコードを修正するだけで出来てしまいます。各種設定や複雑な DSP 処理を行う場合には適宜プロパティページの修正や追加の関数を実装してください。
3. Plug-in のインストール
ビルドした wmpplugin.dll をレジストリに登録して DSP Plug-in をインストールします。
(Windows SDK for Windows Server 2008 の Wizard を使用した場合 、ビルドすると自動でインストールされていますので、この章は飛ばしてください。)
Vista の場合、管理者権限でコマンドプロンプトを起動し、dll のあるフォルダに移動して regsvr32 コマンドでレジストリに登録します。
C:\Works\wmpplugin1\Debug>regsvr32 wmpplugin1.dll
レジストリには Plug-in のパスが記載されるので、プログラムの実装を変更し、リビルドしてもインストールしなおす必要はありません。しかし、GUID を変更したり、DLL のパスを変更する場合には一度アンインストールしてください。アンインストールのコマンドは regsvr32 /u wmpplugin.dll です。
4. WMPで動作確認
WMP を起動し実際に動作を確認します。
1. Windows Media Player を起動します。
2. メニューの [表示] - [プラグイン] - [オプション] を選択します。
3. ダイアログの [プラグイン] タブを開き [オーディオ DSP] を選択します。
4. wmpplugin1 が登録されているのでチェックが入っていない場合にはチェックを付けます。
5. いったんダイアログを [OK] で閉じます。
DSP Plug-in を使用する準備ができました。次の再生から DSP Plug-in が使用されます。ためしに WAV ファイルや mp3 ファイルを再生してください。動作確認のため、数分程度のコンテンツがよいと思います。
再生が始まり、通常通り音が聞こえてきたら再度上記の 1. ~ 3. のステップでプラグインのオプションを表示します。作成したプラグインが以下のように表示されていると思います。
Wmpplugin1 plugin (読み込み済み)
6. Wmpplugin1 を選択し、[プロパティ] ボタンを押します。
7. Scale Factor (0.0 to 1.0) の値を変更します。
初期値は 1.0 です。ためしに 0.1 としてみます。
8. [適用] ボタンを押します。
どうでしょうか?音が小さくなったのが確認できたと思います。
Plug-in Wizard が作成する Audio DSP Plug-in はボリュームのフィルタ処理を行うものです。プロパティで 0.0 ~ 1.0 を指定するとすべての PCM サンプル値( mp3 の場合デコード後に処理されます)に対してこれを掛け算することで出力ボリュームを下げます。
ということで、 DSP Plug-in が簡単に作れるということがわかりました。
次回プロジェクトの中身を少し変更して別の機能のプラグインに実装する例をご紹介します。
~はらだん~
Comments
Anonymous
June 15, 2009
PingBack from http://mydebtconsolidator.info/story.php?id=21249Anonymous
March 09, 2010
Visual C++起動してもWindows Media Player Plug-in Wizard 出てこないなぁ・・・Anonymous
March 10, 2010
コメントありがとうございます。*.vsz の内容に誤りがあると Visual Studio でウィザードが認識されないことがあります。 このあたり非常に分かりづらくて申し訳ありませんが、今一度見直してみていただけますでしょうか?Anonymous
July 11, 2011
うまくいきません。アドバイスお願いします! Win7Pro, VISUAL C++ 2010 EXPRESS, Windows SDK for Windows 7 and .NET Framework 4 wmpwiz.vsz: VSWIZARD 7.0 Wizard=VsWizard.VsWizardEngine.10.0 Param="WIZARD_NAME = Windows Media Player Plug-in Wizard" Param="ABSOLUTE_PATH = C:Program FilesMicrosoft SDKsWindowsv7.1SamplesmultimediaWMPWizardswmpwiz" Param="FALLBACK_LCID = 1033" 3つのファイルをここにコピー。 C:Program Files (x86)Microsoft Visual Studio 10.0VCvcprojects 2011/07/07 13:49 <DIR> General 2011/07/07 13:50 <DIR> vcNET 2011/07/07 13:50 <DIR> Win32 2010/04/19 20:47 1,078 wmpwiz.ico 2010/04/19 20:47 113 wmpwiz.vsdir 2011/07/07 16:30 245 wmpwiz.vsz VC++2010 Express を admin で起動してもテンプレートリストに出てきません。疲れた~~~~Anonymous
July 12, 2011
VC++ 2010 Express だけはフォルダが異なります。 こちらに 3つのファイルをコピーしてみてください。 C:Program Files (x86)Microsoft Visual Studio 10.0VCExpressVCProjects