[Flash] サウンドスペクトラム

Tags:

[Flash] サウンドスペクトラム
» [Flash] サウンドスペクトラム (SWF) (要Flash Player 10)
» ソースコード

ロードボタンでローカルマシンのMP3を選択後演奏、同時にサウンド生波形を円上に配置する。周波数ごとに配置すると面白い分布図になるのではと予想。キックが重い音響系など、できるだけ音に空間的広がりが感じられるものをロードすると面白い波形が見れるはず。FileReference.load()経由のmp3の読み込みには例によってライブラリを使用している。詳細はFileReference.loadでサウンドをロードするライブラリ - boreal-kiss.com
を参照ください。

2008/10/23

unbland.net blog - Pixel Bender で放射状ブラー(ズーム&回転)使ったらなんか等高線っぽくなってかっこよくなった!マウス位置が放射中心になります。
» [Flash] サウンドスペクトラム (version) (要Flash Player 10)
» ソースコード

[Flash] カーリーブレイス

Tags: ,

[Flash] カーリーブレイス
» [Flash] カーリーブレイス

BeatTimer - Spark projectというリズムを管理するライブラリ(メトロノーム)のテスト。シンプルな構造なのにかゆいところに手が届いていて面白い。使い道が色々ありそう。

FileReferenceオブジェクトと変数のスコープの関係

Tags: ,

これは知らないとはまる。Filereferenceオブジェクトへの参照をローカル変数の受け渡しで扱っている場合注意が必要。ローカル変数のみを使用する場合ロードが中断される可能性がある。Flash Player 10 (Astro)のAPIはまだ日本語になっていないようだったので以下を引用するが同じことがFilereference.load()にもあてはまる。

FileReference オブジェクトがスコープ外に移動した場合、そのオブジェクトに対して完了していないアップロードまたはダウンロードは、スコープから離れた時点でキャンセルされます。アップロードまたはダウンロードの続行を期待できる限りは、FileReference オブジェクトがスコープ内にあることを確認してください。

Adobe® Flex™ 3 リファレンスガイド

以下にFileRefarence.load()が正しく完了する場合と完了しない場合の二種類の例を挙げる。どちらも”Load”ボタンを押すとローカルから画像を選択できるようになり、画像を選択するとステージにその画像が表示されるという構造になっている。両者の違いはFilereferenceオブジェクトを扱う変数がローカル変数のみかそうではないかだけである。

FileReference.load()が成功する場合

FileReferenceオブジェクト変数をクラスプロパティで定義しているため(_fr)クラスファイル内でFilereferenceオブジェクトのスコープがはずれることはない。そのためボタンクリックでローカルから選択された画像はFileReference.load()で正しくロードされキャンバス(_canvas)に表示される。

<!– FileReference.load()が正しく完了する例 –>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Button label="Load" click="onClick(event)"/>
    <mx:Canvas id="_canvas"/>

    <mx:Script>
        <![CDATA[
            import flash.net.FileReference;

            //クラスプロパティとして定義
            private var _fr:FileReference;

            private function setListeners(target:FileReference):void{
                var fr:FileReference = target as FileReference;
                fr.addEventListener(Event.SELECT,onSelect);
                fr.addEventListener(Event.COMPLETE,onComplete);
            }

            private function onClick(e:Event):void{
                _fr = new FileReference();
                setListeners(_fr);
                _fr.browse();
            }

            //関数を抜けてもFileReferenceオブジェクトへの参照”_fr”はスコープ内
            //そのため関数を抜けてもFileReference.load()は続行される
            private function onSelect(e:Event):void{
                var fr:FileReference = e.target as FileReference;
                fr.load();
            }

            private function onComplete(e:Event):void{
                var fr:FileReference = e.target as FileReference;
                var loader:Loader = new Loader();
                loader.loadBytes(fr.data);
                loader.contentLoaderInfo.addEventListener(Event.INIT,onInit);
            }

            private function onInit(e:Event):void{
                _canvas.rawChildren.addChild(e.target.content);
            }
        ]]>
    </mx:Script>
</mx:Application>

FileReference.load()が失敗する場合

一方、以下の場合FileReferenceオブジェクト変数はローカル変数でしか定義されておらず、Filereferenceオブジェクトのスコープが完全にはずれる箇所がある(onSelect()を抜けた直後)。その時点でFileReference.load()はキャンセルされるためロード完了によるEvent.COMPLETEが発動しない(_canvasに画像が表示されまでに至らない)。

