読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows Media Player用の視覚エフェクト(Visualizer)を作ってみるテスト(2)

Wizerdから生成すると、「BARS」と「SCOPE」の2つプリセットが表示されています。今回は簡単に考える為に、2つあるうちの1つのプリセットを削って、残った方の名前を変えたいと思います。

プリセットの数を1つにする

WMPは視覚エフェクトプラグインへプリセット数を問い合わせ、返された数分だけプリセットの名前を取得する等の処理を行います。ですので、プリセット数を「1」で返す様に捏造します。

プリセット数をWMPに返す処理は、CSample::GetPresetCount()にあります。引数の*pnPresetCountにPRESET_COUNTをぶちこんでいるので、何も考えずにPRESET_COUNTの値を変えます。

[sample.h]

// preset values
enum {
    PRESET_BARS = 0,
    PRESET_SCOPE,
    PRESET_COUNT = 1 //←単純にSCOPEを消すと面倒やねん
};

これでプリセットは1つしか表示されなくなっています。

プリセットの名前を変更する

さて、次に残ったプリセット名を変更します。WMPは取得したプリセット数分だけプリセット名を取得し表示を行います。

プリセット名をWMPに返す処理は、CSample::GetPresetTitle()にあります。引数の*bstrPresetTitleに CComBSTR bstrTempの文字列を入れています。bstrTempに適当な文字列を突っ込めば、そのまま表示してくれそうです。

[sample.cpp]

    CComBSTR bstrTemp; 

    switch (nPreset)
    {
    case PRESET_BARS:
//        bstrTemp.LoadString(IDS_BARSPRESETNAME); 
        bstrTemp.Append("エターナルフォースブリザード");
        break; 

//    case PRESET_SCOPE:
//        bstrTemp.LoadString(IDS_SCOPEPRESETNAME); 
//        break;
    }

現時点での変更で実行してみる

リビルドしてWMPを起動します。

これで自分で命名したプリセット名が表示されます。……「エターナルフォースブリザード」いつ聞いても笑えます。「効果:使うと相手は死ぬ」なんて補足されると、真剣な会議中でも噴出せます。

せっかくプリセットに名前を付けたんだから、プラグイン名がそのまま「Sample Plugin」じゃ少々寂しいですよね。

プラグイン名の変更

プラグイン名をWMPに返す処理は、CSample::GetTitle()にあってこんな風に

    CComBSTR bstrTemp;
    bstrTemp.LoadString(IDS_EFFECTNAME); 

String Tableから文字列を取得しています。

プリセット名を返す処理と同じ様に、引数の*bstrTitleに突っ込めば良いのかな?と思ったのですが、sample.rgs の中で

val name = s 'res://sample.dll/RT_STRING/#101'

IDS_EFFECTNAME(プラグイン名のID)を使用しているではないですかっ!! これならばソースコードを弄るよりも、String Tableの「IDS_EFFECTNAME」の値を変更する方が楽そうです。

「Sample Plugin」を「CH3COOH's Plugin」に変更して、リビルドをかけると……

はい、「CH3COOH's Plugin」の出来上がりです。