MusicBeeプラグイン開発#4
前回は作成するプラグインに必要なことを整理しました。
今回は、それらを組み合わせてプラグインにします。
組み合わせた結果から
全てを組み合わせた結果を先に示します。
解説①
プラグインの初期化処理を修正します。
ここは前に説明した通り、プラグインの名前、概要、作成者名などを記載します。
解説②
プラグインの初期化処理の最後に、このプラグインを動作を開始する
部分を追加しています。
ここでは、MusicBeeのコンテキストメニュー(右クリックで出てくるメニュー)の最後に追加しています。
ホットキーの割り当ては不要なので第2引数は"null"を指定しています。
第3引数が追加したコンテキストメニューが選択されたときに呼び出す処理"TrimTrackTitle"を記述しています。
解説③に入る前の説明
コンテキストメニューから呼び出す処理"TrimTrackTitle"を
"private"な処理として記述しています。
ここは"public"でも問題ありませんが、プラグイン外から呼び出すことはない処理なので、ここでは"private"にしています。
"void TrimeTrackTitle(object sender, EventArgs args)"
戻り値は不要なので"void"です。
引数は、"object sender"と"EventArgs args"の2つを定義します。
これは決まった書き方です。
"object sender"は、この処理を呼び出したオブジェクトが入ってきますが、プラグインでは使用しません。
"EventArgs args"は、"TrimeTrackTitle"が呼び出されたときに呼び出し元で設定されるパラメータが入ります。
"EventArgs"はC#で用意されているイベント用の引数を示す標準クラスです。
今回はMusicBeeのコンテキストメニューからの呼び出しの場合は
呼び出したコンテキストメニューに設定したメニューの文字列が入ってきます。
MB_AddMenuItemの第1引数で設定した、
"context.Main/空白文字をトリムする"です。
複数のメニューをプラグインで作成する場合、同じ処理を登録しておき
どのメニューから呼び出されたかを"EventArgs args"で判定して処理することもできます。
今回は処理としては1つなので、"TrimeTrackTitle"では、この引数についても使いません。
解説③
コンテキストメニューから呼び出された直後の処理です。
ここでは、MusicBee側の状態を判定しています。
"Player_GetPlayState()"では、MusicBeeの再生状態を取得できます。
今回のプラグインはライブラリのトラックタイトルに対して更新を行いますので、対象のトラックに対して再生処理などを行っていないことを確認してから処理を行うようにしています。
判定する状態は、次の2つです。
"PlayState.Playing"再生中
”PlayState.Paused"一時停止中
この状態を検出したら、処理を実施せずに処理を
"return"で終了しています。
解説④
トラックの再生中などでなければ、"Library_QueryFilesEx"で
現在、選択中のトラック情報を取得します。
第1引数で"domain=SelectedFiles"を指定し、
第2引数は、情報を格納するものを指定します。
"Library_QueryFilesEx"の処理呼び出しが正常に出来たら、
取得した情報を"files"に格納しています。
"Library_QueryFilesEx"呼出し後、トラックが選択されているかを
"files"の長さを確認し長さ"0"であれば、現在トラックは選択されていないことを、"MessageBox"を使って表示して
"return"で終了しています。
解説⑤
ここが今回のプラグインにおける処理そのものです。
" foreach (string file in files)"を使って、選択されているトラックすべてをループ処理でトラックを1つずつ 処理します。
"tt = mbApiInterface.Library_GetFileTag(file, MetaDataType.TrackTitle);"でトラックのトラックタイトルタグを取得して、一時変数"tt"に格納しています。
次の処理は、少し判りずらいかもしれません。
"mbApiInterface.Library_SetFileTag(file, MetaDataType.TrackTitle, tt.Trim());"
これは2つの処理を一度に実行しています。
一時変数"tt"はString型ですので、文字列の前後の不要な空白文字などは、
"Trim"処理で除去できます。
除去した文字列をそのまま、"Library_SetFileTag"でトラックタイトルタグを更新しています。
※改良ポイント
ここでは、なるべく処理を簡素にしたいのでトラックタイトルタグ前後にある空白文字などがなくても、そのまま設定しています。結果が変わらない場合は設定する必要はないので、"Trim"前と"Trim"後を比較して変化がなければ更新しないとすれば処理の無駄がなくなります。
トラックタイトルを設定したら、それを反映します。
"mbApiInterface.Library_CommitTagsToFile(file);"
プラグインの処理はここまでです。
最後の処理"mbApiInterface.MB_RefreshPanels();"は
MusicBeeに表示に関するもの(ここではトラックタイトル)を
更新したので、再表示を指示しています。
このプラグインでの処理イメージ
以下は、1つのアルバムで3トラックあり
トラック2は、トラックタイトルの後ろに空白があります。(後ろだと見えませんが)
トラック3は、トラックタイトルの前に空白があります。
トラック2とトラック3を選択して、プラグインで処理します。
結果、トラックタイトルの前後にある空白文字などが除去されます。
MusicBee向けのプラグイン開発を簡単に4回に分けて解説しました。
今回の解説でいったん終了となります。