Linuxのオーディオプレーヤ Exaile を拡張する

久々の更新です。
今回はExaileというLinuxのメディアプレーヤのプラグインを作ってみたので
ご紹介しようと思います。他にもAmarokというメジャーなメディアプレーヤ
もあるのですが、私はGTKベースのアプリケーションの方が好きなので
Exaileを使っています。


(GTKのテーマを黒っぽくしているので見にくかったらゴメンナサイ)

あと、Exaileを使う理由としては、Exaile本体、プラグインなど
Pythonで書かれているということです。Pythonは好きな言語の1つなので
これはいい!と思ったわけです。
C++やらObjective-Cやらでもいいんですが、コンパイルしなくても
 いいぶん、気軽に実験できるし)

Linux環境でCDから音楽を圧縮オーディオとしてPCにリッピングする
ツールとしては、gripなどがよく使われていると思います。

では、なぜgripなどを使用しないのか。。。といいますと。。

iTunesは標準でリッピングの機能を持ってるなぁ。。
 なんとなく、別ツールを使うよりもExaile自体にリッピング機能が
 あったほうが便利そう」

と思ってしまったからでした。
もしかしたら、既にそのようなプラグインも出回っているのかも
しれませんが、私の探した限りでは見当たりませんでした。

圧縮オーディオのフォーマットで今主流なのはAACなんでしょうけど、
フォーマットを使用する際のライセンスが今ひとつ理解できなかった
ので、今回はOGG形式でリッピングすることにしました。
OGG形式であれば、フォーマットを使用するためのライセンスフィーも
心配ありません。

リッピングプラグインの方針は次のようなものにしました。

(0) LinuxのExaileで使えるプラグイン

(1) リッピングツール、OGGエンコーダは既存の外部ツールを使用する。

  ・リッピングツール:cdparanoia
  ・OGGエンコーダ : oggenc

  wav形式で保存したファイルをoggのエンコーダで変換する。

(2) プラグインが有効になったら、Exaile本体にリッピング用の
  ボタンを追加する。

(3) リッピングOGGエンコードは別々のスレッドにしてみる。
  (PythonでのThread初体験)

(4) リッピング(wavファイルで保存)のみのモードも欲しい。

(5) エンコードしたらwavを削除する機能も欲しい。

(6) エンコードしたoggファイルの保存場所はアーティスト名/アルバム名
  などのフォルダに分けて出力できるオプションもほしい。

(7) ogg変換時の音質もある程度指定したい。


方針も決まったので、早速実装をしました。
(実はさきほど完成しました。)

ちなみに、Exaileでプラグイン追加するには、プラグインスクリプトをホームディレクトリに
ある ~/.exaile/plugins/に置き、PluginManagerで有効に設定するだけです。

今回作成したプラグインの設定を行うには、上の画像の
右下のほうにある"Configure"ボタンを押します。

こんな感じのダイアログが開きます。
ダイアログには3つのタブがあります。

●全体設定用のタブ

このタブは全体的な設定を行います。
(1)Temp Directory :
  リッピングの作業ディレクトリを指定します。

(2)Directory for ogg file output :
  コンバートしたOGGファイルの保存先ディレクト

(3)Ripping wav only :
  リッピングのみ行い、OGGへのエンコードは行いません。

(4)Delete ".wav" files after conversion finished.
  このチェックがONになっているとOGGへのエンコードが完了したあと、
  リッピングしたwavファイルを削除します。

上記(3)と(4)は一度にどちらかしかチェックできません。
リッピングのみ行った後でwavを削除するという指定は無意味なので。)

リッピングツール設定用タブ

(1) Command path:
  リッピングに使用するcdparanoiaが置かれているディレクトリを指定します。
  (cdparanoiaのフルパスではない)


●エンコーダ用設定タブ

(1) Encoder path:
  encoderに使用するoggencが置かれているディレクトリを指定します。
  (oggencのフルパスではない)

(2) Quality;
  エンコード時の音質を指定します。(1 〜10 )
  数字が大きくなるほど高音質。

(3) Output options:
  ・上側のラジオボタン:
   Generalタブの"Directory for ogg file output"で指定したディレクトリの
   直下に全てのoggファイルを出力します。

  ・下側のラジオボタン:
   Generalタブの"Directory for ogg file output"で指定したディレクトリの
   直下にアーティスト名/アルバム名/というディレクトリを作成し、
   そのなかにoggを出力します。

   CDDBなどに接続されておらず、アーティスト名、アルバム名が不明の
   場合には、Unknown-artist/Unknown-album/というディレクトリのを作成
   し、oggを出力します。

  **ラジオボタンの英語はたぶん変です。。笑


さて、実際にスクリプトを動かすとこんな感じになりました。



Exaileウインドウの右下に"Conv2Ogg"というセンスのないボタンが出現します。
CDを挿入し、リッピングしたいトラックを選択(複数も可)し、ボタンを押してください。
リッピングがはじまります。


リッピング

Cancelボタンを押せば、いつでも処理を中止できます。
また、To WAV, To OGGの処理は別のスレッドになっていて、
To OGGのほうは処理すべきデータ(wav)がない間は..waiting..と
なっています。

今回はこの辺にして、実際の実装については次回にしようと思います。