您應用程式存取聲音資料的功能有可能因為 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 編寫工具附加到時間軸中影格的聲音,都可能會再次開始播放。