Share via


SoundPool 類別

定義

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 類別會管理及播放應用程式的音訊資源。

SoundPool 是一組音效範例,可從 APK 內的資源或檔案系統中的檔案載入記憶體中。 SoundPool 程式庫會使用 MediaCodec 服務將音訊解碼為原始 16 位 PCM。 這可讓應用程式隨附壓縮資料流程,而不需要在播放期間發生 CPU 負載和解壓縮延遲。

音效應該會簡短,因為它們已預先編碼為記憶體。 每個解碼的音效在內部限制為一 MB 儲存空間,這表示大約 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 () 函式會傳回 0 的 streamID。

讓我們檢查一般使用案例:遊戲是由數種遊戲層級所組成。 針對每個層級,只有該層級才使用一組唯一音效。 在此情況下,遊戲邏輯應該會在載入第一個關卡時建立新的 SoundPool 物件。 層級資料本身可能包含此層級要使用的音效清單。 載入邏輯會逐一查看呼叫適當 SoundPool.load () 函式的音效清單。 這通常應該在程式中提早完成,以允許在播放需要音訊之前將音訊解壓縮成原始 PCM 格式的時間。

載入並播放音效之後,應用程式就可以呼叫 SoundPool.play () 來觸發音效。 播放資料流程可以暫停或繼續,而應用程式也可以藉由即時調整 doppler 或合成效果的播放速率來改變音調。

請注意,由於資料流程可能會因為資源條件約束而停止,所以 streamID 是資料流程特定實例的參考。 如果資料流程停止以允許較高優先順序的資料流程播放,資料流程就不再有效。 不過,允許應用程式在 streamID 上呼叫方法,而不會發生錯誤。 這可能有助於簡化程式邏輯,因為應用程式不需要擔心資料流程生命週期。

在我們的範例中,當玩家完成關卡時,遊戲邏輯應該呼叫 SoundPool.release () 以釋放使用中的所有原生資源,然後將 SoundPool 參考設定為 null。 如果玩家啟動另一個關卡,則會建立新的 SoundPool、載入音效,並播放繼續。

android.media.SoundPool JAVA 檔。

此頁面的部分是根據所建立和共用的工作進行修改,並根據 2.5 屬性授權中所述的詞彙來使用。

建構函式

SoundPool(Int32, Stream, Int32)
已淘汰.

建構函式。

SoundPool(IntPtr, JniHandleOwnership)

建立 JNI 物件的 Managed 標記法時使用的建構函式;由執行時間呼叫。

屬性

Class

傳回這個 Object 的執行時間類別。

(繼承來源 Object)
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)

讓目前的執行緒等到喚醒為止,通常是 em < notified/em > 或 < em > interrupted < /em > ,或直到經過一定數量的即時為止。 <>

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的執行緒等到喚醒為止,通常是 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 類別會管理及播放應用程式的音訊資源。

適用於