Saqoosha.net

  1. About
  2. Archives
  3. Search
  4. Say
Language:

4 月のてら子

今月のてら子はなんかちょっといつもと違う。しかも 2 回もある。

ひとつめ。

お花見勉強会 2010
毎年やってて 3 回目ぐらい? 去年はぼくは社員旅行で海外いってた参加できなかったんだけど、てら子 (@teraco_osaka) + FxUG (Flex User Group, @fxug_osaka) + 関西ライフハック研究会、の合同イベント。お花見ってついてるけど 4/17(土)なのでお花はもうないと思われますが、まあ、食べながら飲みながら屋外でプロジェクタ用意してなんかやる。場所は靱公園。

ふたつめ。

GEEKs in OSAKA
Flash モーションプログラミング + 大阪てら子

4/25(日)に ROXIK 城戸さん (@roxik) と alumican.net の奥田さん (@alumican_net) が大阪にくるよー。ロクナナのワークショップ (@67ws) がついに大阪でも! せっかくなので大阪てら子も枠もらってなんか話すことになりまして、半分は僕が Flash サウンドプログラミング周りの話、New Year Sonata とかの内部の話をして、あとはてら子組がいつものように gdgd やりますw ワークショップなので有料イベント (¥3,800) だけどてら子枠は Ustream 中継する予定 (?)。(回線状況によっては録画になるかも?)

つーわけで、イベントでまた会いませう。

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 で動くやん、、つーことで置いときました

haXe memo

haXe でサイトを作ろうとしていて。Flash とは勝手が微妙に違うのでメモしていく。

