声音文件可能很大并需要很长时间进行加载,在通过 Internet 加载声音文件时尤为如此。应用程序可以在完全加载声音之前播放声音。您可能需要向用户指示已加载了多少声音数据以及已播放了多少声音。
Sound 类调度以下两个事件可使显示声音加载进度变得相对简单:
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
属性后的值。Sound 对象上也提供了相同的
bytesLoaded
和
bytesTotal
属性。
此示例还说明了应用程序在加载声音文件时如何识别并响应出现的错误。例如,如果找不到具有给定文件名的声音文件,则 Sound 对象将调度一个
ioError
事件。在上面的代码中,当发生错误时,将执行
onIOError()
方法并显示一条简短的错误消息。