Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > サウンドの操作 > 外部サウンドファイルのロード | |||
Sound クラスの各インスタンスは、特定のサウンドリソースをロードし、再生をトリガーするために使用されるものです。アプリケーションでは、Sound オブジェクトを再利用してサウンドをロードすることはできません。新しいサウンドリソースをロードする必要がある場合は、新しい Sound オブジェクトを作成する必要があります。
ボタンに関連付けるクリック音など、小さなサウンドファイルをロードする場合、アプリケーションは新しい Sound オブジェクトを作成し、次のようにサウンドファイルを自動的にロードできます。
var req:URLRequest = new URLRequest("click.mp3");
var s:Sound = new Sound(req);
Sound() コンストラクタは、最初のパラメータとして URLRequest オブジェクトを受け入れます。URLRequest パラメータの値が与えられると、新しい Sound オブジェクトは指定のサウンドリソースのロードを自動的に開始します。
どのような場合でも、アプリケーションはサウンドのロードの進行状況に注意し、ロード中のエラーを確認する必要があります。たとえば、クリックサウンドが比較的大きい場合、サウンドをトリガーするボタンがクリックされても、サウンドが完全にロードされていないこともあります。ロードされていないサウンドを再生しようとすると、ランタイムエラーが発生する可能性があります。そのため、サウンドが完全にロードされてから、サウンドの再生を開始するアクションを実行する方が安全です。
Sound オブジェクトは、サウンドのロードプロセス中にいくつかのイベントを送出します。アプリケーションはこれらのイベントを監視してロードの進行状況をトラッキングし、サウンドが再生される前に完全にロードするようにします。次の表は、Sound オブジェクトによって送出されるイベントをまとめたものです。
|
イベント |
説明 |
|---|---|
|
open ( |
サウンドのロード処理が開始する直前に送出されます。 |
|
progress ( |
データがファイルまたはストリームから受信されると、サウンドのロードプロセス中に定期的に送出されます。 |
|
id3 ( |
ID3 データが MP3 サウンドで使用できるようになると送出されます。 |
|
complete ( |
すべてのサウンドリソースのデータがロードされると送出されます。 |
|
ioError ( |
サウンドファイルが見つからない場合、またはすべてのサウンドデータが受信される前にロードプロセスが中断されると送出されます。 |
次のコードは、サウンドのロードが完了した後のサウンドの再生方法を示します。
import flash.events.Event;
import flash.media.Sound;
import flash.net.URLRequest;
var s:Sound = new Sound();
s.addEventListener(Event.COMPLETE, onSoundLoaded);
var req:URLRequest = new URLRequest("bigSound.mp3");
s.load(req);
function onSoundLoaded(event:Event):void
{
var localSound:Sound = event.target as Sound;
localSound.play();
}
このコード例では、まず、URLRequest パラメータの初期値を与えずに新しい Sound オブジェクトを作成します。その後、Sound オブジェクトから Event.COMPLETE イベントを監視し、すべてのサウンドデータがロードされると onSoundLoaded() メソッドが実行されます。次に、サウンドファイルの新しい URLRequest 値で Sound.load() メソッドを呼び出します。
サウンドのロードが完了すると onSoundLoaded() メソッドが実行されます。Event オブジェクトのターゲットプロパティは、Sound オブジェクトに対する参照です。Sound オブジェクトの play() メソッドを呼び出すと、サウンドの再生が開始します。
サウンドファイルのサイズが大きく、ロードに時間がかかることがあります。Flash Player では、サウンドを完全にロードしなくてもアプリケーションで再生させることができます。その際に、サウンドデータがどれだけロード済みであるか、また、どれだけのサウンドが再生済みであるかを示すこともできます。
Sound クラスは、ProgressEvent.PROGRESS および Event.COMPLETE の 2 つのイベントを送出するので、サウンドのロードの進行状況を比較的簡単に表示することができます。次の例では、これらのイベントを使用し、ロード中のサウンドの進行情報を表示する方法を示します。
import flash.events.Event; import flash.events.ProgressEvent; import flash.media.Sound; import flash.net.URLRequest; var s:Sound = new Sound(); s.addEventListener(ProgressEvent.PROGRESS, onLoadProgress); s.addEventListener(Event.COMPLETE, onLoadComplete); s.addEventListener(IOErrorEvent.IO_ERROR, onIOError); var req:URLRequest = new URLRequest("bigSound.mp3"); s.load(req); function onLoadProgress(event:ProgressEvent):void { var loadedPct:uint =
Math.round(100 * (event.bytesLoaded / event.bytesTotal)); trace("The sound is " + loadedPct + "% loaded."); } function onLoadComplete(event:Event):void { var localSound:Sound = event.target as Sound; localSound.play(); } function onIOError(event:IOErrorEvent) { trace("The sound could not be loaded: " + event.text); }
このコードは、まず Sound オブジェクトを作成し、次に ProgressEvent.PROGRESS および Event.COMPLETE イベントのリスナーをこのオブジェクトに追加します。Sound.load() メソッドが呼び出され、サウンドファイルから最初のデータが受信されると、ProgressEvent.PROGRESS イベントが発生し、onSoundLoadProgress() メソッドがトリガーされます。
ロード済みのサウンドデータの割合は、ProgressEvent オブジェクトの bytesLoaded プロパティの値を、bytesTotal プロパティの値で除算した数に相当します。同じ bytesLoaded および bytesTotal プロパティは Sound オブジェクトにもあります。上記の例は、サウンドのロードの進行状況に関するメッセージを表示するだけですが、bytesLoaded および bytesTotal 値を使用し、Adobe Flex 2 Framework または Flash オーサリングツールに付属しているようなプログレスバーコンポーネントを簡単に更新することもできます。
この例では、サウンドファイルのロード中に、アプリケーションがどのようにエラーを認識し、対処するかも示します。たとえば、指定のファイル名を持つサウンドファイルが見つからない場合は、Sound オブジェクトによって Event.IO_ERROR イベントが送出されます。前述のコードでは、onIOError() メソッドが実行され、エラー発生時に簡単なエラーメッセージを表示します。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000286.html