AmarokとObsidianMusicを使用した小規模なMP3ファイルサーバの作成法

 Linuxでの音楽再生と言えば、まず筆頭に上がるのが Amarok である。このオーディオプレーヤには、操作性に優れたインタフェースや各種の有用なスクリプトを始め通常の操作で必要となるものは大概そろっているのだが、このアプリケーションの場合はそれだけに止まらず、サーバ上で実行させた上でWebインタフェースを介したアクセスも可能となっているのである。

 ObsidianMusicは以前にamaroK Web Frontendという名称で公開されていたスクリプトコレクションであり、これらをMySQLデータベースおよびAmarokプレーヤと併用すると、インターネット経由または小規模なオフィスネットワーク内部でのMP3ファイル共有環境を簡単に構築することができる。つまり各自がコレクションしている音楽ファイル群をこの方式で公開すると、通常のWebブラウザを介した、ミュージック再生、ダウンロード、ストリーム配信を簡単に行えるようになるのだ。その他にもObsidianMusicは、音楽ファイルの検索やソート機能も備えており、テーマ変更によるカスタマイズにも対応している。

 音楽ファイルのコレクションも10,000曲くらいの規模に達すると1つのプレイリストに収めて管理するだけでは、アプリケーションによるインデックス付けが延々と終わらないという羽目に陥ることもあるが、それを解決するにはデータベースを使用することである。ObsidianMusicを試してみる場合も、最初にAmarok用のデータベース作成を済ませておかなければならない。なお現状で同プレーヤから接続できるのは、MySQL、PostgreSQL、SQLiteのデータベースである。ここでは古くから慣れ親しんだMySQLを使ってamarokという名称の新規データベースを作成し、ローカルネットワークからユーザ名johnによるフルアクセスが可能なようにしておくことにする。

mysql> CREATE DATABASE amarok;
mysql> GRANT ALL ON amarok.* TO razvan@'192.168.0.19' IDENTIFIED BY 'pass123';
mysql> GRANT ALL PRIVILEGES ON amarok.* TO 'john'@'192.168.0.56' IDENTIFIED BY 'password678' WITH GRANT OPTION;
mysql> flush privileges;

 次の手順としてはObsidianMusicのパッケージをダウンロードして、ファイル群を/var/www/amarokに展開しておく(あるいはApacheのrootディレクトリなどでもよい)。そして/var/www/amarok/inc/config.phpファイルを編集して、下記のような設定を施しておくが、当然ながらこの操作はPHPおよびphp5-mysqlがインストール済みであることが前提となる。

<?php
if(eregi("config.php", $_SERVER['PHP_SELF'])){
	die("Cannot access directly.");
}
$db = array(
	'user' => "razvan",
	'pass' => "pass123",
	'name' => "amarok",
	'host' => "localhost");
$dbtype = 0;
$locked = true;
$authtype = 1;
$cookielen = 60;
$playlist = 3;
$gzip = true;
$cache = true;
$paginate = true;
$ressize = 200;
$language = "en_us";
$sitename = "My MP3 Collection";
$theme = "default";
$allowchoose = false;
$extrainfo = false;
$errorreporting = false;
$enabled = true;
?>

 $dbの直下にある4行は、見て分かるとおり、データベースのユーザ名、データベースパスワード、データベース名、ホスト名をそれぞれ指定している。その次にある$dbtypeには、MySQLを示す0または、PostgreSQLを示す1を指定しておけばいい。$locked = trueは、ObsidianMusicの楽曲データベースに対するアクセスをパスワード制限させるための指定である。またパスワード無しでのアクセス方式を設定しておきたければ、$authtype1あるいは2としておくことでセッション保存の方式を指定できる(セッションまたはクッキー)。$cookielenはセッション時間を分単位で指定するための変数である。

 ここではデータの出力関連の設定も行っておく。その中で最も重要となるのは、$playlistであろう。ここに1を指定すると.plsフォーマットで、2を指定すると.m3uフォーマットでの出力が行われる。ストリーミング配信ではなくダウンロードを行わせたい場合はこの$playlist3にしておくと、ObsidianMusicページにおける楽曲リンクのクリックにより、tarファイルにアーカイブ化されたものが各自のブラウザに送信されるようになる。その他、アルバムレベルのダウンロードを可能にしておくこともできるが、これにはメリットとデメリットがあり、複数ファイルの一括ダウンロードをするには便利な反面、バックグラウンドでのアーカイブ化処理に大量のCPU時間が費やされることを覚悟しておかなければならない。

 $gziptrueに設定しておくと、ObsidianMusicページにアクセスを試みるブラウザには圧縮ページが提示されるようになる。パフォーマンス的な観点からは$gzipおよび$cacheの双方を有効化しておくと、ページ読み込みが高速化されるはずだ。$paginateは、ブラウジングに適した複数ページにメインページを分割させるかの指定である。この$paginatetrueに設定した場合は、1つのページに表示させる量を$ressizeに指定しておけばいい。$languageの設定については特に説明する必要もないだろうが、現状でObsidianMusicは、英語、ルーマニア語、イタリア語、ドイツ語、ロシア語、オランダ語に対応している。

 $sitenameにはWebサイトの名称を設定しておく。なお残念なことに、ObsidianMusicにはデフォルトのテーマしか同梱されていないが、その実体はページ設定およびフォーマットに関する情報を記述した1つのCSSファイルである。よってユーザ独自のテーマを作成した場合は、その名前を$themeに指定しておけばいいが、ユーザに任意のテンプレートを選択可能にさせるには$allowchoose = trueと指定しておく必要がある。

 ObsidianMusicがデフォルトで表示する楽曲情報が不充分だと感じた場合は、$extrainfotrueに変更しておくと、実行結果のページに追加の情報列が表示されるようになる。また$errorreportingはデバグ機能を使うかの指定で、各自のサイトでエラーが発生していない限り有効化しておく必要はない。最終行にある$enabled = trueは、ObsidianMusicが動作状態にあってアクセス可能なことを、AmarokおよびApacheに対して通知させるための指定である。サイトをオフライン化させる場合は、この指定をfalseにしておけばいい。

 最終的にサイトを立ち上げるには、利用を許可するユーザ用のアカウントを事前に登録しておく必要がある。パスワード作成に関しては、ObsidianMusicパッケージの/inc/authサブディレクトリに、SHA1暗号化に対応したPythonスクリプトが用意されている。このコマンドは「./genauth.py password 」で起動されるが、passwordには各ユーザのアクセスキーを指定しておく。こうして得られたパスワード文字列をコピーしておき、テキストエディタで/var/www/amarok/inc/auth.users.phpファイルを開いて$userlistの下に位置する領域に移動し、下記の形式でユーザ名と暗号化パスワードを必要な数だけ登録しておく。

