CBCNET掲載サンプルのソースとMicrophoneクラス雑感

CBCNET の第2回コラムで紹介したマイクを使ったサンプル3点のソースを置いておきます。

その他、AS3 で Microphone クラスを使うにあたって僕がつまづいた点をメモしておきます。

サンプルファイルのダウンロードは以下から。

  • microphone_cbc2.zip(28KB)…AS3でマイクを使うサンプル。コラムの上2つのサンプルが収録されてます。
  • ExcitingMic.zip(140KB)…FlexBuilderで作ったプロジェクトになっています。Fisixで動いているサンプルにあたります。

Flex プロジェクトとはなんぞや?的な質問は答えかねます。他のブログをご参考に頑張ってください。

自分で改めてソースを見直したりしてません。「公開するする詐欺」になる前にとりあえず公開したということでご容赦ください。お時間のある方はぜひ LineRider を超える音ゲーを作ってみてください。

Microphone クラス雑感

ノートPCのマイクを使った場合のハウリング(音を取得しつつ出力すると共鳴して音が暴走する)を抑える方法が分からずひと苦労しました。苦闘の手順を書くと:

  1. 本体から音を出さなきゃいいんじゃね?と思って、サウンド出力を無効化する「mic.setLoopBack(false);」してみたら、マイクの取得自体をしなくなってしまった(設定パネルが表示されないということです)。どうも getMicriphone() だけでは「今からこのPCではマイクを使うのよ!」と認識してくれないらしい。
  2. O塚さんに、NetConnection, NetStream を使うことで「マイクを使う宣言」ができるそうなので、setLoopBack(false)できるとのこと。でも今回のサンプルはネットに繋がる必要がないので ns アプローチは諦める。(ns って null 設定して擬似的に繋いでるようなフェイクをかけれるのかどうかは未調査)
  3. mic.setSilenceLevel(100, 1000); で解決。setSilenceLevelは第1引数の音量以下は無音として認識しますよ〜という設定。最大値100を指定することで「ありとあらゆる音をナシとして扱ってくれる」不感症マイク設定が可能。第2引数はとりあえず今回は関係ない。これで解決。ちなみにジョネレーターで画面をキャプチャするタイミングも Camera クラスの setMotionLevel で「一定の動き以下の時キャプチャ」っていう設定をしています。世のスゴイ人はもっと精度のいいものを自作されてますが。。
    無音として認識するので、出力へのフィードバックはしないけど、activityLevelプロパティとしてはきちんと取得できるということです。

ということでハウリングは解決。
もう一個つまったのは、AS3でマイクを使ったサンプルを Mac, FireFox で開き、タブでも閉じるボタンでもいいのでウィンドウを閉じようとすると FireFox 自体が強制終了する現象に遭遇。これは未解決。そんなに複雑なコードでもないし、FlashPlayer か FireFox のバグかなぁと責任転嫁のままコラム公開中。

最近メモ書きばかりですいません。

このエントリーをはてなブックマークに追加
はてなブックマーク - CBCNET掲載サンプルのソースとMicrophoneクラス雑感

Comments:3

mio 08-10-09 (木) 15:09

音量(activityLevel)が100になると、ハウリングしてしまいました。

mic.setSilenceLevel(100);
だと、
activityLevel が 100のときに、マイクがアクティブになってしまうようです。

ですので、
setSilenceLevel(101);
としたいところですが、
できませんでした。

tera 08-10-09 (木) 15:49

>mio様
ご報告コメントありがとうございます!
そうなのですね。当時の記憶がすでにあやふやなのですが、どうやら完全に見落としておりました。すいません。

ここで作りかけていたマイクで道を描くゲーム、個人的には面白くできそうな予感がしているので、時間ができたらそのあたりの調査もしつつ勉強していこうとは思っています。。
今後ともどうぞよろしくお願いいたします。

mio 08-10-14 (火) 21:50

解決方法が思いついたので書いておきますね。
Flash上で音声を再生しない場合しか使えませんが、

var sTransform = SoundMixer.soundTransform
sTransform.volume=0;
SoundMixer.soundTransform = sTransform;

という風に、
Flashの音の出力を0にしてしまえば、
ハウリングは起こりません。

FLASHでVJをしてみようかなと思って、Microphoneクラスをいじっていたのですが、
マイクで拾った音は周波数解析できないことを知ってがっかりでした。

AS3でも簡単に、MIDIやらOSCを使えるようになったらいいのになあと思う今日この頃です。

せっかく高速レスポンスを頂いていたのに、
返信できておらず、すみませんでした。

Comment Form
Remember personal info

Trackbacks:3

Trackback URL for this entry
http://www.trick7.com/blog/2007/12/03-104946.php/trackback
Listed below are links to weblogs that reference
CBCNET掲載サンプルのソースとMicrophoneクラス雑感 from trick7
pingback from Spark Project勉強会#9でジェフに誕生日ケーキを渡してきた | ReInit_creative Log 09-05-29 (金) 23:01

[...] マイクのハウリングをどうしても解消できなくて、小さな音でもハウリングして、ろうそくの火がきえてしまうため、trick7 – CBCNET掲載サンプルのソースとMicrophoneクラス雑感のコメントに記載されているコードを使わせていただきました。 マイクから音を出す必要はなかったため、マイクから音を出さないようにして対応しました。 完成したものが以下の動画です。 結果、ジェフに喜んでもらえたようで、懇親会のときにありがとうって言ってくれました。 それは本当にうれしかったのですが、久々の人前での発表後は、極度の緊張が続いていて手が震え続けてました。人前で話せる機会がせっかくあるため、ネタをしこんで、積極的にいかにゃあならんなーっと思いました。 それと、言語の壁をおもいっきし感じたので、英語がんばります。 発表を聞いてくれた方々ありがとうございました。 mariroom先生、演出に協力してくれてありがとうございました。 [...]

pingback from casica journal » LazyTypo (ver. 0.6.0) 10-10-23 (土) 1:19

[...] AS3でのマイクは,Microphoneクラス(flash.media.Microphone)を使う. 最初ハウリングが起きたけれど,この記事を参考にさせてもらって解決した. [...]

pingback from Spark Project勉強会#9でジェフに誕生日ケーキを渡してきた | reinit log 11-01-24 (月) 4:22

[...] マイクのハウリングをどうしても解消できなくて、小さな音でもハウリングして、ろうそくの火がきえてしまうため、trick7 – CBCNET掲載サンプルのソースとMicrophoneクラス雑感のコメントに記載されているコードを使わせていただきました。 マイクから音を出す必要はなかったため、マイクから音を出さないようにして対応しました。 完成したものが以下の動画です。 [...]

Return to page top