正月からずーっと仕事しかしてない気がするけど、たまにはこういうコード書きたい! ということで書いた。これでみんな自分オリジナルの 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 で動くやん、、つーことで置いときました。