Above'Sound.loadSound'メソッドは、外部MP3ファイルをイベントサウンドとしてロードすることもできます。イベントサウンドを再生する場合には、考慮すべき点があります。イベントサウンドはデータを完全にロードしないと、再生できません。したがって、外部MP3ファイルを読込んで再生するには、ロードの完了を待たなければなりません。サウンドのロードを確認するメソッドとして、Soundオブジェクトには'Sound.onLoad'イベントハンドラメソッドがあります。Sound.onLoadメソッドの定義'Sound.onLoad'メソッドを使用するスクリプトの基本スタイルは、つぎのとおりです。ロード完了時に行う処理}};[1]'Sound.loadSound'は、Soundオブジェクトのメソッドですので、第1ステートメントでまずオブジェクトのインスタンスを生成しています。Soundオブジェクトのメソッド(たとえば'Sound.onLoad')は、そのインスタンスをターゲットとして実行する必要があります。インスタンスの生成というのは、サービスへの会員登録のようなものです。銀行の口座開設と思ってもよいでしょう。会員登録や口座開設を済ませると、会員/口座番号が与えられます。以降は、そのID番号を使って、サービスを受けることができる訳です。インスタンス生成の処理を実行すると、ID番号の替わりに「インスタンス(の参照)」が返されます。その参照を変数に代入しておけば、以降変数に代入されたインスタンスをターゲットとしてSoundオブジェクトのメソッドを使用することができます。Sound(ターゲットMovieClip)'がインスタンス作成の処理です。DateやArray、Objectなどのオブジェクトと同じく、インスタンスは'new'演算子で生成します。オブジェクトに対するこの処理を、一般に「コンストラクタの実行」といいます。コンストラクタを実行すると、オブジェクト(今回はSoundの)インスタンス(の参照)が返されます。その参照を変数に代入して、後のメソッドの実行に使います。上記のサンプルでは"my_sound"という変数名にしました。Soundオブジェクトのコンストラクタは、引数としてターゲットとなるMovieClipインスタンスを指定します。Soundオブジェクトを使ったサウンドの操作は、MovieClip(タイムライン)単位の処理になるのです。この引数を省くと、ムービー内のすべてのサウンドを対象として処理されます。[2]第2ステートメントでは、'Sound.onLoad'メソッドに対して、ロード完了時に行う処理を'function'として設定しています。'function'を設定するには、イベントハンドラメソッドに(別途定義した)'function'名を代入するか、'function'を(「名前のない関数(匿名関数/関数リテラル)」で)直接記述します。イベントハンドラメソッドを定義すると、イベント(この場合は変数のロード完了)が発生するたびにその'function'が呼出されて実行されます。イベントハンドラメソッドへの'function'定義というのは、'function'をそのイベント用のメモリに保存する操作です。これは、携帯の着メロ設定と同じです。サウンドを着メロのメモリに登録すると、着信(イベントが発生)するたびにメモリしたサウンド('function')が再生(実行)される訳です。MXの「ActionScript辞書」に記載はありませんが、このメソッドが呼出されるときには、ブール(論理)値が引数として一緒に渡されます。サウンドのロードが正常に完了すると引数が'true'、そうでないときは'false'となります。ロード完了時の処理は、この値が'true'であることを確認したうえで行った方が確実です。'false'の場合の処理を加えると、トラブルが生じたときのエラー回避ができます。第3ステートメントでは、この引数の判定を行っています。サウンドをロード後再生するスクリプトサンプルサウンドをロードし終えたら再生するスクリプトを作成してみたいと思います。イベントサウンドは、データをすべてロードし終わってから再生します。データのサイズによっては、再生が可能になるまでに時間のかかる可能性があります。読込んでしまえば、再生はスムーズです。Soundオブジェクトによるコントロール(メソッドの実行やプロパティの操作)を、すべてサポートします。サウンドをロードするには、'Sound.loadSound'メソッドを使います。このメソッドの引数は、2つあります。第1引数が、ファイルのURLです。第2引数は、ブール(論理)値で指定します。'true'はストリーミングサウンド、'false'がイベントサウンドになります。イベントサウンドは、読込んだだけでは自動的に再生されません。サウンドの再生には、'Sound.start'メソッドを使います。サウンドの再生は、データのロードが完了したときに実行します。したがって、'Sound.start'メソッドは、'Sound.onLoad'イベントハンドラメソッドに定義した'function'内に記述するのが適切でしょう。使用するメソッドのご紹介は、すべて済みました。以下が、サウンドをロードして再生するスクリプトサンプルです。//[5]サウンドファイルのロード[1]コンストラクタで生成したSoundオブジェクトのインスタンスを、変数に格納します。[2]Soundオブジェクトインスタンスに、'Sound.onLoad'イベントハンドラメソッドを定義します。[3]サウンドのロードが、問題なく完了したかどうかを判定します。)[4]ロードが無事完了したら、サウンドを再生します。[5]ムービーと同階層のMP3ファイル"test.mp3"をイベントサウンドとしてロードします。最後に、大事な注意が1点あります。'Sound.onLoad'イベントハンドラメソッドの定義は、'Sound.loadSound'の実行前に設定する必要があるということです。'Sound.loadSound'メソッドによる外部MP3サウンドファイルのロードを'Sound.onLoad'メソッドの定義より先に実行してしまうと、定義を処理したときにはすでに'onLoad'メソッドの呼出しが終わってしまっている可能性があります。MP3サウンドファイルのサイズが比較的小さいときに、ローカルで実行したり、ブラウザのキャッシュに残っている場合には、'onLoad'メソッドが呼出されないという状況が発生しやすいです。いつまで経ってもロードが完了しないと勘違いしたり、'onLoad'が呼出されないバグだと早合点しがちです(「Sound.onLoadが実行されない」参照)。このような場合には、'onLoad'メソッドを定義したときには、すでにロードが終わって'onLoad'メソッドの呼出しも済んでしまっているのです。これを避けるには、'Sound.onLoad'メソッドの定義をまず行ってから、'Sound.loadSound'を実行するのが確実です。