コード
mtasc06.as
class mtasc06
{
public static function main()
{
// 画面にメッセージ表示
textfieldtrace.trace("サウンド再生!");
// サウンドオブジェクト生成
var se = new Sound;
// サウンドのロードが完了したら、次の処理が呼び出される。
se.onLoad = function()
{
// サウンド再生
this.start();
}
// サウンドロード開始
se.loadSound("se.mp3");
}
}
解説
音声を再生するにはSoundクラスを使用します。対応しているファイルはMP3です。
まず、サウンドオブジェクトを生成します。
次に、loadSound関数を呼び出してロードするファイルを指定するのですが、その前にサウンドのロードが完了した時に行う処理を指定しておく必要があります。サウンドのロードは時間がかかるため、ASスクリプトの処理と並行して行われます。そのため、loadSound関数が呼び出された後、必ずしもロードが完了しているとは限りません。そこで、サウンドのロードが完了していないとできない処理(例えばサウンドの再生、上記のサンプルの場合は再生ボタンの表示)は、『サウンドの読み込みが完了した時に行う処理』としてプログラム中に書いておく必要があります。
サンプルでは以下の部分になります。
// サウンドのロードが完了したら、onLoad関数が呼び出される。
se.onLoad = function()
{
……
}
上記のように記述することで、サウンドの読み込みが完了した時点で「……」の処理が行われます。この「……」内に、サウンドの再生用関数「this.start()」を書いておけば、読み込みが完了してから再生が行われることが保証されます。また、似たような表現で、
se.onSoundComplete = function()
{
……
}
と書くことで、サウンドの再生が完了した時点で「……」が実行されるようになります。
このように「ナニナニ」が起こったら「コレコレ」を実行するという処理はAS中で沢山使われます。(マウスがクリックされたら、このキーがおされたら、etc...)
再生完了時の処理の指定が終わったら、あとはサウンドファイルをロードするだけです。サンプルではse.mp3を読み込んでいます。
その他、サンプルでは登場していませんがサウンドを停止するには次のようにします。
イベントサウンドとストリーミングサウンド
実は、サウンドの再生方法には「イベント」と「ストリーミング」の2種類があります。上記のサンプルは「イベント」です。「ストリーミング」を用いるとサウンドのロードが完了していなくてもサウンドを再生することができます。詳しくは
loadSound(マクロメディア社のASリファレンス)をご覧下さい。
再生できるMP3の制限
FlashでMP3を再生する場合、以下の点を満たしていないとサウンドの再生スピードが変ってしまうことがあるようです。
- サンプリングレートが 44KHz、22KHz、11KHz のどれかである。
- エンコードモードは CBR(固定ビットレート)
iTunesを使うと、サンプリングレートを指定してファイルをMP3に変換することができます。
サンプルファイル