コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

Luaridaサウンド編 (4)

Luaridaを使って、Androidを音楽再生機にしてみた。AndroidのMediaPlayer機能は音楽ファイルをURLを使って指定すると、サーバに繋ぎに行ってストリーミング再生してくれます。このに気づいたので、Luaridaのsoundコマンドを使って、ストリーミング再生プログラムを作ってみました。ただ、これを作るためには、曲がなり終わったかどうかを調べる必要があったので、sound.isPlay()というコマンドを追加実装しました。

MP3ファイルを配信するための簡易Webサーバを作る

自宅のPCで簡単にWebサーバを動かすときはsHTTPdを使っています。とても簡単に使えます。設定も簡単で、公開フォルダを指定するくらいです。
ただ、1つ注意しないといけないのは、PCにSkypeを常駐させていると、ポート80番を使っていることがあるので、Skypeの設定でポート80番は使わないようにオプションを変更しておく必要があります。
公開フォルダに音楽ファイルを入れてsHTTPdを起動します。sHTTPdを動かす前に、sHTTPdを動かすPCが自宅LAN内で閉じていることを確認しておかないと、音楽ファイルをインターネットに公開してしまうことになるので、注意してください。

Androidで再生

Androidに音楽ファイルのm3uファイルを作ります。m3uファイルといっても、mp3ファイル名を保存しただけのものです。
それを読み込むプログラムを書きました。

local musicdata={}
local fp, msg
local m3u = "/sdcard/luarida/music.m3u"
local str
local n = 0
 --ファイルを開きます
 fp, msg = io.open( m3u, "r")
 if( not(fp) )then
   dialog( m3u.."がオープンできません", msg, 0 )
   return
 end
 --データを読み込みます
 while(true)do
   str = fp:read("*l")               --1行読み込み
   if( str==nil )then break end      --読込むデータが無ければ終了
   str = string.gsub( str,"\r","" )  --改行コードを外す
   n = n + 1
   musicdata[n] = str
 end
 io.close(fp)

これで、musicdata[]配列にmp3ファイル名が取得されました。

ストリーミング再生させる

つぎに、ストリーミング再生させるプログラムを書いてみました。

local ipadd = "http://192.168.1.1/"  --PCのIPアドレス
 for i=1,n do
   if( sound.setSoundFile( ipadd ..musicdata[i], 0, 0 )==-1 )then
     dialog( musicdata[i], "ロードに失敗しました", 1 )
     do return end
   end
   --ファイル名の表示
   printscrl( musicdata[i], 24, color(255,255,255), color(0,0,255) )
   --再生開始(ループしないモード)
   sound.start( 0, 0 )
   --再生終了待ちループ
   while(true)do
     --再生中かどうかのチェック。再生が終わったならば待ちループを抜ける
     if( sound.isPlay(0)==0 )then break end
     for n=0,1000 do
       	x,y,a = touch()
        if( a~=1 )then break end
     end
     if( a~=1 )then
       e = dialog( "次の曲を再生しますか?", "次再生:YES, 終了する: NO, このまま再生を続ける: Cancel", 3 )
       if(e~=0)then break end
     end
   end
   if( e==2 )then
     toast("画面タッチで終了します",0)
     break
  else
     --再生を止める
     sound.stop(0)
   end
 end
 touch(3)

sound.setSoundFile()でhttp://で指定して音楽ファイルをセットすると、sound.start()で自動的にWebサーバになっているPCに繋ぎにいって、ストリーミング再生が始まります。
曲が鳴っている間はwhileループの中のsound.isPlay()で鳴り止むのを待っています。鳴り止むと、ループを抜けて次の曲の再生を始めます。
プログラムはここをクリックするとダウンロードできます。