はいどうも~。
やっと花粉によるマスク装着の束縛から解放されたエンジニアの吉田です。

2011/5/12にFlash Player 10.3が正式リリースされました。

新機能については上条さんのブログを参照いただくこととして、
Red5ユーザー会としてはとてもハッピーな機能「Acoustic Echo Cancellation」がついに搭載されたのです。

なので今回は「Acoustic Echo Cancellation」を試してみたい衝動に駆られたので早速試してみます。

「Acoustic Echo Cancellation」ってなんじゃらほいって感じですが、
簡単に言うとエコーキャンセラ機能のことですね。(以降、AECと略します。)

今まで、Flashベースの電子会議システムでは、エコーキャンセラ機能がなかったため、
スピーカから出た音を近くのマイクが拾ってしまい、その音が戻ってしまう現象が発生していました。

これを回避するには、エコーキャンセラ付のマイクを使用するか、ヘッドセットを使用する
しかなかったのですが、その必要性からもついに開放されるということですね!素敵です。


ということで、どれだけ使えるのか確認してみるサンプルを作成してみます。



今回は開発環境としてAdobe Flash Builder 4.0を使用します。
また、Flash Player 10.3が必要ですので、アップデートが必要です。

Adobe Flash Player 10.3: http://get.adobe.com/jp/flashplayer/

また、Flash Player10.3の機能を使用してFlashアプリケーションを開発するには
それに対応している最新の playerglobal.swc が必要になります。

Flash Player 10.3が正式リリースされたのですが、正式リリース版の playerglobal.swc が
見当たらなかったため、今回はRC1の playerglobal.swc を使ってみる事にします。
Flash Player 10.3 playerglobal.swc:
http://download.macromedia.com/pub/labs/flashplatformruntimes/flashplayer10-3/flashplayer10-3_rc1_playerglobal_042011.swc

※懐かしきmacromediaさんのドメインなところがとても心を惹かれますね!!


で、これをFlex SDK配下に格納します。

C:\Program Files (x86)\Adobe\Adobe Flash Builder 4\sdks\4.0.0\frameworks\libs\player\10.3\playerglobal.swc


肝心のAECの使い方やらの詳細については、またまた上条さんのブログに詳しいので、
他力本願な性格の私としては、そちらを参照いただくということで割愛します。



Flash Player 10.3に対応しているMicrophoneクラスのAPIはこのあたりです。
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Microphone.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/MicrophoneEnhancedMode.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/MicrophoneEnhancedOptions.html

MicrophoneクラスにgetEnhancedMicrophone()メソッドが追加されていて、
MicrophoneEnhancedOptionsクラスとMicrophoneEnhancedModeクラスも追加されています。


具体的な実装方法はこちらのブログが詳しい感じなので、これを参考にしてみました。

Implementing Acoustic Echo Suppression in Flash/Flex applications
http://mrbinitie.blogspot.com/2011/03/implementing-acoustic-echo-suppression.html


Flash Builder 4.0でテストアプリケーションを作成してみます。

「ファイル」⇒「新規」⇒「Flexプロジェクト」を選択し、プロジェクト名は「aec_test」とします。
プロジェクトを作成したら、パッケージエクスプローラからプロジェクトを右クリックし「プロパティ」を選択します。

「Flexコンパイラー」メニューを選択し、「Adobe Flash Playerオプション」で
「特定のバージョンを使用」を選び 「10」.「3」.「0」 となるように設定します。

また、「追加コンパイラー引数」に「-target-player=12」を追記します。

「-target-player=12」を設定すると、Flexが playerglobal.swc を下記の
フォルダから探そうとするため、ファイルがないと怒られてしまいます。

C:\Program Files (x86)\Adobe\Adobe Flash Builder 4\sdks\4.0.0\frameworks\libs\player\12.0\playerglobal.swc

なので、仕方なく 12.0 フォルダを作成して 10.3 フォルダの中身と同じ playerglobal.swc を置いてあげます。

※この回避策は以下のフォーラムを参考にさせて頂きました。
Adobe Forums: Error #1006: getEnhancedMicrophone is...
http://forums.adobe.com/thread/801491


で、出来上がったのがこんなアプリです。

aectest.png


こちらから実際に試すことができます。

AさんとBさんがMyNameとFriendNameにお互いの名前を入力してconnectすると
お話ができる簡単なアプリケーションです(サーバサイドはRed5を使っています)。

左側のレベルメータは自分のマイクの音量、右側のレベルメータは相手のマイクの音量です。


で、期待を胸にエコーキャンセラ機能を試してみようとしたのですが、
なんだかマイクが期待通りに動いてくれません。
(マイクデバイスを取得した直後に、マイクの音量が拾えなくなってしまうのです)

動作確認環境は、
  Windows 7, Firefox 3.6, Flash Player 10.3.181.14
だったのですが、
  Fedora Core 13, Firefox 3.6, Flash Player 10.3.181.14
の環境だと上手く動いてくれるようです。。

Windows環境上のFlash Playerの不具合かなんかなのでしょうか。。

以下のフォーラムでも「Windows XPで動かないんだけどOSXだと動いたわー」
と言っている人がいるので、しばらく様子をみてからAECに再挑戦してみたいと思います。
http://forums.adobe.com/thread/448445


というわけで、今回は残念な検証結果となったブログでした。
(AECがWindows環境でちゃんと動かせた方がいらた教えてください・・・)

デワデワ。