帯域幅と処理リソースを節約するため、ランタイムはマイクロフォンがサウンドを送信していないときにそれを検出しようとします。マイクロフォンの動作レベルが、ある一定の期間、無音レベルのしきい値を下回ったままであるとき、ランタイムはオーディオ入力の送信を停止して
activity
イベントを送出します。Speex コーデック(AIR 1.5 で利用可能)を使用する場合は、オーディオデータがアプリケーションから継続的に送信されるように、無音レベルを 0 に設定します。Speex の音声動作検出によって、帯域幅が自動的に軽減されます。
Microphone クラスの 3 つのプロパティを使用して、動作の検出を監視および制御します。
-
読み取り専用の
activityLevel
プロパティは、マイクロフォンが検出しているサウンドの大きさを、0 ~ 100 のスケールで示します。
-
silenceLevel
プロパティは、マイクロフォンをアクティブにして
activity
イベントを送出するために必要なサウンドの大きさを指定します。
silenceLevel
プロパティも 0 ~ 100 のスケールを使用し、デフォルト値は 10 です。
-
silenceTimeout
プロパティは、
activity
イベントを送出するしきい値となる、動作レベルが無音レベルを下回る時間の長さをミリ秒単位の数値で示します。
silenceTimeout
のデフォルト値は 2000 です。
Microphone.silenceLevel
プロパティと
Microphone.silenceTimeout
プロパティはどちらも読み取り専用ですが、
Microphone.setSilenceLevel()
メソッドを使用して値を変更できます。
場合によっては、新しい動作が検出されたときにマイクロフォンをアクティブにする処理過程で短い遅延が発生する可能性があります。常にマイクロフォンをアクティブにしておくことで、アクティブ化に伴うこのような遅延を除去できます。そのためには、
Microphone.setSilenceLevel()
メソッドを、
silenceLevel
パラメーターに 0 を指定して呼び出します。これにより、サウンドが検出されなくても、マイクロフォンはアクティブな状態でオーディオデータの収集を継続します。逆に、
silenceLevel
パラメーターを 100 に設定すると、マイクロフォンがアクティブにならなくなります。
次の例では、マイクロフォンに関する情報を表示し、Microphone オブジェクトが送出する
activity
イベントと
status
イベントを報告します。
var deviceArray = air.Microphone.names;
air.trace("Available sound input devices:");
for (i = 0; i < deviceArray.length; i++)
{
air.trace(" " + deviceArray[i]);
}
var mic = air.Microphone.getMicrophone();
mic.gain = 60;
mic.rate = 11;
mic.setUseEchoSuppression(true);
mic.setLoopBack(true);
mic.setSilenceLevel(5, 1000);
mic.addEventListener(air.ActivityEvent.ACTIVITY, this.onMicActivity);
var micDetails = "Sound input device name: " + mic.name + '\n';
micDetails += "Gain: " + mic.gain + '\n';
micDetails += "Rate: " + mic.rate + " kHz" + '\n';
micDetails += "Muted: " + mic.muted + '\n';
micDetails += "Silence level: " + mic.silenceLevel + '\n';
micDetails += "Silence timeout: " + mic.silenceTimeout + '\n';
micDetails += "Echo suppression: " + mic.useEchoSuppression + '\n';
air.trace(micDetails);
function onMicActivity(event)
{
air.trace("activating=" + event.activating + ", activityLevel=" +
mic.activityLevel);
}
前の例を実行し、システムのマイクロフォンに向かって話すか音を立ててみて、コンソールに表示されるトレースステートメントを確認してください。