[Flash] スペースチャンネル5
Tags: FlashPlayer10
![[Flash] スペースチャンネル5](http://boreal-kiss.com/flash/ex/48/sc5.png)
» [Flash] スペースチャンネル5 (SWF) (要Flash Player 10)
» source
Graphics.drawTriangles()とテクスチャマッピングスタディ。元アイデアはFlash 10, Part 4 of testing drawTriangles, Old-school Tunnels « Pixeleroより。簡単に説明すると円錐っぽい形状の多面体の底(とんがりコーンの底)から内側を見ている状態で、多面体の各頂点をxy座標方向に曲線的に動作させつつ内側に貼られたテクスチャのUVT座標を刻々と変化させているだけ。これだけで自分がトンネル内を進んでいるように見えるから驚き。”old-school”と題されているけど古典的な手法なのかな?note.x | [Away3D] Tunnelでも同じようなムービーがある。
flash.geom.Utils3Dクラスを初めて使ったが、これのおかげで3D座標計算部分がソース内に入り乱れなくなったので良い感じ。なお本家のソースは死ぬほど見づらく常人には解読不能なので、スクラッチから書き直した。コメントなどあんまり書いていないけど10倍は読みやすいと自負している。
[Flash] パワースペクトル
Tags: FlashPlayer10, Flex
![[Flash] パワースペクトル](http://boreal-kiss.com/flash/ex/46/power.png)
» [Flash] パワースペクトル (SWF) (要Flash Player 10、音注意)
» ソースコード
Flash Player 10から音を生成できるようになったのでそのテスト。単周期のサイン波を生成してそのパワースペクトルをSoundMixer.computeSpectrum()で表示。ダイナミックサウンドについては情報がまちまちなので完全には理解できていない。が、Saqoosha.net :: SoundMixer.computeSpectrum の FFT モードの周波数帯に書いてあるように0-11kHzの範囲でスペクトルが表示されているので結果はおかしくない、と思う。スペクトルに幅がでちゃってるのは生成されたサウンドに問題があるのかフーリエ変換の精度に問題あるのか不明。
[Flash] サウンドスペクトラム
Tags: FlashPlayer10
![[Flash] サウンドスペクトラム](http://boreal-kiss.com/flash/ex/44/spectrum.png)
» [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)
» ソースコード
FileReferenceオブジェクトと変数のスコープの関係
Tags: FlashPlayer10, Flex
これは知らないとはまる。Filereferenceオブジェクトへの参照をローカル変数の受け渡しで扱っている場合注意が必要。ローカル変数のみを使用する場合ロードが中断される可能性がある。Flash Player 10 (Astro)のAPIはまだ日本語になっていないようだったので以下を引用するが同じことがFilereference.load()にもあてはまる。
FileReference オブジェクトがスコープ外に移動した場合、そのオブジェクトに対して完了していないアップロードまたはダウンロードは、スコープから離れた時点でキャンセルされます。アップロードまたはダウンロードの続行を期待できる限りは、FileReference オブジェクトがスコープ内にあることを確認してください。
以下に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>
Dot3D for Flash Player 10
Tags: FlashPlayer10

AIRのFileStream.writeBytes()がAstro(Gumbo)のFileReference.save()にかわっただけなので移植は超簡単。問題はこれがFlash Player 10正式版になっても稼働するかどうかだ。(昔作ったやつは軒並み死亡)