<!– FileReference.load()が途中でキャンセルされる例 –>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Button label="Load" click="onClick(event)"/>
    <mx:Canvas id="_canvas"/>

    <mx:Script>
        <![CDATA[
            import flash.net.FileReference;

            private function setListeners(target:FileReference):void{
                var fr:FileReference = target as FileReference;
                fr.addEventListener(Event.SELECT,onSelect);
                fr.addEventListener(Event.COMPLETE,onComplete);
            }

            private function onClick(e:Event):void{
                //ローカル変数として定義
                var fr:FileReference = new FileReference();
                setListeners(fr);
                fr.browse();
            }

            //関数を抜けるとFileReferenceオブジェクトへの参照がスコープ外になる
            //そのため関数を抜けるとFileReference.load()は完了前にキャンセルされる
            private function onSelect(e:Event):void{
                trace(e);
                var fr:FileReference = e.target as FileReference;
                fr.load();
            }

            private function onComplete(e:Event):void{
                var fr:FileReference = e.target as FileReference;
                var loader:Loader = new Loader();
                loader.loadBytes(fr.data);
                loader.contentLoaderInfo.addEventListener(Event.INIT,onInit);
            }

            private function onInit(e:Event):void{
                _canvas.rawChildren.addChild(e.target.content);
            }
        ]]>
    </mx:Script>
</mx:Application>

次期Flex SDKからmxmlコンポーネント内でもASDocが使える

Tags:

ASDoc in MXML - Flex SDK - Confluenceによると、Flex SDK 4 (Gumbo)からmxmlコンポーネントにもASDocが書ける。

(注意: 正確にはASDocのnew versionで使えるようになるとしか記載されていないが、Flex 3.1で出力できず、Flex 4で実際に出力できたという理由から上記のようなタイトルにした。Flex 4より前に使えるようになる可能性はある)

mxml内でのASDoc記法は通常のmxmlコメントアウトの先頭の"<!–"にマイナス記号をもう1コ(計3コ)付け加えるだけ。

<!-- 通常のmxml内のコメントアウト -->
<!--- mxml内のASDocコメント -->

以下の例ではクラス(VBox)へのコメント、クラス内のコンポーネント(Button)へのコメント、Scriptタグ内の通常のASDocコメントがASDocとして出力される(Flex SDK4.0.0.3280で出力確認済)。マイナス記号が繋がってしまってて見づらいけど先頭側は3コある。

<?xml version="1.0" encoding="utf-8"?>
<!—
    ASDoc for the Class
    @see http://opensource.adobe.com/wiki/display/flexsdk/ASDoc+in+MXML
–>
<mx:VBox xmlns="http://ns.adobe.com/mxml/2009" xmlns:mx="library:adobe/flex/halo">
    <!—
        ASDoc for the Button below
    –>
    <mx:Button label="Test" click="onClick(event)"/>

     <Script>
        <![CDATA[
            /**
             * ASDoc for the following public function
             * @param e flash.events.Event
             */
            public function onClick(e:Event):void{
                trace(e);
            }
        ]]>
    </Script>
</mx:VBox>

重要なのはmxタグのネームスペースが変更されている点。

<!– Flex SDK 3 –>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml">

<!– Flex SDK 4 –>
<mx:VBox xmlns="http://ns.adobe.com/mxml/2009" xmlns:mx="library:adobe/flex/halo">

そのため<mx:Metadata>や<mx:Script>の記法も変更されている。

<!– Flex SDK 3 –>
<mx:Metadata>, <mx:Script>

<!– Flex SDK 4 –>
<Metadata>, <Script>

このへんの記法はFlex 4が開発段階なので今後どうなるかわからないが、mxmlでもASDoc出力できるようになるのは開発側としてはうれしい。

[洞窟物語] 血塗られた聖域がヤバイ

Tags:

一周目ノーマルクリアのストーリーで十分堪能できたのだけど、クリア後にいろいろやり残していた隠し要素(とくにカーリー関連)があったので二週目をプレイしている。が、なんかすごい。ライトユーザーでも楽しめる雰囲気が一転、無茶苦茶硬派なゲームに変貌してる。もうカーリーのパンツが云々言ってる場合じゃなくなった。洞窟物語の熱狂的なファンを作ったのはたぶんこの硬派なやり込み部分なんだろうな。

真のエンディングを見るために用意された「血塗られた聖域」というステージ、ここが難易度もさることながら世界観が圧倒的。閉鎖空間特有の息苦しさと後戻りできない絶望的な匂いがぷんぷんする中、これ見よがしに設置されている「地獄へようこそ!」の立て看板の演出。曲も専用のものが用意されていて、これが血塗られた聖域の異質さを際立たせる。アクの強いメロディを重ねているにも関わらず下品にならず、オーバードライブ気味の疾走感にも関わらず安定して聴いていられる不思議な曲調。出だしのフィルターの掛け具合など鳥肌もので、聖域のタイムアタックに没頭させる要因なのではなかろうか。一度でも聖域をプレイした人にはこの気持ちは伝わるはず。

僕は最初のトゲトゲ地帯すらクリアできないというのに。HP初期値縛り(被弾即死亡)なんかでクリアする人とかいる。以下神業プレー。うますぎるので世界観は伝わらないかも。

[洞窟物語]ライフ3プレイ・血塗られた聖域攻略動画 - 動画 - はてなダイアリー
[洞窟物語]血塗られた聖域3分切り - 動画 - はてなダイアリー

← Previous PageNext Page →