自動でネギ振り

サウンドのスペクトラム(周波数ごとの大きさ)がFlexでは簡単に取れるので、それでなにかしらのアクションができるだろうってことで、はちゅねにネギを振らせてみました。
http://moeten.info/flex/20080405_mikuNegi/bin-release/main.html

今回ちょっとポイントなのが、回転エフェクト中に回転を呼ばれたときに無視する方法

<!--ネギ振りエフェクト-->
<mx:Sequence id="myRotate" effectStart="{nowPlay=true}" effectEnd="{nowPlay=false}"  target="{negi}">
    <mx:Pause duration="10"/>
    <mx:Rotate easingFunction="Back.easeOut" originX="{negi.width-5}" originY="5" duration="300"
      angleFrom="10" angleTo="50"/>
    <mx:Pause duration="10"/>
</mx:Sequence>

エフェクトがスタートしたらフラグを立てておいて、あとはActionScript側でif文での判定をする。

if( ! nowPlay ){
    myRotate.play();
}

こうしないと常に回転エフェクトが呼び出されて、ネギが吹っ飛んで行きます。
あと、もしかしたらエフェクトのプロパティのenableとかでエフェクト中の呼び出しを制御できるかも?
全部のソースはこちら

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    creationComplete="init()" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #619F94]" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.effects.easing.*;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
//初期化関数
private function init():void{
    this.addEventListener(Event.ENTER_FRAME , soundGraphe );
}
//サウンドヒストグラム作成
private var nowPlay:Boolean;
private var bytes:ByteArray = new ByteArray();
private var spectrum:Array  = new Array(256);
public function soundGraphe(e:Event):void{
    SoundMixer.computeSpectrum(bytes, true, 0);
    //ヒストグラム用変数作成
    for (var i:int = 0; i < 256; ++i) {
        spectrum[i] = bytes.readFloat();
    }
    var linedata:ArrayCollection = new ArrayCollection();
    var values:Array = new Array();
    for (var x:int = 0; x < 256; ++x) {
        linedata.addItem({
            "color" : x ,
            "sum":  spectrum[x] / 300 }
            );
        //ネギ振るか判定
        if( spectrum[x] != 0 && x >= 100 ){
            if( ! nowPlay ){
                myRotate.play();
            }
        }
    }
    linedata.addItem({"color":0,"sum":0.008});
    //チャートに代入
    spec.dataProvider = linedata;
}
]]>
</mx:Script>
<!--ネギ振りエフェクト-->
<mx:Sequence id="myRotate" effectStart="{nowPlay=true}" effectEnd="{nowPlay=false}"  target="{negi}">
    <mx:Pause duration="10"/>
    <mx:Rotate easingFunction="Back.easeOut" originX="{negi.width-5}" originY="5" duration="300"
      angleFrom="10" angleTo="50"/>
    <mx:Pause duration="10"/>
</mx:Sequence>
<!--コンポーネント-->
<mx:VideoDisplay id="myFlv" x="10" y="10" width="403" height="287" source="miku.flv" visible="false"/>
<mx:Image id="body" x="10" y="10" width="414" height="287" source="body.png"/>
<mx:Image id="negi" x="133" y="129" width="157" height="115" source="negi.png"/>
<!--ヒストグラム-->
<mx:ColumnChart x="10" y="305" id="spec"  height="191"  width="380">
    <mx:series>
        <mx:ColumnSeries xField="color" yField="sum" displayName="Gold"/>
    </mx:series>
</mx:ColumnChart>
</mx:Application>