Flashゲーム講座 & アクションスクリプトサンプル集

 

マイクを使用する

 

サンプルをダウンロード
 


■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 からの番号で指定。(複数のマイクデバイスが存在する場合)
戻り値 MicrophoneMicrophone オブジェクトが得られる。マイクが利用できない場合 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引数 Number0 ~ 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引数 Number5、8、11、22、44 の数値を指定。(単位は kHz)(デフォルトは 11)
戻り値 Voidなし
 
■第01引数(キャプチャーレート)
 
第01引数に、以下の数値を指定します。デフォルトは 11 です。
 
指定したレートに対応していない場合、実際にサポートする最も近いレートが採用されます。
 
指定する数値実際のサンプリングレート
4444100 Hz
2222050 Hz
1111025 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引数 Number0 ~ 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);
	};
}