radiko オリジナルプレーヤーを作る


正月からずーっと仕事しかしてない気がするけど、たまにはこういうコード書きたい! ということで書いた。これでみんな自分オリジナルの radiko プレーヤーが作れるね!


(※あたりまえだけど公式プレーヤーで聞ける範囲の人しか聞けないよー)

package {
    import com.bit101.components.HBox;
    import com.bit101.components.Label;
    import com.bit101.components.PushButton;
    import com.bit101.components.VBox;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.NetStatusEvent;
    import flash.net.NetConnection;
    import flash.net.NetStream;

    public class radiko extends Sprite {

        private static const STATION_CODE_OSAKA:Array = ['FMO', '802', 'CCL', 'OBC', 'MBS', 'ABC'];
        private static const STATION_CODE_TOKYO:Array = ['TBS', 'QRR', 'LFR', 'INT', 'FMT', 'FMJ'];

        private var _conn:NetConnection;
        private var _stream:NetStream;

        public function radiko() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            var vbox:VBox = new VBox(this, 10, 10);
            var osaka:HBox = new HBox(vbox);
            new Label(osaka, 0, 0, 'OSAKA');
            for each (var name:String in STATION_CODE_OSAKA) {
                new PushButton(osaka, 0, 0, name, _onSelectStation).width = 50;
            }
            var tokyo:HBox = new HBox(vbox);
            new Label(tokyo, 0, 0, 'TOKYO');
            for each (name in STATION_CODE_TOKYO) {
                new PushButton(tokyo, 0, 0, name, _onSelectStation).width = 50;
            }
        }

        private function _onSelectStation(event:Event):void {
            if (_stream) _stream.close();
            if (_conn) _conn.close();

            _conn = new NetConnection();
            _conn.client = {onBWDone: trace};
            _conn.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);
            _conn.connect('rtmpe://radiko.smartstream.ne.jp/' + event.target.label + '/_defInst_');
        }

        private function _onNetStatus(event:NetStatusEvent):void {
            switch (event.info.code) {
                case 'NetConnection.Connect.Success':
                    _stream = new NetStream(_conn);
                    _stream.client = {onMetaData: trace};
                    _stream.bufferTime = 1;
                    _stream.play('simul-stream');
                    break;
            }
        }
    }
}

SoundMixer.computeSpectrum でサウンドビジュアライズ的なものもくっつけようとしたら、セキュリティエラーでできなかった。。。まー、いつまでこのコードが動くかわかんないので、できるうちに遊んどくのが吉。あ、これ、リファラーチェックしてないんだったらそのまま Wonderfl で動くやん、、つーことで置いときました