そしてまたはまる
python全然うまくいかないやんけ。ことの発端はicesというプログラムにあります。
せっかくサーバーしてるんだからmp3くらいストリーミングしなきゃな、と思ってそういう風にしたんですが、このicesというのがなかなか曲者で。どうせなら好きな曲聴きたいですよね。なのにプレイリストを変更するにはパールかパイソンでスクリプト書かなくちゃだめなんです。どうせならパイソンするかと思って紆余曲折を経たのですが、全然うまくいかない。でもなんとなく、問題はパイソンではなくicesに、それも僕の理解の低さに起因しているように思えます。だってファイルの読み込みがうまくいってないようなんですもの! そんなおかしな話があるか!
あとどうしてググっても全然先駆者の方が見当たらないのかしら? こういうプレイリストの動的な変化ってみんながやりたくなるようなことじゃありませんか?
朝からガリガリとプログラム書いて、ブラウザから選曲したプレイリストを作成できるようにはしたのですが、肝心のpythonさんが……icesさんが……ひどいんです……。助けてください……。
#追記
なんとか一応形になりました。pythonがうまくいかなかったのは、読み込むファイルのパスを間違えていたからでした^^
拙いコードですが、webでまったくサンプルコードが見つからず苦しい思いをしたので、載せておきます。
/usr/local/etc/modules/ices.py
songnumber = 0 # 中略 def ices_get_next (): print 'Executing get_next() function...' global songnumber ff=open("/var/www/playlistflag.txt",'r+') flag=int(ff.read()) if flag==1: songnumber=0 ff.seek(0) ff.write('0') ff.truncate() ff.close() f=open("/var/www/playlist.txt") count=0 for file in f: if count==songnumber: break count+=1 else: songnumber=0 f.seek(0) file=f.readline() file=file.replace("\n","") f.close() return file
ices_get_next()は曲の変わり目とか、起動してすぐに読み込まれます。なのでこの関数を弄るだけで曲の切り替えはできます。そこらへんはicesのman見てください。
playlist.txtは事前に用意したプレイリストです。僕はweb上で曲一覧を表示して、そこから好きな曲を選択すると、playlist.txtに書き出すようなphpを書きました。
playlistflag.txtには1か0の数値が入っていて、web上で新たなプレイリストを作成すると(プレイリストを更新すると)1になるようにしました。
audaciousで再生すると綺麗に再生中の曲目が表示されますが、icecastのweb上では文字化けしてしまいます……。タグはutf-8で統一してるのですが、まあもうどうでもいいや! と思ってます:-D
気軽に始めたら、丸一日使ってしまいました。曲目を作るときにフォルダの階層構造を実現するのが思いのほか難しくて、わかりもしないのにjavascriptも使う羽目になったりして(それをいうならpythonもphpもわかってないけど)、とにかく手間が多かった……。それでもなんとか形になってしまうのは、これらの言語が直感的に使いやすいからかなあと思います。cではここまでうまくいくまい。
#追記
文字化け対策ですが、ググったら一番上にありました……。
icecast.xmlに
icecast文字化け対策 - hanakiのhomeserver 構築記
<mount>
<mount-name>マウントポイント</mount-name>
<charset>UTF-8
</mount>
icesでマウントポイントを/ices2にするようにしているので
としたところ、文字化けしなくなりました。ちなみにタグは全部UTF-8にしてあります。引用元にはありませんが、と閉じないとパースエラー吐かれました。また一つ素晴らしい環境になってしまった。