2007年5月 3日 (木)

[Flex2][Flash][AS3]波形取得でビジュアライザもどき

Flex2でサウンドの波形情報を使ったビジュアライザっぽいのを作成。

こちら。
Sound_test
















波形の中の3箇所の帯域の情報を取得して3種類の色で表現。
一応、低い音、中くらいの音、高い音って感じで分けてるけど微妙ではある。。
曲によって拾う帯域を変更すると精度はよくなるかと。
AfterEffectsのプラグイン「SOUND KEYS」(Trapcode)みたいな感覚だな。

音は4種類。ネットで適当にフリー素材を探してきました。
マウスの位置で4つの音のボリュームが変化します。(角が一番大きい)
クリックで色とブラー量(1or2)をランダムで変更。
基本的に気持ち悪い感じになる。。
あとマウスの位置(左右)でBitmapを重ねるときの回転量が微妙に変わります。

元々Flash9 PublicAlphaで作ったのをFlex2に移行したもの。
Flashのほうがエラーとか警告がゆるいのでFlex2に持っていっていろいろとエラー、警告が出た。
そのへん修正してFlex2で動くようにしました。
ソースを見てもらえれば分かるとおり、Flex2の機能は別に使ってなくて基本AS3です。
なのでFLASH9でもほぼそのままで使えるかと。

プログラムの知識はそんな無いので書き方とかはなんかおかしいと思う。
でも動けばいいので気にしない。

それにしてもByteArrayがよく分からん。
forループ内で「a = ba.readFloat();」としてるけど、なんで「i」とか渡してないのに順番に値を取得できるんだろう。。
readFloatをヘルプで見てみても分からん。。

ソースは右クリックで見れます。

波形の取得は意味分からないけど簡単なので、後はそれをどう使うかかな。
いろいろとおもしろいのが出てきそうだなあ。俺もなんかちゃんと考えよう。

| | コメント (0) | トラックバック (0)

2007年5月 2日 (水)

[Flex2]stageの参照

Flash9 Public Alphaでは気にしないでやってたけど、Flash9で作ったやつをFlex2に移行していたらstageの参照のとこでエラーに。。なぜか「null」になってしまう。
fladdictさんやniumさんでも前にそういう書き込みがあったけど、読んでも意味分からず。。

で、いろいろ試した結果、stageはすぐに参照できないっぽいというのが分かった。
↓を実行すると最初「null」が2回出てその後は[object Stage]となる。
なのでとりあえず最初にstage取得できるまでENTER FRAMEでチェックして、取得できたらいろいろ始めればいいのかと。。
こんなんダメだよね。。ちゃんとした方法あるよね。。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application styleName="plain" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="700" height="700" color="#ff0000" initialize="initApp()">
<mx:Script>
    <![CDATA[
        private function initApp():void {
            this.addEventListener(Event.ENTER_FRAME,ef);
        }
        private function ef(event:Event):void {
            trace(stage);
        }
    ]]>
</mx:Script>
</mx:Application>

でも、これでTweenerも大丈夫!

| | コメント (0) | トラックバック (0)

2007年4月18日 (水)

[Flex2]入門してみた。

Flex2をちゃんとやってみようかと。
最近Flash9 Public Alphaで作ってたのをFlex2で動かしてみるのがとりあえずの目標。

asファイルをコピーして動かしてみたところエラーや警告がたくさん。。
意味不明な警告のとこはコメントアウト、警告はだいたい型宣言が無い警告なので型宣言をしてあげただけ。

で、エラーと警告は無くなったけど何も表示されない・・・。
基礎とかやってなかったからね。まあしょうがない。
おそらくaddChildのあたりがダメそうな気がしたので画像を読み込んで表示されるだけのシンプルなものを作ってみる。

読み込み自体はすぐできたけど、addChildするとエラーになる。
エラー内容:「TypeError: Error #1034: 強制型変換に失敗しました。flash.display::Loader@3695ee1 を mx.core.IUIComponent に変換できません。」

「mx.core.IUIComponent」を調べてみたらこれはFlexのコンテナらしい。
てことはこれに入れられるように変換しないといけないんだね。
ヘルプを見てみたら、
「mx.core.UIComponent のサブクラスでない場合は、そのオブジェクトをコンテナに関連付ける前に UIComponent でラップする必要があります。」
って書いてあって、サンプルコードもあった。

それでやってみたらちゃんと画像表示された。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application styleName="plain" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()">
<mx:Script>
    <![CDATA[
    import flash.display.Loader;
    import flash.net.URLRequest;
    import mx.core.UIComponent;
    private function initApp():void {
        var <a href="String">url:String</a> = "aa.jpg";
        var loader:Loader = new Loader();
        var request:URLRequest = new URLRequest(url);
        loader.load(request);
        var ui:UIComponent = new UIComponent();
        ui.addChild(loader);
        addChild(ui);
    }
    ]]>
</mx:Script>
</mx:Application>

かなりの初心者ぶりだ。。
でもこれができたらもういろいろできるはず!
CS3が来るまではがんばろー。

| | コメント (0) | トラックバック (0)