'aygun' => '7b718ce5d791eb5234b2c8f2293afc5d6bd791c2',
'moni' => 'e1b00ca72e624438c2f689d03f6f6d1fb8e736f3',
'bogdan' => 'a597b8605b56193e90d637d8ef7872d2f71df4a8',

 なお、これら各行の末尾にはカンマが必要となる。

 以上で事前のセットアップ作業は完了である。その次の手順としては、AmarokのConfigurationウィンドウにあるCollectionセクションに移動し、MySQLユーザ名とパスワードを入力する。またデータベースの種類および、ホスト名(通常はlocalhost)とデータベース名(amarok)の指定と、MySQL用のポート番号(通常は3306)の入力も必要である。最後にApacheおよびMySQLを再起動させて、ポート3306が開いているかを確認する。

sudo /etc/init.d/apache2 restart
sudo /etc/init.d/mysql restart
netstat -tapn | grep 3306

 再度Amarokに戻りToolsメニューでRescan Collectionを選択すると、新規状態のMySQLデータベースにてMP3ファイルのID3タグの収集が行われる。その処理が終了したらWebブラウザを起動して、URLバーにサーバアドレスの「http://localhost/amarok」を入力する。このアドレスへのアクセス時にはユーザ名とパスワードの入力を求められるので、先に登録しておいたユーザアカウントを指定して、必要なファイル群をObsidianMusic経由でアクセスできるかを確認する。

 こうして公開した音楽ファイルは、先にconfig.phpで指定した$playlistの設定値に応じて、オーディオストリーム形態またはダウンロード方式のいずれかで各ユーザの手元に配信されることになる。またObsidianMusicには、アーティスト名、曲目、アルバム名、ジャンル、リリース年による検索機能も用意されている。その他、画面左側にあるメニューからは、曲目、アルバム、バンド名に対するブラウジング、ランダムな音楽ファイルのダウンロードまたは再生、最新の追加データの一覧といった操作も行うことができる。

 なおAmarok 1.4以降ではObsidianMusicでのアルバムジャケットの表示が行えなくなっているが、これはAmarok開発チームにより多くのアプリケーションコードが改訂された際に、画像データの格納法も変えられてしまったためである。こうした問題はObsidianMusicのリリースサイクルとも関連している。ObsidianMusicの場合、新規機能が追加されることは滅多になく、テーマについてももう少しバリエーションを増やしてもらいたいところだ。このように些末的な欠点は残されているものの、家族や友人レベルでの音楽ファイル共有やオンデマンド型のインターネットラジオ配信環境を構築するに当たっての最適なツールとしてObsidianMusicを位置付けていいはずだ。

Razvan T. Colojaは、ルーマニアの雑誌エディタを務める傍ら、ルーマニア語のLinux/OSSポータルコミュニティサイトであるwww.mylro.orgにも管理者兼エディタの1人として参加している。同氏の執筆するLinuxおよびIT関連の記事は、これまでに150本以上がオンラインおよび通常形態の雑誌に掲載されている。

Linux.com 原文