MusicBeeプラグイン開発#3

今回の記事から実際にプラグインを作っていきます。
まずはどんなプラグインを作るのかを考えてみたいと思います。

プラグイン化する目的

アプリケーションと違って、プラグインというもの、そのアプリケーションの機能を補完したり拡張したりする目的が大半です。
多くの場合は、使用者(多くの場合は自分自身)がもっとこうなったら便利だ!や時間がかかることが一瞬でできた!(時短)などです。
よって、今回作るプラグインは便利!時短できた!を目的とします。

不満(不便)なこと

これはMusicBeeに限ったことではないですが、日本語の楽曲情報をweb上のデータベースから取得したときに、トラックタイトルやアルバム名などの英数字が全角文字だったり半角文字だったり。英文字が大文字または小文字になっていたりと統一されていません。
これはweb上のデータベースに登録されている情報が統一した規則で登録されていないからです。
これを解決するには、web上のデータベースが修正されれば何もする必要がありませんが、修正されることは間違った情報が登録されていたといった場合でなければほぼ修正はありません。
よって、取得した側で何とかする必要があります。

まずは小さな機能から

はじめからなんでもできるものを作ろうとすると完成まで時間がかかります。
なかなか完成しないことから飽きが来て最悪作ることをやめてしまうかもしれません。
ですので、はじめは小さな機能を作り、以降は随時拡張するといった方針とします。

トラックタイトルを修正するプラグイン

小さな機能として、まずは選択中のトラックのタイトルを修正するプラグインを作ることとします。
この修正ということもまだあいまいです。よって何を修正するのか?を考えないといけません。
ここでは修正は、トラックタイトルに含まれる「空白文字」を除去するプラグインとします。

プログラミングできるように処理内容を整理

さて作るプラグインは大まかに決定しましたので、もう少し処理する内容を整理してプログラミングできるようにします。

プラグインの処理の流れ

①表示中のトラックで現在、選択中のトラック情報を取得して処理対象を決定し以降の処理を処理対象すべてに逐次処理する
②処理対象のトラックからトラックタイトルを取得する
③トラックタイトルに含まれている空白文字を除去する
④空白文字を除去したトラックタイトルに処理対象のトラックタイトルを更新する

①選択中のトラック情報を取得する

MusicBeeのプラグイン作成のチュートリアルは非常によくできていて
なんら迷うことはないですが、そこを超えていくと途端に情報がなく
大変です。
基本的には公式のフォーラム情報やGitHubで公開されているプラグインのソースコードを読んで、欲しい情報を取得していくことになります。
まず、MusicBeeのプラグインでライブラリへのアクセスするには、
多くの場合、"Library_QueryFilesEx"というAPIを使用します。
このAPIは、第1引数にドメインを文字列で指定します。
第2引数は、取得した対象(このAPIはファイル名が返る)が返されます。
今回は、"選択中のトラック"ですので指定するドメインは
"domain=SelectedFiles"
と指定します。第2引数は取得した対象としてファイル名が複数(選択されている分)返されます。
具体的には、以下のようにします。

string[] files = null;

// 選択中のものを取得
if (!mbApiInterface.Library_QueryFilesEx("domain=SelectedFiles", out files))
    files = new string[0];

②処理対象のトラックからトラックタイトルを取得する

トラックタイトルを取得するには、ファイルタグを取得する"Library_GetFileTag" APIを利用します。
第1引数はファイル名です。
第2引数は取得したいファイルタグを指定します。
今回は、トラックタイトルですので"MetaDataType.TrackTitle"を指定します。

mbApiInterface.Library_GetFileTag(file, MetaDataType.TrackTitle);

③トラックタイトルに含まれている空白文字を除去する

これは非常に簡単です。 「空白文字」を除去する"は、C#の標準機能として文字を置き換える(置換)メソッド"Replace"がありますのでこれを使います。 具体的には、「空白文字」を"Replace"を使って空文字に置き換えます。 空白文字は、半角文字と全角文字でありますので両方を空文字で置き換えることになります。

// □が空白文字を示しています。
String work="あい□う えお";

// 半角空白文字を空文字に置き換える。
work = work.Replace(" ", "");
// 全角空白文字を空文字に置き換える。
work = work.Replace("□", "");

④空白文字を除去したトラックタイトルに処理対象のトラックタイトルを更新する
トラックタイトルを取得するのに使った"Library_GetFileTag" APIとは逆に設定する"Library_SetFileTag" APIがあるのでそれを利用します。 第1引数はファイル名です。 第2引数はファイルタグを指定します。 第3引数は設定するタグ情報を指定します。 ここでの注意事項として、このAPIで設定したことは、まだライブラリへは反映されていません。 MusicBeeはライブラリへの更新はキャッシュと呼ばれる一時的な領域があり設定した情報は一時的な状態になっています。 よって、設定した情報(更新情報)を実際にライブラリへ反映させる必要があります。 それが"Library_CommitTagsToFile" APIです。
第1引数は反映するファイルを指定します。

mbApiInterface.Library_SetFileTag(file, MetaDataType.TrackTitle, tt);
mbApiInterface.Library_CommitTagsToFile(file);

以上で作成するプラグインで必要な部品がそろったことになります。
次回は、これらの部品を組み上げる作業になります。

この記事が気に入ったらサポートをしてみませんか?