可以根据 Flash Player 或 AIR 安全模型来限制应用程序访问声音数据的能力。每种声音受两种不同的安全沙箱的限制:内容本身的沙箱(“内容沙箱”)以及加载和播放声音的应用程序或对象的沙箱(“所有者沙箱”)。对于应用程序安全沙箱中的 AIR 应用程序内容,应用程序安全沙箱中的内容可以访问所有声音(包括从其他域加载的声音)。但是,其他安全沙箱中的内容与在 Flash Player 中运行的内容遵守相同的规则。有关 Flash Player 安全模型概述的详细信息以及沙箱定义,请参阅
安全性
。
内容沙箱控制使用
id3
属性还是
SoundMixer.computeSpectrum()
方法从声音提取详细声音数据。它不会限制声音文件本身的加载或播放。
声音文件的原始域定义了内容沙箱的安全限制。一般来说,如果某个声音文件与加载该文件的应用程序或对象的 SWF 文件位于相同的域或文件夹中,则应用程序或对象具有该声音文件的完全访问权限。如果声音来自不同于应用程序所在域的域,仍可以使用策略文件将其加载到内容沙箱中。
应用程序可以将带有
checkPolicyFile
属性的 SoundLoaderContext 对象作为参数传递给
Sound.load()
方法。如果将
checkPolicyFile
属性设置为
true
,则会通知 Flash Player 或 AIR 在从中加载声音的服务器上查找策略文件。如果存在策略文件,并且它为执行加载的 SWF 文件所在的域授予了访问权限,则该 SWF 文件可以加载声音文件,访问 Sound 对象的
id3
属性以及为加载的声音调用
SoundMixer.computeSpectrum()
方法。
所有者沙箱控制声音的本地播放。所有者沙箱是由开始播放声音的应用程序或对象定义的。
只要当前播放的所有 SoundChannel 对象中的声音符合以下条件,
SoundMixer.stopAll()
方法就会将它们静音:
但在 AIR 应用程序中,应用程序安全沙箱中的内容(随 AIR 应用程序安装的内容)不受这些安全限制的约束。
要查明
SoundMixer.stopAll()
方法是否确实停止了所有播放的声音,应用程序可以调用
SoundMixer.areSoundsInaccessible()
方法。如果该方法返回值
true
,则当前所有者沙箱无法控制播放的某些声音,
SoundMixer.stopAll()
方法不会将其停止。
SoundMixer.stopAll()
方法还会阻止播放头继续播放从外部文件加载的所有声音。但是,如果动画移动到一个新帧,FLA 文件中嵌入的声音以及使用 Flash 创作工具附加到时间轴中的帧上的声音可能会重新开始播放。