問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:6 / 状態:解決済み / No:103 / ATOM
1 名前:悠希 日付:2012/12/17(月)20:00:20 ID:9nNs5A2PkFc7
こんばんわ。
いつも参考にさせてもらっています。
今回わからない事が有り質問させてもらいます。
宜しくお願いします。
as2.0です。
アクティブレベルを取得し、フレーム移行できるようにはできましたが、
どうしても、音声を取得し続けなければ次フレームへと進行してくれません。
現在のスクリプトがこちらです。


// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);

// Microphone オブジェクトを取得
var mic_obj = Microphone.get();

// オーディオソースを関連付ける
mc.attachAudio(mic_obj);

// 無音状態とみなすボリュームのしきい値を設定
mic_obj.setSilenceLevel(15,50);

// エコー抑制を設定する
mic_obj.setUseEchoSuppression(false);

// エコー抑制設定を取得する
trace(mic_obj.useEchoSuppression);

// アクティビティを検出する
onEnterFrame = function(){

trace("アクティビティレベル:" + mic_obj.activityLevel);

if (mic_obj.activityLevel >= 40){ 
      gotoAndPlay(10);
}else if (mic_obj.activityLevel <=10){ 
  gotoAndPlay(20);
}else{
      gotoAndPlay(30);
}

};


アクティビティレベルが40以上で10フレームに飛び、音声を
取得し続けなくても11フレーム、12フレーム〜へとどんどんと再生させれるように
できないでしょうか?

宜しくお願いします。
2 日付:2012/12/17(月)21:58:36 ID:uqGvQ4UrzKin
>どうしても、音声を取得し続けなければ次フレームへと進行してくれません。

このソースでは 
10、20、30フレーム目のどこかで停止し続けるような動作をすると思うのですが
どういう事でしょうか?
3 名前:悠希 日付:2012/12/17(月)22:16:15 ID:9nNs5A2PkFc7 File:[ 0.zip ]
音量を取得しない時は、20フレーム目にいるのですが、それ以外の
場合、10フレーム目、30フレーム目に飛び、数フレームある、ムービ
ークリップの1フレーム目のみ再生され、また20フレーム目にすぐ戻って
しまうので、一回音を取得してから、音量が変わってもムービー再生が途切れ
て20フレーム目に飛ばないようにしたいです。

CS4で、as2.0のファイルをアップロードさせていただきたいと思います。
宜しくお願いします。
4 日付:2012/12/17(月)22:54:03 ID:uqGvQ4UrzKin
なるほど。
10、20、30フレーム目に、さらにムービークリップが配置されるわけですね。


ソースでは、onEnterFrame イベントハンドラを使われています。
このイベントは、関数をセットすると、その関数を毎フレーム実行してくれます。

gotoAndPlay(20) は、毎フレーム実行する必要は無いと思います。1回だけ実行するようにします。
29フレーム目に、「20フレーム目に戻る」スクリプトを追加して、20 ~ 29 フレームの間をループ再生させるなどして、
音量チェックの待機状態とします。


イベントハンドラを無効化したい場合は、onEnterFrame に null などの値をセットします。

今回は、10 より大きい音量を取得できた時点から、毎フレーム音量をチェックする必要がなくなるので
このタイミングで、onEnterFrame に null をセットするといいのではないでしょうか。

───────────────────────────

// 音量をチェックするフレームに移動
gotoAndPlay(20);

// 毎フレーム実行されるイベントに関数を登録
onEnterFrame = function(){

trace("アクティビティレベル:" + mic_obj.activityLevel);

if (mic_obj.activityLevel >= 40){

// 毎フレーム実行されるイベントを無効化
onEnterFrame = null;

gotoAndPlay(10);

}else if (mic_obj.activityLevel > 10){ 

// 毎フレーム実行されるイベントを無効化
onEnterFrame = null;

gotoAndPlay(30);
}

};
5 名前:悠希 日付:2012/12/17(月)23:40:38 ID:9nNs5A2PkFc7
>>4
回答ありがとうございます。
やってみて解決できました。
本当にありがとうございました。
6 名前:状態変更 日付:2012/12/17(月)23:40:50 ID:9nNs5A2PkFc7
この質問の状態を『解決』に変更しました。
このスレッドについて
質問の状態 :
解決済み
投稿開始日 :
2012/12/17(月)20:00:20
投稿終了日 :
2012/12/24(月)23:42:54
投稿者 :
悠希
レス総数 :
6
スレッド番号 :
103
MondoCollectionSystem ver.0x00020000 by Hakuhin