久々にFlex
今度のイベント向けに、ShoutcastからMP3を受け取って再生するFlashをFlexで作成中。
package { import flash.media.*; import flash.net.*; import mx.core.UIComponent; public class streamsound extends UIComponent { private var sound:Sound; private var mp3Url:String; private var soundChannel:SoundChannel; private var vol:Number = 1; public function initWithUrl( _mp3Url:String ):void{ mp3Url = _mp3Url; } public function vol_change(_vol:Number):void{ vol = _vol; volSet(); } public function stop():void{ sound.close(); soundChannel.stop(); } private function volSet():void{ if(soundChannel != null){ var st:SoundTransform = new SoundTransform; st.volume = vol; soundChannel.soundTransform = st; } } public function play():void{ var tmpUrlRequest:URLRequest = new URLRequest(mp3Url); sound = new Sound(tmpUrlRequest); soundChannel = sound.play(); volSet(); } } }
//mxmlの呼び出し側 private function initApp():void { player = new streamsound; player.initWithUrl("http://shoutcastserver/;stream.nsv"); this.addChild(player); player.play(); //player.stop(); }
こんだけでそれっぽい事ができるActionscriptはマジすげーっつうか、Objective-Cばかりかいているとこういう事で感動できるのでお得だと思いました。
ただ、Flashのバグだとおもうんだが、MP3ストリームのビットレートが128K Stereo CBRじゃないとブッチブッチいってうまく再生できなかったりする事があるんだが、まあこれは仕方ないか。
(Shoutcastは同一ファイルの中で突然ビットレートが変わるなんて珍事が起こりうる)