« ゲームセンターCXって知ってる? | トップページ | 最近見ているDVD「LOST」 »

2008年3月21日 (金)

foobar2000 タグを更新しよう

今回は曲のタグ情報を更新するコンポーネントを作成する。

プロパティ

↑TESTというタグにdataという値を書き込むコンポーネントを作成する。

ポイントはタグの更新方法。

今回はファイルを3つ作成する。


FileInfoData.h

file_info_filterを継承したFileInfoDataというクラスを作成する。

このクラスを使ってタグを更新する。

本クラスにはプライベートメンバとして更新するタグ名と値を持つ。

m_tag : 更新するタグ名を格納する。

m_val : 更新する値を格納する。

pfc::string8はfoobar2000で文字列を扱うためのクラス。頻繁に登場するので覚えておいた方がよい。


FileInfoData.cpp

FileInfoDataクラスの実装部分。

apply_filterを実装する。

引数p_infoを操作し、タグを更新する。

p_info.meta_set()関数はタグ名と値を引数に取る。

ここではプライベートメンバのm_tag、m_valでタグを更新している。

これでタグ名:m_tag、値:m_valというタグが設定される。

p_infoにはタグを設定するmeta_set()以外にもタグを削除したり等様々な関数が用意されている。詳しくはクラスfile_infoを参照。

なお、本関数はtrueを返せばタグを更新する。falseを返すと更新されないので注意。


main.cpp

今回も曲の再生開始時をフックする。

CPlayback::on_playback_new_track()

pfc::string8 tag = "TEST";
pfc::string8 val = "data"; 

service_ptr_t<FileInfoData> infodata = new service_impl_t<FileInfoData>(tag, val);

更新するタグ名に"TEST"、値に"data"を設定し、FileInfoDataクラスのインスタンスを作成する。

static_api_ptr_t<metadb_io_v2>()->update_info_async(pfc::list_single_ref_t<metadb_handle_ptr>(track), infodata, core_api::get_main_window(), metadb_io_v2::op_flag_delay_ui, NULL);

いよいよタグの更新。

static_api_ptr_t()->update_info_async()を使って更新する。

この関数に先ほど用意したFileInfoDataのインスタンスinfodataを渡す。

引数 metadb_io_v2::op_flag_delay_ui は、タグ更新時にアップデートのダイアログを表示しない(ただし更新に一定時間以上かかった場合は表示する)という指定。更新するたびにアップデートのダイアログを表示したくないため、この指定をしている。他の指定に関してはSDKのmetadb.hを参照。


以上のソースコードをビルドしてできたコンポーネントをコピーして曲を再生してみよう。

曲の再生開始後、TESTというタグにdataという値が書き込まれているはず。

今回作成したプロジェクトをダウンロードする


|

« ゲームセンターCXって知ってる? | トップページ | 最近見ているDVD「LOST」 »

foobar2000」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/56729/40584785

この記事へのトラックバック一覧です: foobar2000 タグを更新しよう:

« ゲームセンターCXって知ってる? | トップページ | 最近見ているDVD「LOST」 »