・Mac では eclihx (heXe Eclipse plug-in) は Java 6 で動作する Eclipse Cocoa (64bit) じゃないと動かない。(そしてそんなに便利じゃない)
TextMate Bundle も微妙。
FlashDevelop しかなくね?
FDT 4 がまちどおしい。
・エントリポイントは haxe -main Hoge でコンパイルしたら Hoge クラスの static main() から。このとき Hoge は Sprite クラスである必要はない。
・flash.Lib クラスの current が root の MovieClip。
・trace するとステージにおかれた TextField に出力される。
・flash.Lib.trace がいつものやつ。デフォルトの trace を置き換えることもできるらしい。
・Int, Bool, Void あたま大文字。
・Number なくってかわりに Float。
・getDefinitionByName はない。かわりに Type.resolveClass。
・getDefinitionByName でとってきた Class をそのまま new できない。かわりに Type.createInstance。→ あー、flash.Lib.attach だけでクラス取得してインスタンス化までいけるのかな。引数あたえたい時は createInstance。
グラフィックは Flash IDE でてきとうなクラス名 (Hoge) つけて書きだした swf を、Application.currentDomain に Load して、同名クラスを Hoge.hx で作って上書き。。(まだよくわからん) assets.fla → assets.swf / haxe --gen-hx-classes
assets.swf / hxclasses に assets.swf に含まれるクラスの .hx 版みたいなのん(stub)ができあがるのでそれを使う。 / コンパイルするときに -swf-lib で assets.swf をくっつける。
・-swf-lib で指定できる swf は 1 個だけなので(なんで?)複数の swf ライブラリを使用したい場合は swfmill でくっつける。。→(どうやら複数の swf をいちどにコンパイルできるようになりつつあるっぽい。)
Sam HaXe。swfmill の haXe 用高機能版? hxswfml 類似品?
・SWC も haXe から呼び出すためのインターフェースを用意すれば使える。
・AS3 で SWC (SWF) つくって haXe で全部まとめるか、haXe で SWC 書きだして AS3 側で全部がちゃんこするか? (polygonal のは後者)
・あるクラスのサブクラスを作ったら、コンストラクタでは明示的に super() 呼ばないといけない。
・コンストラクタの名前はクラス名じゃなくって new。public function new() {}
・as は flash.Lib.as に static function として存在してる。キャスト String(hoge) は cast(hoge, String) かな?
・is は Std.is(hoge, SomeClass)。
・クラス名は必ず大文字アルファベットから始める。
・Flash のトップレベルの関数とかは untyped __global__["encodeURIComponent"](str) とかで呼べる。ちなみに encodeURIComponent の代わりに StringTools.urlEncode がある。
as3tohaxe で AS3 のクラス (.as) を haXe のクラス (.hx) にコンバートできる。ちょっと手直し必要だけど 1 からやるよりは楽。
・Object のフィールド削除、delete someObject["keyString"] は Reflect API を使って Reflect.deleteField(someObject, "keyString") する。その他 Object に対する操作は Reflect クラスにいろいろと?
・for (var key:String in obj) { trace(obj[key]); } → for (key Reflect.fields(obj)) { trace(Reflect.field(obj, key); }
列挙型 enum がある。しかもコンストラクタがあったりしてなんか特殊。。
・enum を switch するときは、その enum 型に含まれるすべての項目にたいして case 書かないといけない。
・protected はない。っていうか private が protected。private がない。

・・・

続く。

拡張現実感とアフォーダンス

うっかり AR 飲み会に参加した勢いで、書こうと思ってて書けてなかったのを書く。

・・・

「拡張現実感とアフォーダンス」ってーと、AR 技術をつかってアフォーダンスを付加するみたいな話がわりとあるんだけど、そうじゃなくって AR 的なツールとかメディアとかにアクセスさせるためのアフォーダンスとはなんぞや?っていう話。(あ、ここでいうアフォーダンスってのはいわゆる「知覚されたアフォーダンス」のほう。なんのことやねんっていう人はこっちを読むべし。)

まあ、要は、セカイカメラとかいわゆるマーカーレス AR 技術ってアフォーダンスなさすぎて、日常生活の中では誰も使おうという気にならんやん? カメラ向ければ付加情報にアクセスできるってことに気づかへんやん?(イベントとかゲームとかそれありきのんは除く。) でも、ARToolKit とか FLARToolKit で使ってるマーカーならうまくやればそういうアフォーダンスが発生するんじゃないかしら、と思っているわけです。

むかし、QR コードよりもデザイン性が優れているっていう触れ込みで(まあそれだけでもないんだけど)出てきたカラーコードっていうのがありましてね。ひっそりと消えていったんだけど、僕がこれをみて当時思ったのも↑のアフォーダンス的な話でした。QR コードならどんなものでもそれが QR コードだって簡単に認識できるのに、カラーコードはデザインの自由度があるばっかりに、わからせようとすると「カラーコードです」ってどっかに書いとかないとわからんやん?っていう。

マーカーレス AR も同じだなーと思うんだなー。「これは○○○っていうアプリで読み取ると×××が出てきます」って書くぐらいなら、もうマーカー表示しとけよ、と。「このへんで iPhone かざすといろんな情報が見れます」って書くんなら、QR コード出しとけ、と。(QR コードを AR マーカーとして使うっていう話あるけど、QR コードリーダーに ARToolKit 的なものを仕込めればそれって結構ありな気がする。)

あれー? なんかディスってるみたいになってる。(担当が違うw)いやー、まあ AR 三兄弟 (@ar3bros) もっとがんばってほしいなあっていう話ですよ。

んじゃっ。

adidas Originals | BE Originals

2010: New Year Sonata
↑これがこうなった↓
adidas Originals | BE Originals

去年末に New Year Sonata つくってて音プログラミングたのしーなー、もっとこんなのやりたいなーと思ってたら今年初めの仕事が New Year Sonata をベースにした adidas Originals のサイトだったっていう。ベースにしたっつってもいろいろてんこモリで新しく書いたコードの方が断然おおくって、シーケンサーにもかなり手を入れてて、おかげで Sonata でプチノイズが出てる理由もわかりましたとさ。こちらも Sonata と同じく投稿した写真からオリジナルの音楽が生成されます。今回は赤だけじゃなくって 3 種類の色に反応するようになっててそれぞれ音色が違うのでいろんな写真で試してみてくださいまし。運がよければトップで流れてる中に登場できるかも?(僕のは検索しないと出てこないなー、、、)

・・・

んやー、真鍋さんも書いてたけど、こうやって自分たちが作ってた作品をかってもらってそれが広告仕事になるって、なんか素敵やん? うれしいやん? もっとこんな仕事できるようにプライベートなモノ、もっと作っていきたいよねー。

なんだか背景がまっしろだなーっていう人は最新のブラウザにアップデートしてみることをおすすめします。
どうやら Flash Player の最新版がインストールされていないようです。こちらから最新版をインストールするともうちょっと素敵な Saqoosha.net を見ることができるかもしれません → Flash Player Download