Flash Player 10.3 及び AIR 2.7 から、マイク入力のアコースティックエコーをキャンセルする機能 (AEC) が追加されました。
AEC は、デスクトップ環境専用の機能です。デバイスには、通常ハードウェアに同等の機能が装備されているため (電話として使えるよう)、AEC の必要性は低いという判断のようです。デバイスでは CPU 負荷の高い処理は避けたいという意図もあったかもしれません。
拡張された Microphone クラス
AEC を実現するため、Flash Player & AIR には Microphone クラスを拡張した AEC 機能付きの Microphone が新しく提供されます。これに伴い Microphone クラスにはメソッドと属性が 1 つずつ追加されます。
- getEnhancedMicrophone(index:int = -1): Microphone [static]
AEC機能付きのMicrophoneオブジェクトを返す。一度に使用できるオブジェクトは一つだけ - enhancedOptions:MicrophoneEnhancedOptions
拡張されたマイクの機能を制御するためのオプションを指定
一度に使用できる Microphone のインスタンスは 1 つです。あるインスタンスを使用中に getEnhancedMicrophone() を呼ぶと、そのインスタンスは動作を停止し、Microphone.Unavailable イベントを発行します。
拡張された Microphone オブジェクトの構成を指定するために、新しく MicrophoneEnhancedOptions クラスが導入されました。基本的な使い方は、MicrophoneEnhancedOptions のインスタンスに必要な構成を定義して、Microphone.enhancedOptions 属性に設定する、です。
下は、その簡単なサンプルです。
// MicrophoneEnhancedOptions インスタンスの生成 var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions(); // 音声モードの指定 options.mode = MicrophoneEnhancedMode.FULL_DUPLEX; // 拡張 Microphone のインスタンス取得 var enhancedMicrophone:Microphone = Microphone.getEnhancedMicrophone(); // Microphone インスタンスにオプションを設定 enhancedMicrophone.enhancedOptions = options;
AEC の音声モード指定
上の例のように、MicrophoneEnhancedOptions.mode 属性には音声モードを指定します。ここで指定可能な値は、MicrophoneEnhancedMode クラスに定義されています。
- MicrophoneEnhancedMode.FULL_DUPLEX:
全二重モードで AEC 処理を行う。双方が同時に話すことができる。高品質の (通常組み込みの) マイクとスピーカーが必要。CPU 負荷が最も高いモード - MicrophoneEnhancedMode.HALF_DULEX:
半二重モードで AEC 処理を行う。一時点で話すことができるのはどちらか片方のみ。低品質のマイクとスピーカー向け。CPU 負荷は低め - MicrophoneEnhnacedMode.HEADSET:
最低限の AEC 処理のみ行う。ヘッドセット使用時のエコーを押さえたいケースを想定。CPU 負荷は更に低い
- MicrophoneEnhancedMode.SPEAKER_MUTE:
AEC 処理を行う代わりにスピーカー音声をミュートする。他の拡張機能は使用できる - MicrophoneEnhancedMode.OFF:
全ての拡張機能を使用しない
MicrophoneEnhancedOptions.mode 属性のデフォルト値は、USB デバイスの場合のみ HALF_DULEX、その他は FULL_DUPLEX です。(USB デバイスでは FULL_DUPLEX が使えないようです)
その他の拡張機能
拡張された Microphone では AEC 以外にも、ノイズ抑制、発声の検知、音声レベルの自動調整といった機能が利用可能です。mode = MicrophoneEnhancedMode.OFF を指定しない限り利用できます。
AEC 以外の拡張機能の構成も MicrophoneEnhancedOptions オブジェクトを使って指定します。MicrophoneEnhancedOptions には mode 以外に以下の属性があります。
- autoGain : Boolean
自動ゲインコントロールを行う。デフォルトは off - echoPath : int
エコーキャンセルに使うパスの長さを指定 (単位はミリ秒)。長いほど品質は良くなるが計算が複雑になる。デフォルトは 128。指定可能な他の値は 256 がある - isVoiceDetected : int [読み取りのみ]
マイク入力から音声が検知されたかを示す - nonLinearProcessing : Boolean
非線形の処理を行う。デフォルトは on。特にスピーチ配信時の残留エコーの抑制に効果。音楽ソース配信時は off が推奨
パフォーマンス上、Microphone.silenceLevel を 0 にして使用することが推奨されています。これによりマイクは音声を流し続けるようになりますが、Speex コーデックが無音状態を検知すると自動的にビットレートが調整されます。