外部サウンドファイルのロード

Sound クラスの各インスタンスは、特定のサウンドリソースをロードし、再生をトリガーするために使用されるものです。アプリケーションでは、Sound オブジェクトを再利用してサウンドをロードすることはできません。新しいサウンドリソースをロードする必要がある場合は、新しい Sound オブジェクトを作成する必要があります。

ボタンに関連付けるクリック音など、小さなサウンドファイルをロードする場合、アプリケーションは新しい Sound オブジェクトを作成し、次のようにサウンドファイルを自動的にロードできます。

var req:URLRequest = new URLRequest("click.mp3");
var s:Sound = new Sound(req);

Sound() コンストラクタは、最初のパラメータとして URLRequest オブジェクトを受け入れます。URLRequest パラメータの値が与えられると、新しい Sound オブジェクトは指定のサウンドリソースのロードを自動的に開始します。

どのような場合でも、アプリケーションはサウンドのロードの進行状況に注意し、ロード中のエラーを確認する必要があります。たとえば、クリックサウンドが比較的大きい場合、サウンドをトリガーするボタンがクリックされても、サウンドが完全にロードされていないこともあります。ロードされていないサウンドを再生しようとすると、ランタイムエラーが発生する可能性があります。そのため、サウンドが完全にロードされてから、サウンドの再生を開始するアクションを実行する方が安全です。

Sound オブジェクトは、サウンドのロードプロセス中にいくつかのイベントを送出します。アプリケーションはこれらのイベントを監視してロードの進行状況をトラッキングし、サウンドが再生される前に完全にロードするようにします。次の表は、Sound オブジェクトによって送出されるイベントをまとめたものです。

イベント

説明

open (Event.OPEN)

サウンドのロード処理が開始する直前に送出されます。

progress (ProgressEvent.PROGRESS)

データがファイルまたはストリームから受信されると、サウンドのロードプロセス中に定期的に送出されます。

id3 (Event.ID3)

ID3 データが MP3 サウンドで使用できるようになると送出されます。

complete (Event.COMPLETE)

すべてのサウンドリソースのデータがロードされると送出されます。

ioError (IOErrorEvent.IO_ERROR)

サウンドファイルが見つからない場合、またはすべてのサウンドデータが受信される前にロードプロセスが中断されると送出されます。

次のコードは、サウンドのロードが完了した後のサウンドの再生方法を示します。

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