Flex3で、マイクの音量に応じてネギを振る初音ミクを作りました
まずはじめに画像が無断借用です(゚Д゚ )。すみません。
気に入って保存してたんですが、どこのサイトだったか判らなくなり、画像検索しても見つからないので、
勝手に拝借しております。
初音ミク名人のネギテクニックといった画像でした。
こちらからFlashが動きます。
http://misakirara.s296.xrea.com/flex/flex003.html
Flex3とActionScript3.0でマイクを使ったアプリを作るべく研究中なのですが、
プロパティを見ているとマイク音量を調べるactivityLevelというのがあり、
これを使えば「ダンシングフラワー」が作れるのではないか? と思ったのが発端です(・∀・)
swfはこちらからダウンロードできます。
http://misakirara.s296.xrea.com/flex/MicrophoneEx.swf
flashが起動すると、「マイクから音声を送っていいですか?」ダイアログが出ますので、許可をすると
動きます。
会社のヘッドセットのマイクは感度がいいので、
「遠くの席で電話がかかってきたり」「会話を始める」と初音ミクが反応します(w
同じ島の人で、しょっちゅう大きなくしゃみをする人がいるんですが、
その人がくしゃみをすると音量ゲージが振り切れます(w
「イデのパワー発動!キタ━━━━(゚∀゚)━━━━ッ!!? 」
と仕事中に、ニヤニヤしています(w
他にもマイクの側で、ボールペンで机をたたくと、音量に応じてネギを振るので、
なかなか面白いと思います。
actionScript自体を仕事として使ったことはなく(現在はC言語の開発の仕事をしています)
完全に我流で、お見せできるようなソースではないのですが、
日頃ネット情報にはお世話になっておりますので、なにかの参考になればと張っておきます。
例によって、こちらのサンプルを参考にしています。
http://www.saturn.dti.ne.jp/~npaka/flash/index.html
package { import flash.display.*; import flash.events.*; import flash.media.*; import flash.system.*; import flash.text.*; import flash.utils.Timer; import flash.geom.*; //マイクを使用する public class MicrophoneEx extends Sprite { //リソース [Embed(source='miku00.png')] private var Image0:Class; [Embed(source='miku01.png')] private var Image1:Class; [Embed(source='miku02.png')] private var Image2:Class; [Embed(source='miku03.png')] private var Image3:Class; [Embed(source='bar.png')] private var ImageBar:Class; public var label:TextField; public var mic:Microphone; public var temp:Number; public var image0:Bitmap; public var image1:Bitmap; public var image2:Bitmap; public var image3:Bitmap; public var imageBar:Bitmap; public var timer:Timer; public var togle:Number; //コンストラクタ public function MicrophoneEx() { graphics.beginFill(0xF0F0FF); graphics.moveTo(10, 60); graphics.lineTo(10, 60+120); graphics.lineTo(90, 60+120); graphics.lineTo(90, 60); graphics.endFill(); //リソース image0=new Image0() as Bitmap; image0.x=100; //X座標 image0.y=70; //Y座標 stage.addChild(image0);//追加 image1=new Image1() as Bitmap; image1.x=100; //X座標 image1.y=70; //Y座標 stage.addChild(image1);//追加 image2=new Image2() as Bitmap; image2.x=100; //X座標 image2.y=70; //Y座標 stage.addChild(image2);//追加 image3=new Image3() as Bitmap; image3.x=100; //X座標 image3.y=70; //Y座標 stage.addChild(image3);//追加 imageBar=new ImageBar() as Bitmap; imageBar.x=35; //X座標 imageBar.y=60; //Y座標 stage.addChild(imageBar);//追加 //ラベルの追加 label=makeLabel("Hello World!"); label.x=20; //X座標 label.y=60; //Y座標 stage.addChild(label);//追加 //マイクの生成 mic=Microphone.getMicrophone(); if (mic!=null) { //ローカルスピーカーへのマイク音送信 mic.setLoopBack(true); //エコー抑制機能の使用 mic.setUseEchoSuppression(true); togle=0; //タイマーの追加 timer=new Timer(50,0); timer.addEventListener(TimerEvent.TIMER,onTick); timer.start(); } } //タイマーリスナー public function onTick(event:TimerEvent):void { var temp:Number = mic.activityLevel; var temp2:Number; label.text="0"+temp; image0.y=70-temp; image1.y=70-temp; image2.y=70-temp; image3.y=70-temp; imageBar.height = temp*2; if(imageBar.height >= 200) { imageBar.height = 200; } if(imageBar.height <= 0 ) { imageBar.height = 0; } if( temp<5 ) { genAnime(2); } else if( temp<20 ) { if( (timer.currentCount%3) == 0 ) genAnime(0); } else if( temp<40 ) { if( (timer.currentCount%2) == 0 ) genAnime(0); } else if( temp<60 ) { if( (timer.currentCount%1) == 0 ) genAnime(0); } else { genAnime(1); } } private function genAnime(mode:Number):void { if(mode==0) { image0.visible=false; image3.visible=false; } if(mode==1) { image0.visible=false; image1.visible=false; image2.visible=false; image3.visible=true; return; } if(mode==2) { image0.visible=true; image1.visible=false; image2.visible=false; image3.visible=false; return; } if( togle==0 ) togle=1; else if( togle==1 ) togle=0; if( togle == 0 ) { image1.visible=true; image2.visible=false; } else { image1.visible=false; image2.visible=true; } } //ラベルの生成 private function makeLabel(text:String):TextField { //ラベルの生成 var label:TextField=new TextField(); label.text =text; //テキスト label.autoSize =TextFieldAutoSize.LEFT;//オートサイズ label.selectable=false; //選択不可 //書式の指定 var format:TextFormat=new TextFormat(); format.font ="_等幅"; //フォント名 format.size =20; //サイズ format.color =0xFF0000;//色 format.bold =true; //ボールド // format.italic =true; //イタリック // format.underline=true; //アンダーライン label.setTextFormat(format); return label; } } }
画像などリソースはswfと同じフォルダに入ってますので、コンパイルするときは個別にダウンロードしておいて下さい。
Flex3SDKをダウンロードしてパスを通しておけば、
mxmlc 保存したソース名
でコンパイルすればswfができます。
らき☆すたFlashは、mtascとかつかってコマンドラインで作りましたが、リソースの埋め込みとか、すごく簡単になりました(゚Д゚ )ウマー
http://www.saturn.dti.ne.jp/~npaka/flash/apollo10/index.html
ここを参考に、
AdobeのAIRもダウンロードして、AIRアプリとしてもコンパイルしてみたのですが、
マイクが動くときと動かないときがあって、よく原因が分かりませんでした。
ただ、インストーラーも作ってくれて、透過Windowも作れるようで、非常に面白い開発環境と思いました。
はてなダイアリーにFLashがはれるらしいテスト
あ、張れた! 張れた!
これなら、将棋の棋譜プレイヤーをFlashで作れば張れるじゃん! やったー!
http://d.hatena.ne.jp/nitoyon/20070829/embed_flash_on_hatena_diary
こちらに張り方が書いてあります。
Googleガジェットを経由しているようです。すごく便利ですね! ありがとう!