サウンドの制御について
・ | サウンドオブジェクトを作成する |
・ | サウンドの再生制御について |
・ | サウンドの出力設定について |
・ | ID3 タグを取得する(Flash 6 以降) |
・ | 静的なサウンドについて |
・ | 埋め込んだサウンドファイルを再生する |
・ | 外部から読み込んだサウンドファイルを再生する(Flash 6 以降) |
サウンドオブジェクトを作成する
■サウンドオブジェクトを作成する
new 演算子を使って、Sound クラスをインスタンス化します。
new Sound( ムービークリップ階層 ) :Sound
第01引数(略可) | MovieClip | サウンド出力を制御したいムービークリップを指定。省略した場合 _level0 |
戻り値 | Sound | 新しい Sound オブジェクトが得られる |
サウンドオブジェクトを作成する
// サウンドオブジェクトを作成する
var sound_obj = new Sound();
■第01引数(ムービークリップ階層)
ここで指定するムービークリップは、サウンドの出力設定と関係があります。
タイムラインに配置した、静的なサウンドに影響があります。
■出力設定の影響範囲について
サウンドの出力設定は、ムービークリップの子孫にも反映されます。
■複数の出力設定が、親子関係上に存在する場合
結果は、祖先の設定値と合成(乗算)されます。
例えば、自身の音量を 80% と設定します。
親の音量を 50% と設定します。
この場合、最終的な自身の音量は、0.8 * 0.5 = 40% となります。
1つのサウンドの出力設定は、ミキサーとして機能します。
■動的にサウンドを再生する場合
複数の音を同時に再生したい場合、必要な数だけ Sound オブジェクトを用意します。
1つの Sound オブジェクトから、1つの音を再生します。
■マスター用の Sound オブジェクトを作成する
Flash 内で使われているすべてのサウンドの出力を、一括で設定する事ができます。
Sound コンストラクタの引数に、_root を指定します。
引数を省略しても、同様の効果があります。
■作成例
マスター用のサウンドオブジェクトを作成する
// マスター用のサウンドオブジェクトを作成する
var sound_obj = new Sound(_root);
■影響範囲例
■チャンネル用の Sound オブジェクトを作成する(効果音など)
音1つ1つごとに、異なるサウンドの出力設定を行う事ができます。
Sound オブジェクトを、必要な数だけ、複数作成します。
Sound コンストラクタの引数に、空のムービークリップを指定します。
■注意点
同一のムービークリップを指定しないように注意します。
また、空のムービークリップ同士は、兄弟関係となるよう配置します。
親子関係である場合、出力設定は干渉してしまいます。
■サポートチャンネル数について
Flash 7 以前では、 8 曲の同時再生に対応しています。
Flash 8 以降から、32 曲の同時再生に対応しています。
■作成例
お互い干渉しない、3つの Sound オブジェクトを作成する(Flash 6 以降)
// ------------------------------------------------------------
// 空のムービークリップを作成して配置する
// ------------------------------------------------------------
var mc0 = _root.createEmptyMovieClip("sound_mc0" , 0);
var mc1 = _root.createEmptyMovieClip("sound_mc1" , 1);
var mc2 = _root.createEmptyMovieClip("sound_mc2" , 2);
// ------------------------------------------------------------
// サウンドオブジェクトを作成
// ------------------------------------------------------------
var sound_obj0 = new Sound( mc0 );
var sound_obj1 = new Sound( mc1 );
var sound_obj2 = new Sound( mc2 );
お互い干渉しない、チャンネル用の Sound オブジェクトを作成する(Flash 7 以降)
// ------------------------------------------------------------
// サウンドオブジェクトのリストを作成
// ------------------------------------------------------------
var sound_list = (function(){
// ------------------------------------------------------------
// 必要なチャンネルの総数
// ------------------------------------------------------------
var channel_max = 8;
// ------------------------------------------------------------
// 空ムービークリップを配置するターゲット
// ------------------------------------------------------------
var target = _root;
// ------------------------------------------------------------
// チャンネル用のサウンドオブジェクトを作成する
// ------------------------------------------------------------
var list = new Array();
var i;
for(i=0;i < channel_max;i++){
// 最前面となる深度を取得する
var depth = target.getNextHighestDepth();
// 空のムービークリップを作成して配置する
var mc = target.createEmptyMovieClip("sound_mc"+i , depth);
// サウンドオブジェクトを作成する
var sound_obj = new Sound(mc);
// リストに追加する
list.push(sound_obj);
}
return list;
}).call();
■影響範囲例
サウンドの再生制御について
■再生制御の機能一覧
■プロパティ
プロパティ名 | 型 | 説明 |
position | Number | 現在の再生位置を取得する。(単位:ミリ秒) |
■メソッド
■イベント
プロパティ名 | 説明 |
onSoundComplete | サウンドの再生が完了した時に実行されるイベント。 |
■サウンドの再生を開始する
start() メソッドを使用します。
Sound.start ( 再生開始位置 , 繰り返し回数 ) :Void
第01引数(略可) | Number | 再生を開始する位置を指定。(単位:秒) |
第02引数(略可) | Number | サウンドを繰り返し再生したい場合、回数を指定。 |
戻り値 | Void | なし |
■第01引数 再生開始位置
途中から再生を開始したい場合に指定します。
設定する数値の単位は、秒です。
第02引数による、ループ再生にも影響するので注意してください。
■第02引数 繰り返し回数
サウンドを繰り返しループ再生したい場合に指定します。
終端まで再生が終わると、第01引数で指定した位置まで戻ります。
「最初」から開始して、「終端」から「途中」に戻る事はできません。
「途中」から開始して、「終端」から「最初」に戻る事はできません。
サウンドが途切れない、完璧なループ再生が可能です。
■低品質なループについて
終了を検出してから、再生をやり直す方法もあります。
この場合、無音が発生する、低品質なループとなります。
サウンドの終端をフェードアウトしておくと、自然な流れとなるでしょう。
■使用例
埋め込んだサウンドファイル "my_sound" の再生を開始する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付ける (リンケージ識別子 "my_sound" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound");
// ------------------------------------------------------------
// 再生を開始する
// ------------------------------------------------------------
sound_obj.start();
外部サウンドファイルの再生を開始する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 読み込みが完了すると実行されるイベント (成功失敗に関係なく)
// ------------------------------------------------------------
sound_obj.onLoad = function (result){
// 読み込みに失敗
if(!result) return;
// 再生を開始する ( 0 秒目から開始)( 3 回繰り返し)
sound_obj.start(0 , 3);
};
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (イベント再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , false);
■サウンドの再生を停止する
stop() メソッドを使用します。
Sound.stop ( "リンケージ識別子" ) :Void
第01引数(略可) | String | 任意の埋め込みサウンドの再生のみを停止したい場合、リンケージ識別子を指定 |
戻り値 | Void | なし |
■第01引数 リンケージ識別子
1つの Sound オブジェクトから、複数の音を同時に再生する事ができます。
引数にリンケージ識別子を指定すると、1つの音を停止する事ができます。
1つの Sound オブジェクトによる、複数同時再生はオススメしません。
再生位置などの取得が、困難になるからです。
引数を省略した場合、複数同時再生した音をすべて停止します。
■使用例
再生を停止する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付ける (リンケージ識別子 "my_sound" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound");
// ------------------------------------------------------------
// 再生を開始する
// ------------------------------------------------------------
sound_obj.start();
// ------------------------------------------------------------
// 再生を停止する
// ------------------------------------------------------------
sound_obj.stop();
個別に再生を停止する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付け、再生を開始する (リンケージ識別子 "my_sound_00" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound_00");
sound_obj.start();
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付け、再生を開始する (リンケージ識別子 "my_sound_01" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound_01");
sound_obj.start();
// ------------------------------------------------------------
// 1つの再生を停止する (リンケージ識別子 "my_sound_01" )
// ------------------------------------------------------------
sound_obj.stop("my_sound_01");
// ------------------------------------------------------------
// すべての再生を停止する
// ------------------------------------------------------------
sound_obj.stop();
■すべてのサウンドの再生を停止する
stopAllSounds() 関数を使用します。
stopAllSounds ( ) :Void
引数 | Void | なし |
戻り値 | Void | なし |
すべてのサウンドの再生を停止する
stopAllSounds();
■サウンドの再生位置を設定する
■サウンドの再生位置を取得する(Flash 6 以降)
position プロパティを使用します。
得られる数値の単位は、ミリ秒です。
サウンドの再生位置を取得する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付ける (リンケージ識別子 "my_sound" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound");
// ------------------------------------------------------------
// 再生を開始する
// ------------------------------------------------------------
sound_obj.start();
// ------------------------------------------------------------
// 毎フレーム実行されるイベント
// ------------------------------------------------------------
_root.onEnterFrame = function (){
// 出力テスト
trace( sound_obj.position );
};
■サウンドの再生位置を設定する
start() メソッドを使用して、サウンドの再生をやり直します。
第01引数から、開始位置を指定します。
サウンドの再生位置を設定する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付ける (リンケージ識別子 "my_sound" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound");
// ------------------------------------------------------------
// マウスボタンを押すと実行されるイベント
// ------------------------------------------------------------
_root.onMouseDown = function (){
// 開始秒数
var position = 3.0;
// 再生を停止する
sound_obj.stop();
// 指定した秒数から、再生を開始する
sound_obj.start(position);
};
■サウンドの再生が完了したか監視する(Flash 6 以降)
onSoundComplete イベントを使用します。
■イベントが発行されない場合について
start() メソッドの第02引数にて、ループ再生を指定している場合、すべての繰り返し回数を消化するまでは、イベントは発行されません。
loadSound() メソッドの第02引数にて、ストリーミング再生を指定している場合、イベントは発行されません。
■使用例
onSoundComplete イベントを使ってループ再生する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 再生が完了すると実行されるイベント
// ------------------------------------------------------------
sound_obj.onSoundComplete = function (result){
trace("再生が完了した");
// 再生を開始する
sound_obj.start();
};
// ------------------------------------------------------------
// 読み込みが完了すると実行されるイベント (成功失敗に関係なく)
// ------------------------------------------------------------
sound_obj.onLoad = function (result){
// 読み込みに失敗
if(!result) return;
// 再生を開始する
sound_obj.start();
};
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (イベント再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , false);
サウンドの出力設定について
■サウンドの出力設定の機能一覧
■メソッド
メソッド名 | 説明 |
setVolume() | サウンドのボリュームを設定する。 |
getVolume() | サウンドのボリュームを取得する。 |
setPan() | サウンドのパンを設定する。 |
getPan() | サウンドのパンを取得する。 |
setTransform() | サウンドのトランスフォームを設定する。 |
getTransform() | サウンドのトランスフォームを取得する。 |
■サウンドのボリュームを設定する
■サウンドのボリュームを設定する
setVolume() メソッドを使用します。
単位は、パーセントです。
0(無音) ~ 100(デフォルト) の数値を指定します。
100 より大きい数値を指定した場合、音割れが発生するので注意してください。
Sound.setVolume ( ボリューム ) :Void
第01引数 | Number | 音量 (0~100) を指定(単位:パーセント) |
戻り値 | Void | なし |
■サウンドのボリュームを取得する
getVolume() メソッドを使用します。
Sound.getVolume ( ) :Number
引数 | Void | なし |
戻り値 | Number | setVolume() で指定したボリューム値 (0~100) が得られる |
■使用例
サウンドのボリュームを設定する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// ボリュームを設定する
// ------------------------------------------------------------
sound_obj.setVolume(50);
// ------------------------------------------------------------
// 設定したボリューム値を取得する
// ------------------------------------------------------------
var volume = sound_obj.getVolume();
// 出力テスト
trace(volume); // 50
■サウンドのパンを設定する
■サウンドのパンを設定する
setPan() メソッドを使用します。
単位は、パーセントです。
-100(左) ~ 0(中央) ~ 100(右) の数値を指定します。
Sound.setPan ( パン ) :Void
第01引数 | Number | パン (-100~100) を指定(単位:パーセント) |
戻り値 | Void | なし |
■サウンドのパンを取得する
getPan() メソッドを使用します。
Sound.getPan ( ) :Number
引数 | Void | なし |
戻り値 | Number | setPan() で指定したパン値 (-100~100) が得られる |
■使用例
サウンドのパンを設定する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// パンを設定する
// ------------------------------------------------------------
sound_obj.setPan(40);
// ------------------------------------------------------------
// 設定したパン値を取得する
// ------------------------------------------------------------
var pan = sound_obj.getPan();
// 出力テスト
trace(pan); // 40
■サウンドの左右の出力を詳細に設定する
■サウンドのトランスフォームを設定する
setTransform() メソッドを使用します。
Sound.setTransform ( SoundTransform ) :Void
第01引数 | Object | SoundTransform オブジェクトを指定 |
戻り値 | Void | なし |
■サウンドのトランスフォームを取得する
getTransform() メソッドを使用します。
Sound.getTransform ( ) :Object
引数 | Void | なし |
戻り値 | Object | SoundTransform オブジェクトが得られる |
■ SoundTransform オブジェクトについて
新しいオブジェクトを作成し、以下のプロパティを追加します。
プロパティ | 型 | 説明 |
ll | Number | 元は左から出力されていた音を左から出力します。 0(無音) ~ 100(デフォルト) |
lr | Number | 元は右から出力されていた音を左から出力します。 0(無音) ~ 100(デフォルト) |
rl | Number | 元は左から出力されていた音を右から出力します。 0(無音) ~ 100(デフォルト) |
rr | Number | 元は右から出力されていた音を右から出力します。 0(無音) ~ 100(デフォルト) |
■ SoundTransform オブジェクトの設定例
デフォルトの設定
// ------------------------------------------------------------
// SoundTransform オブジェクトを用意する(デフォルト)
// ------------------------------------------------------------
var sound_transform = {
ll : 100,
lr : 0,
rr : 100,
rl : 0
};
モノラルの設定
// ------------------------------------------------------------
// SoundTransform オブジェクトを用意する(モノラル)
// ------------------------------------------------------------
var sound_transform = {
ll : 50,
lr : 50,
rr : 50,
rl : 50
};
リバースステレオの設定
// ------------------------------------------------------------
// SoundTransform オブジェクトを用意する(リバースステレオ)
// ------------------------------------------------------------
var sound_transform = {
ll : 0,
lr : 100,
rr : 0,
rl : 100
};
■使用例
サウンドのトランスフォームを設定する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// SoundTransform オブジェクトを用意する(モノラル)
// ------------------------------------------------------------
var sound_transform = {
ll : 50,
lr : 50,
rr : 50,
rl : 50
};
// ------------------------------------------------------------
// トランスフォームを設定する
// ------------------------------------------------------------
sound_obj.setTransform(sound_transform);
// ------------------------------------------------------------
// 設定したトランスフォーム値を取得する
// ------------------------------------------------------------
sound_transform = sound_obj.getTransform();
// 出力テスト
trace(sound_transform); // { ll:50 , lr:50 , rr:50 , rl:50 }
ID3 タグを取得する(Flash 6 以降)
■ ID3 タグが得られるか監視する
onID3 イベントを使用します。
■ onID3 イベントが発行される場合について
■ ID3 タグを取得する
id3 プロパティを使用します。
ID3 タグが存在しない場合、undefined 値が得られます。
ID3 タグが存在する場合、オブジェクトが得られます。
■得られる情報の一例
プロパティ名 | 型 | 説明 | ID3v2 frame |
songname | String | タイトル(曲名) | TIT2 |
artist | String | アーティスト名 | TPE1 |
album | String | アルバム名 | TALB |
year | String | 西暦 | TYER |
track | String | トラック番号 | TRCK |
genre | String | 曲ジャンル | TCON |
comment | String | コメント | COMM |
■取得例
ID3 タグを取得する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// ID3 タグを検出すると実行されるイベント
// ------------------------------------------------------------
sound_obj.onID3 = function (){
// ------------------------------------------------------------
// ID3 オブジェクトを取得する
// ------------------------------------------------------------
var id3_info = sound_obj.id3;
// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace( id3_info.songname );
trace( id3_info.artist );
trace( id3_info.album );
trace( id3_info.year );
trace( id3_info.track );
trace( id3_info.genre );
trace( id3_info.comment );
// ------------------------------------------------------------
// すべての情報を出力する
// ------------------------------------------------------------
var key;
for(key in id3_info){
trace(key + " : " + id3_info[key]);
}
};
// ------------------------------------------------------------
// 読み込みが完了すると実行されるイベント (成功失敗に関係なく)
// ------------------------------------------------------------
sound_obj.onLoad = function (result){
// 読み込みに失敗
if(!result) return;
// 再生を開始する
sound_obj.start();
};
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (イベント再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , false);
静的なサウンドについて
■静的なサウンドについて
■静的なサウンドの配置について
Adobe Flash では、タイムラインにサウンドを配置する事ができます。
■静的なサウンドの出力を設定する
1.Sound オブジェクトを作成する
Sound オブジェクトの作成については、こちらで解説しています。
第01引数の、ムービークリップ階層の指定は、重要です。
1つの Sound オブジェクトは、ミキサーとして機能するようになります。
2.静的なサウンドの出力を設定する
サウンドの出力設定については、こちらで解説しています。
埋め込んだサウンドファイルを再生する
サンプルをダウンロード
■埋め込んだサウンドファイルを再生する
サウンドファイルを、 swf ファイルに埋め込む事ができます。
埋め込んだサウンドファイルは、動的に再生する事ができます。
■サウンドファイルを埋め込む(Adobe Flash の場合)
1.リンケージプロパティを開く
ライブラリウィンドウを開きます。
使用したいサウンドファイルから、リンケージプロパティを選択します。
2.リンケージ識別子を設定する
リンケージプロパティというダイアログが開きます。
識別子に好きな名称を付けます。
ここでは、"my_sound" と名前を付けます。
Flash 5 の場合は、『このシンボルに書き出す』にチェックを付けます。
Flash MX 以降の場合は、『ActionScript に書き出し』と『最初のフレームに書き出し』にチェックを付けます。
3.Flash を書き出して、データの埋め込みを確認する
この状態で、Flash を書き出します。
すると、swf ファイルにデータが埋め込まれるようになります。
プロファイラ機能を使用すると、データが埋め込まれたか確認できます。
タイムラインの1フレーム目のサイズが増えているでしょう。
■サウンドファイルを埋め込む(FlashDevelop の場合)
1.プロジェクトにサウンドファイルを追加する
プロジェクトウィンドウの、任意のフォルダを選択します。
「Add」→「Library Asset」を選択します。
ファイル選択ダイアログが開くので、サウンドファイルを選択します。
2.リンケージ識別子を設定する
追加されたサウンドファイルを選択して、「Options」を選択します。
「Library Asset Properties」ダイアログが開きます。
「Auto-generate ID ...」のチェックを外して、好きな識別子を付けます。
ここでは、"my_sound" と名前を付けます。
3.Flash を書き出して、データの埋め込みを確認する
この状態で、Flash を書き出します。
すると、swf ファイルにデータが埋め込まれるようになります。
swf ファイルのサイズが増えたか、確認します。
サウンドファイルのフォーマットに不備がある場合、ビルドに失敗します。
■サウンドファイルを埋め込む(Parafla の場合)
1.プロジェクトにサウンドファイルを追加する
ファイルリストに、サウンドファイルを追加します。
「アイテムの追加」→「ファイル」を選択します。
ファイル選択ダイアログが開くので、サウンドファイルを選択します。
2.リンケージ識別子を設定する
追加されたサウンドファイルを選択して、「プロパティ」を選択します。
「ファイルのプロパティ」ダイアログが開きます。
「サウンドの設定」の「オブジェクト名」に、好きな識別子を付けます。
ここでは、"my_sound" と名前を付けます。
3.ダミーのサウンドイベントを追加する
このままでは、サウンドファイルは埋め込まれません。
イベントリストにて、サウンドを利用する必要があります。(最低でも1回)
1フレーム目にサウンドを追加します。
「サウンドイベントの設定」から「停止」を選択するといいでしょう。
4.Flash を書き出して、データの埋め込みを確認する
この状態で、Flash を書き出します。
すると、swf ファイルにデータが埋め込まれるようになります。
swf ファイルのサイズが増えたか、確認します。
埋め込んだサウンドファイルを再生する
1.Sound オブジェクトを作成する
Sound オブジェクトの作成については、こちらで解説しています。
2.埋め込んだサウンドファイルと関連付ける
attachSound() メソッドを使用します。
引数に、再生制御したいサウンドファイルの、リンケージ識別子を指定します。
Sound.attachSound ( "リンケージ識別子" ) :Void
第01引数 | String | 再生制御したいサウンドファイルの、リンケージ識別子を指定する |
戻り値 | Void | なし |
3.関連付けたサウンドを再生する
サウンドの再生制御については、こちらで解説しています。
埋め込んだサウンドファイル "my_sound" の再生を開始する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付ける (リンケージ識別子 "my_sound" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound");
// ------------------------------------------------------------
// 再生を開始する
// ------------------------------------------------------------
sound_obj.start();
// ------------------------------------------------------------
// 再生を停止する
// ------------------------------------------------------------
//sound_obj.stop();
4.サウンドの出力を設定する
サウンドの出力設定については、こちらで解説しています。
埋め込んだサウンドファイルを再生し、サウンドの出力を設定する
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 埋め込んだサウンドファイルと関連付ける (リンケージ識別子 "my_sound" )
// ------------------------------------------------------------
sound_obj.attachSound("my_sound");
// ------------------------------------------------------------
// ボリュームを設定する
// ------------------------------------------------------------
sound_obj.setVolume(100);
// ------------------------------------------------------------
// パンを設定する
// ------------------------------------------------------------
sound_obj.setPan(75);
// ------------------------------------------------------------
// 再生を開始する
// ------------------------------------------------------------
sound_obj.start();
■音が出ない場合について
■音が出ない場合
Sound コンストラクタに、実在するターゲットを指定します。
attachSound() メソッドに、実在するリンケージ識別子を指定します。
■音が倍速で再生される場合
MP3 ファイルが、対応フォーマットであるか確認します。
■サウンドの埋め込みの問題点
サウンドの埋め込みは、基本的に1フレーム目に格納されます。
大抵の場合、サウンドファイルは大容量です。
1フレーム目の読み込みが完了するまでは、画面は一切表示されません。
例えば、Flash の総サイズのうち、60% がサウンドデータだった場合、60% の読み込みが完了するまで、一切の絵を表示する事ができません。
もしロード画面を実装している場合、ほぼ機能しなくなるでしょう。
■ロード用の Flash を別途用意する
ロード専用の Flash を表示し、そこにメインの swf ファイルを読み込みます。
Flash を読み込んで表示する方法については、こちらで解説しています。
■サウンドデータを、任意のフレームに埋め込む
リンケージプロパティを開いて、『最初のフレームに書き出し』のチェックを外します。
次に、サウンドファイルを任意のフレームに静的に配置します。
「同期」に「ストップ」を指定するといいでしょう。
その任意のフレームを、最低でも1回だけ再生します。
これで、attachSound() メソッドで利用できるようになります。
外部にあるサウンドを動的に再生したい(Flash 6 以降)
サンプルをダウンロード
■サウンドファイルの読み込みの機能一覧
■プロパティ
■メソッド
メソッド名 | 説明 |
loadSound() | 外部サウンドファイルの読み込みを開始する。 |
getBytesLoaded() | これまでに読み込んだバイト数を取得する。 |
getBytesTotal() | 外部サウンドファイルの総バイト数を取得する。 |
■イベント
プロパティ名 | 説明 |
onLoad | 読み込みが完了すると実行されるイベント (成功失敗に関係なく) |
対応するサウンドフォーマットについて
MP3 ファイルのみ対応しています。
対応フォーマットについては、以下の通りです。
ビットレート方式
ビットレート方式 | 対応 |
CBR(固定ビットレート) | ○ |
ABR(平均ビットレート) | × |
VBR(可変ビットレート) | × |
FFS(フリーフォーマットストリーム) | × |
サンプリングレート
サンプリングレート | 対応 |
44,100HZ | ○ |
22,050HZ | ○ |
11,025HZ | ○ |
ビットレート
ビットレート | 対応 |
160kbps | ○ |
128kbps | ○ |
112kbps | ○ |
80kbps | ○ |
64kbps | ○ |
56kbps | ○ |
48kbps | ○ |
32kbps | ○ |
24kbps | ○ |
20kbps | ○ |
16kbps | ○ |
8kbps | ○ |
外部サウンドファイルを読み込み再生する
1.Sound オブジェクトを作成する
Sound オブジェクトの作成については、こちらで解説しています。
2.サウンドファイルの読み込みを開始する
loadSound() メソッドを使用します。
3.読み込みが完了するまで監視する
onLoad イベントを使用します。
4.サウンドの再生を制御する
サウンドの再生制御については、こちらで解説しています。
外部サウンドファイルを再生する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 読み込みが完了すると実行されるイベント (成功失敗に関係なく)
// ------------------------------------------------------------
sound_obj.onLoad = function (result){
// 読み込みに失敗
if(!result) return;
// 再生を開始する
sound_obj.start();
// 再生を停止する
//sound_obj.stop();
};
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (イベント再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , false);
5.サウンドの出力を設定する
サウンドの出力設定については、こちらで解説しています。
外部サウンドファイルを再生し、サウンドの出力を設定する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 読み込みが完了すると実行されるイベント (成功失敗に関係なく)
// ------------------------------------------------------------
sound_obj.onLoad = function (result){
// 読み込みに失敗
if(!result) return;
// 再生を開始する
sound_obj.start();
};
// ------------------------------------------------------------
// ボリュームを設定する
// ------------------------------------------------------------
sound_obj.setVolume(100);
// ------------------------------------------------------------
// パンを設定する
// ------------------------------------------------------------
sound_obj.setPan(75);
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (イベント再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , false);
■音が出ない場合について
■音が出ない場合
Sound コンストラクタに、実在するターゲットを指定します。
loadSound() メソッドに、実在するサウンドファイルの URL を指定します。
■音が倍速で再生される場合
MP3 ファイルが、対応フォーマットであるか確認します。
■ ID3 タグが取得できない場合
クロスドメインポリシーに違反していないか確認します。
■サウンドファイルの読み込みを開始する
loadSound() メソッドを使用します。
Sound.loadSound ( "URL" , ストリーミング再生? ) :Void
第01引数 | String | サウンドファイルが格納された URL を指定 |
第02引数 | Boolean | true ならストリーミング再生、false ならイベント再生 |
戻り値 | Void | なし |
■ストリーミング再生について
メディアプレイヤーに最適です。
読み込み途中であっても、再生可能な位置まで再生する事ができます。
再生可能な最大位置を取得するには、duration プロパティを使用します。
得られる数値の単位は、ミリ秒です。
一部に機能制限があります。
start() メソッドを使って、ループ再生や、複数同時再生を行う事はできません。
■イベント再生について
効果音の再生に最適です。
■キャッシュについて
一度読み込んだサウンドファイルは、キャッシュに残ります。
もう一度読み込むと、すぐに再生を開始する事ができます。
■ストリーム再生状況を取得する例
外部サウンドファイルのストリーム再生状況を取得する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (ストリーム再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , true);
// ------------------------------------------------------------
// 毎フレーム実行されるイベント
// ------------------------------------------------------------
_root.onEnterFrame = function (){
// 現在の再生位置
var position = sound_obj.position;
// 再生可能な最大位置
var duration = sound_obj.duration;
// 出力テスト
trace("position:" + position);
trace("duration:" + duration);
};
■サウンドファイル読み込みのセキュリティについて
■クロスドメイン環境でも可能な処理について
サウンドファイルの再生に、制限はありません。
別ドメインのサウンドファイルを読み込んで、再生する事は可能です。
■クロスドメイン環境では不可能な処理について
別ドメインのサウンドファイルを読み込んで、ID3 タグを取得する事はできません。
■クロスドメインポリシーの解除について
クロスドメインポリシーは、解除する事ができます。
サウンドファイルを格納しているサーバーに、ポリシーファイルを設置しておきます。
その後、loadSound() メソッドを呼び出します。
■ローカルで実行されている Flash について
ローカルで実行されている Flash から、ネットワークに格納されているサウンドファイルに、読み取りアクセスする事はできません。
パブリッシュ設定から「ネットワークにのみアクセスする」を選択すると、読み取りアクセス可能になります。
■サウンドファイルの読み込み状況を取得する
■これまでに読み込んだバイト数を取得する
getBytesLoaded() メソッドを使用します。
Sound.getBytesLoaded ( ) :Number
引数 | Void | なし |
戻り値 | Number | これまでに読み込んだバイト数が得られる |
■外部サウンドファイルの総バイト数を取得する
getBytesTotal() メソッドを使用します。
Sound.getBytesTotal ( ) :Number
引数 | Void | なし |
戻り値 | Number | 外部サウンドファイルの総バイト数が得られる |
■取得例
外部サウンドファイルの読み込み状況を取得する(Flash 6 以降)
// ------------------------------------------------------------
// サウンドオブジェクトを作成する
// ------------------------------------------------------------
var sound_obj = new Sound(_root);
// ------------------------------------------------------------
// 外部サウンドファイルの読み込みを開始する (ストリーム再生)
// ------------------------------------------------------------
sound_obj.loadSound("http://hakuhin.jp/download/js/audio/sample_00.mp3" , true);
// ------------------------------------------------------------
// 毎フレーム実行されるイベント
// ------------------------------------------------------------
_root.onEnterFrame = function (){
// これまでに読み込んだバイト数を取得
var loaded = sound_obj.getBytesLoaded();
if(isNaN(loaded)) loaded = 0;
// 外部サウンドファイルの総バイト数を取得
var total = sound_obj.getBytesTotal();
if(isNaN(total)) total = 0;
// パーセント
var percent = loaded / total * 100;
if(isNaN(percent)) percent = 0;
// 出力テスト
trace("loaded:" + loaded );
trace("total:" + total );
trace("percent:" + percent);
};
■サウンドの読み込みが完了したか監視する
onLoad イベントを使用します。
loadSound() メソッドによる読み込み処理が完了した事がわかります。
このイベントは、成功失敗に関係なく必ず発行されます。
コールバック関数の引数から、Boolean 値が得られます。
true の場合、読み込みに成功しています。