サウンドファイルは、大きくて読み込みに長い時間がかかる場合があります。インターネットから読み込む場合は特にその可能性があります。アプリケーションでは読み込みが完了する前にサウンドを再生できます。読み込まれたサウンドの量、および既に再生されたサウンドの量を、ユーザーに示したい場合があります。
Sound クラスが送出する 2 つのイベント、
progress
と
complete
を使用すると、サウンドの読み込みの進行状況を比較的簡単に表示できます。次の例では、これらのイベントを使用して読み込み中のサウンドに関する進行状況の情報を表示する方法を示します。
var s = new Sound();
s.addEventListener(air.ProgressEvent.PROGRESS,
onLoadProgress);
s.addEventListener(air.Event.COMPLETE,
onLoadComplete);
s.addEventListener(air.IOErrorEvent.IO_ERROR,
onIOError);
var req = new air.URLRequest("bigSound.mp3");
s.load(req);
function onLoadProgress(event)
{
var loadedPct = Math.round(100 * (event.bytesLoaded / event.bytesTotal));
air.trace("The sound is " + loadedPct + "% loaded.");
}
function onLoadComplete(event)
{
var localSound = event.target;
localSound.play();
}
function onIOError(event)
{
air.trace("The sound could not be loaded: " + event.text);
}
このコードでは最初に Sound オブジェクトを作成し、
progress
イベントと
complete
イベントのリスナーをこのオブジェクトに追加します。
Sound.load()
メソッドを呼び出して、サウンドファイルから最初のデータを受け取ると、
progress
イベントが発生し、
onSoundLoadProgress()
メソッドがトリガーされます。
読み込みが完了したサウンドデータの割合は、ProgressEvent オブジェクトの
bytesLoaded
プロパティの値を
bytesTotal
プロパティの値で割って得られます。同じ
bytesLoaded
プロパティと
bytesTotal
プロパティは、Sound オブジェクトでも使用できます。
この例では、アプリケーションでサウンドファイル読み込み中のエラーを検出して対応する方法も示されています。例えば、指定ファイル名のサウンドファイルが見つからない場合、Sound オブジェクトは
ioError
イベントを送出します。前述のコードでは、エラーが発生すると
onIOError()
メソッドを実行して簡単なエラーメッセージを表示します。