マイクについて(Flash 6 以降)
マイクを使用する
サンプルをダウンロード
■Flash Player の設定について
■マイクへのアクセス許可
マイクを使用するには、ユーザーがマイクへのアクセスを許可する必要があります。
Flash Player の設定画面から、マイクへのアクセスを設定することができます。
■マイクの種類を選択
Flash Player の設定画面から、マイクの種類を選択することができます。
■マイクから入力した音をスピーカーから出力する
1.ムービークリップを用意する
適当なムービークリップを用意します。
空のムービークリップを作成する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
2.Microphone オブジェクトを取得する
Microphone オブジェクトを取得するには、Microphone.get() メソッドを使用します。
第01引数を省略した場合、Flash Player の設定画面で選択したマイクデバイスを取得できます。
マイクが利用できない場合、null が得られます。
Microphone.get ( 番号 ) :Microphone
第01引数(略可) | Number | 取得したいマイクデバイスを 0 からの番号で指定。(複数のマイクデバイスが存在する場合) |
戻り値 | Microphone | Microphone オブジェクトが得られる。マイクが利用できない場合 null |
デフォルトのマイクオブジェクトを取得
// デフォルトのマイクオブジェクトを取得
var mic_obj = Microphone.get();
// 出力テスト
trace(mic_obj);
複数のマイクオブジェクトを取得
// 0 番目のマイクオブジェクトを取得
var mic_obj0 = Microphone.get(0);
// 1 番目のマイクオブジェクトを取得
var mic_obj1 = Microphone.get(1);
// 出力テスト
trace(mic_obj0);
trace(mic_obj1);
3.ムービークリップとマイクを関連付ける
ムービークリップとマイクを関連付けるには、attachAudio() メソッドを使用します。
ムービークリップオブジェクトから呼び出し、引数に「Microphone オブジェクト」を指定します。
ムービークリップとマイクを関連付ける
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// デフォルトのマイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
}
■ユーザーがマイクへのアクセスを許可しているか調べる
■マイクへのアクセス許可設定について
プログラムからマイクへのアクセスを試みると、以下の様な確認ダイアログが表示されます。
ユーザーが、マイクへのアクセスを拒否した場合、マイク機能を利用することはできません。
■マイクへのアクセス許可設定を調べる
ユーザーが、マイクへのアクセスを許可しているか調べるには、muted プロパティを使用します。
true であれば、利用できません。
マイク機能のミュート設定を調べる
// デフォルトのマイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
trace("マイク機能のミュート設定:" + mic_obj.muted);
}
■「マイクへのアクセス許可設定」の変更を監視する
「マイクへのアクセス許可設定」の変更を監視するには、onStatus イベントを使用します。
引数から得られるオブジェクトの、code プロパティから結果を取得できます。
以下の種類があります。
文字列 | 名称 |
"Microphone.Muted" | マイクへのアクセスが拒否に変化した |
"Microphone.Unmuted" | マイクへのアクセスが許可に変化した |
マイクのアクセス許可設定の結果を取得する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// マイクへのアクセス許可が変化した時に実行されるイベント
mic_obj.onStatus = function (info) {
switch(info.code){
case "Microphone.Unmuted":
trace("マイク利用可能");
break;
case "Microphone.Muted":
trace("マイク利用不可能");
break;
}
};
}
■マイクデバイスの総数を取得する
マイクデバイスの総数を調べるには、Microphone.names.length プロパティを使用します。
マイクデバイスの総数を取得
// マイクデバイスの総数を取得
var num = Microphone.names.length;
// 出力テスト
trace(num);
■マイクデバイスの名称を取得する
■マイクデバイスの名称をまとめて取得する
マイクデバイスの名称を、配列としてまとめて取得するには、Microphone.names プロパティを使用します。
マイクデバイスの名称を順番に列挙する
// マイクデバイスの名称をまとめて取得する
var camera_names = Microphone.names;
var i;
var num = camera_names.length;
for(i=0;i < num;i++){
// デバイス名を出力
trace("id:" + i + " name:" + camera_names[i]);
}
■マイクオブジェクトからデバイスの名称を取得する
マイクオブジェクトから、デバイスの名称を取得するには、name プロパティを使用します。
マイクデバイスの名称を順番に列挙する
var i;
var num = Microphone.names.length;
for(i=0;i < num;i++){
// マイクオブジェクトを取得
var mic_obj = Microphone.get(i);
// デバイス名を出力
trace("id:" + i + " name:" + mic_obj.name);
}
マイクのサウンド出力を設定する
■マイクのサウンド出力を設定する
new 演算子を使って、Sound クラスをインスタンス化します。
引数には、attachAudio() メソッドを呼び出すときに使用した、ムービークリップを指定します。
Sound クラスについては、こちらで解説しています。
ボリュームの制御が可能です。パンの制御は反映されないようです。
マイクのサウンド出力を設定する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
}
// サウンドオブジェクトを作成
var sound_obj = new Sound(mc);
// ボリュームを設定 (0 ~ 100)
sound_obj.setVolume(100);
マイクの増幅率を設定する
■マイクのゲイン(増幅率)を設定する
マイクの入力ボリュームを増幅させるには、setGain() メソッドを使用します。
Microphone.setGain ( 増幅率 ) :Void
第01引数 | Number | 0 ~ 100 までの値を指定。0 に近いほど無音。(デフォルト値は 50) |
戻り値 | Void | なし |
シグナルの増幅率を指定
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// ゲインを設定
mic_obj.setGain(50);
}
■マイクのゲイン(増幅率)を取得する
マイクの入力ボリュームの増幅率を取得するには、gain プロパティを使用します。
このプロパティは、読み取り専用です。
シグナルの増幅率を取得
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// ゲインを設定
mic_obj.setGain(50);
// ゲインを取得
trace(mic_obj.gain);
}
■Flash Player の設定 (マイクの録音ボリューム)
Flash Player の設定の、マイクの録音ボリュームに相当します。
setGain メソッドを使用してゲインを変更しても、メータは連動して変化しません。
メータを操作すると、連動して gain プロパティも変化します。
マイクのキャプチャーレートを設定する
■キャプチャするレート (kHz) を指定する
マイクのキャプチャレートを設定するには、setRate() メソッドを使用します。
Microphone.setRate ( レート ) :Void
第01引数 | Number | 5、8、11、22、44 の数値を指定。(単位は kHz)(デフォルトは 11) |
戻り値 | Void | なし |
■第01引数(キャプチャーレート)
第01引数に、以下の数値を指定します。デフォルトは 11 です。
指定したレートに対応していない場合、実際にサポートする最も近いレートが採用されます。
指定する数値 | 実際のサンプリングレート |
44 | 44100 Hz |
22 | 22050 Hz |
11 | 11025 Hz |
8 | 8000 Hz |
5 | 5512 Hz |
■設定例
キャプチャレートを変更する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// キャプチャーレートを設定
mic_obj.setRate(44);
}
■サウンドキャプチャレート (kHz) を取得する
マイクのキャプチャレートを取得するには、rate プロパティを使用します。
このプロパティは、読み取り専用です。単位は kHz です。
キャプチャレートを取得する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// キャプチャーレートを設定
mic_obj.setRate(44);
// キャプチャーレートを取得
trace(mic_obj.rate);
}
マイクのエコー抑制を設定する
■エコー抑制機能とは?
スピーカの近くでマイクを使用すると、キーンという音が発生します。
マイクがスピーカーの音を拾い、入力と出力がループして、音が増幅され続ける為に起こります。
この現象を、ハウリングといいます。
エコー抑制機能を使用すると、ハウリングを軽減する事ができます。
スピーカー環境の場合、有効にすると効果的です。
■エコー抑制を設定する
エコー抑制を設定するには、setUseEchoSuppression() メソッドを使用します。
Microphone.setUseEchoSuppression ( 有効か? ) :Void
第01引数 | Boolean | エコー抑制機能を有効にする場合 true を指定、無効にする場合 false を指定。(デフォルト値は false) |
戻り値 | Void | なし |
エコー抑制を設定する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// エコー抑制を設定する
mic_obj.setUseEchoSuppression(true);
}
■エコー抑制の状態を取得する
エコー抑制の状態を取得するには、useEchoSuppression プロパティを使用します。
このプロパティは、読み取り専用です。
エコー抑制の状態を取得する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// エコー抑制を設定する
mic_obj.setUseEchoSuppression(true);
// エコー抑制の状態を取得する
trace(mic_obj.useEchoSuppression);
}
■Flash Player の設定 (エコーを減らす)
Flash Player の設定の、エコーを減らすに相当します。
useEchoSuppression メソッドを使用しても、チェックボックスは連動して変化しません。
チェックボックスをを操作すると、連動して useEchoSuppression プロパティも変化します。
マイクのアクティビティを検出する
■アクティビティとは?
アクティビティとは、活動を意味します。
マイクの入力音量の大きさから、有音状態、無音状態であるかを検出します。
ボイスチャット利用時に効果的です。
無音状態の時は、オーディオデータを送信する必要が無いので、帯域を節約する事ができます。
■アクティビティの有無の切り替わりを検出する
アクティビティの有無の切り替わりを検出するには、onActivity イベントを使用します。
登録した関数の引数から、Boolean 値が得られます。
true … 有音状態
false … 無音状態
アクティビティの有無の切り替わりを検出する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// アクティビティの有無が切り替わると呼び出されるイベント
mic_obj.onActivity = function (activity) {
if(activity){
trace("有音状態");
}else{
trace("無音状態");
}
};
}
■アクティビティ検出のしきい値を設定する
アクティビティ検出のしきい値を設定するには、setSilenceLevel() メソッドを使用します。
Camera.setSilenceLevel ( しきい値 , タイムアウト ) :Void
第01引数 | Number | 0 ~ 100 までのしきい値を指定。0 に近いほど少しの音量でも有音状態として検出する。(デフォルトは 50) |
第02引数(略可) | Number | 無音状態と判定するまでのタイムアウト時間を指定(単位:ミリ秒)(デフォルトは 2000) |
戻り値 | Void | なし |
アクティビティ検出のしきい値を設定する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// アクティビティ検出のしきい値を設定
mic_obj.setSilenceLevel(10,0);
// アクティビティの有無が切り替わると呼び出されるイベント
mic_obj.onActivity = function (activity) {
if(activity){
trace("有音状態");
}else{
trace("無音状態");
}
};
}
■アクティビティ検出のしきい値を取得する
アクティビティ検出用のしきい値を取得するには、silenceLevel プロパティを使用します。
無音状態と判定するまでの時間(単位:ミリ秒)を取得するには、silenceTimeOut プロパティを使用します。
これらのプロパティは、読み取り専用です。
アクティビティ検出用のボリュームのしきい値を取得する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// アクティビティ検出のしきい値を設定
mic_obj.setSilenceLevel(10,0);
// アクティビティ検出用のしきい値を取得する
trace(mic_obj.silenceLevel);
// 無音状態と判定するまでの時間を取得
trace(mic_obj.silenceTimeOut);
}
■マイク入力音量の実測値を取得する
マイク入力音量の実測値を取得するには、activityLevel プロパティを使用します。
0 から 100 までのボリューム値が得られます。
-1 が得られる場合、マイクデバイスの準備ができていません。
アクティビティレベルを取得する
// 空のムービークリップを作成
var mc = _root.createEmptyMovieClip("sound_mc", 0);
// マイクオブジェクトを取得
var mic_obj = Microphone.get();
// マイクが利用可能
if(mic_obj){
// ムービークリップとマイクを関連付け
mc.attachAudio(mic_obj);
// 毎フレーム実行されるイベント
onEnterFrame = function (){
trace("マイク入力音量:" + mic_obj.activityLevel);
};
}