SoundPool 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
SoundPool 類別會管理及播放應用程式的音訊資源。
[Android.Runtime.Register("android/media/SoundPool", DoNotGenerateAcw=true)]
public class SoundPool : Java.Lang.Object
[<Android.Runtime.Register("android/media/SoundPool", DoNotGenerateAcw=true)>]
type SoundPool = class
inherit Object
- 繼承
- 屬性
備註
SoundPool 類別會管理及播放應用程式的音訊資源。
SoundPool 是一組聲音範例,可從 APK 內的資源或文件系統中的檔案載入記憶體。 SoundPool 連結庫會使用 MediaCodec 服務將音訊譯碼為原始 16 位 PCM。 這可讓應用程式隨附壓縮數據流,而不需要在播放期間遭受CPU負載和解壓縮的延遲。
音效應該會短,因為它們已預先編碼到記憶體中。 每個譯碼音效在內部限制為一兆位元組的儲存空間,其代表大約5.6秒的44.1kHz立體聲(持續時間以較低的取樣速率或單聲道的通道遮罩成正比更長)。 如果已譯碼的音訊音效超過每一個音效的一 MB 儲存空間,則會截斷。
除了低延遲播放之外,SoundPool 也可以管理一次轉譯的音訊數據流數目。 建構 SoundPool 物件時,maxStreams 參數會設定一次可從這個單一 SoundPool 播放的數據流數目上限。 SoundPool 會追蹤使用中數據流的數目。 如果超過串流數目上限,SoundPool 會根據優先順序自動停止先前播放的數據流,然後依該優先順序內的存留期。 限制串流數目上限有助於限制 CPU 載入,並減少音訊混合會影響視覺效果或 UI 效能的可能性。
您可以藉由設定非零循環值來迴圈音效。 值 -1 會導致音效永遠迴圈。 在此情況下,應用程式必須明確呼叫 stop() 函式來停止音效。 任何其他非零值都會導致音效重複指定的次數,例如值 3 會導致音效播放總計 4 次。
您也可以變更播放速率。 1.0 的播放速率會導致音效以原始頻率播放(必要時重新取樣至硬體輸出頻率)。 2.0 的播放速率會讓音效以原始頻率播放兩倍,而播放速率為 0.5 會導致音效以一半的原始頻率播放。 播放速率範圍是 0.5 到 2.0。
優先順序會低到高,也就是較高的數位是較高的優先順序。 當呼叫 play() 會導致使用中的數據流數目超過建立 SoundPool 時 maxStreams 參數所建立的值時,會使用優先順序。 在此情況下,數據流配置器將會停止最低優先順序數據流。 如果有多個具有相同低優先順序的數據流,它會選擇最舊的數據流來停止。 如果新數據流的優先順序低於所有使用中的數據流,新音效將不會播放,而 play() 函式會傳回零的 streamID。
讓我們檢查一般使用案例:遊戲是由數種遊戲層級所組成。 每個層級都有一組唯一的聲音,只能由該層級使用。 在此情況下,遊戲邏輯應該會在載入第一個層級時建立新的SoundPool物件。 層級數據本身可能包含此層級要使用的音效清單。 載入邏輯會逐一查看呼叫適當 SoundPool.load() 函式的音效清單。 這通常應該在程式中儘早完成,以允許在播放之前將音訊解壓縮為原始PCM格式的時間。
一旦載入音效並播放已啟動,應用程式就可以呼叫 SoundPool.play() 來觸發音效。 播放串流可以暫停或繼續,而且應用程式也可以藉由即時調整多普勒或合成效果的播放速率來改變音調。
請注意,由於資源條件約束而可以停止數據流,所以 streamID 是數據流特定實例的參考。 如果數據流已停止以允許較高優先順序的數據流播放,數據流就不再有效。 不過,應用程式允許在 streamID 上呼叫方法,而不會發生錯誤。 這可能有助於簡化程式邏輯,因為應用程式不需要擔心數據流生命週期。
在我們的範例中,當玩家完成關卡時,遊戲邏輯應該呼叫 SoundPool.release() 來釋放使用中的所有原生資源,然後將 SoundPool 參考設定為 null。 如果播放程序開始另一個層級,則會建立新的 SoundPool、載入音效,並播放繼續播放。
的 android.media.SoundPool
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
SoundPool(Int32, Stream, Int32) |
已淘汰.
建構函式。 |
SoundPool(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
屬性
Class |
傳回這個 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
JniPeerMembers |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
PeerReference |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
方法
AutoPause() |
暫停所有作用中的數據流。 |
AutoResume() |
繼續所有先前使用中的數據流。 |
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
Dispose() |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
Dispose(Boolean) |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
JavaFinalize() |
當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。 (繼承來源 Object) |
Load(AssetFileDescriptor, Int32) |
從資產檔案描述元載入音效。 |
Load(Context, Int32, Int32) |
從指定的 APK 資源載入音效。 |
Load(FileDescriptor, Int64, Int64, Int32) |
從 FileDescriptor 載入音效。 |
Load(String, Int32) |
從指定的路徑載入音效。 |
LoadAsync(AssetFileDescriptor, Int32) |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
LoadAsync(Context, Int32, Int32) |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
LoadAsync(FileDescriptor, Int64, Int64, Int32) |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
LoadAsync(String, Int32) |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
Pause(Int32) |
暫停播放數據流。 |
Play(Int32, Single, Single, Int32, Int32, Single) |
從聲音標識碼播放音效。 |
Release() |
釋放 SoundPool 資源。 |
Resume(Int32) |
繼續播放數據流。 |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
SetLoop(Int32, Int32) |
設定迴圈模式。 |
SetOnLoadCompleteListener(SoundPool+IOnLoadCompleteListener) |
設定 OnLoadCompleteListener 的回呼勾點。 |
SetPriority(Int32, Int32) |
變更數據流優先順序。 |
SetRate(Int32, Single) |
變更播放速率。 |
SetVolume(Int32, Single, Single) |
設定數據流磁碟區。 |
Stop(Int32) |
停止播放數據流。 |
ToArray<T>() |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
Unload(Int32) |
從聲音標識碼卸除音效。 |
UnregisterFromRuntime() |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
Wait() |
讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。 (繼承來源 Object) |
事件
LoadComplete |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
明確介面實作
IJavaPeerable.Disposed() |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
SoundPool 類別會管理及播放應用程式的音訊資源。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
SoundPool 類別會管理及播放應用程式的音訊資源。 |
GetJniTypeName(IJavaPeerable) |
SoundPool 類別會管理及播放應用程式的音訊資源。 |