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形式であれば、フォーマットを使用するためのライセンスフィーも
心配ありません。
(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..と
なっています。
今回はこの辺にして、実際の実装については次回にしようと思います。