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 负载和解压缩延迟。

声音池声音应短,因为它们已预先编码到内存中。 每个解码的声音在内部限制为一兆字节存储,它表示大约 5.6 秒的 44.1kHz 立体声(持续时间以较低的采样率或单声道的声道掩码成比例更长)。 如果解码的音频声音超过每声一兆字节存储空间,将截断它。

除了低延迟播放之外,SoundPool 还可以管理一次呈现的音频流数。 构造 SoundPool 对象时,maxStreams 参数设置可从此单个 SoundPool 一次播放的最大流数。 SoundPool 跟踪活动流的数量。 如果超过最大流数,SoundPool 将基于优先级自动停止以前播放的流,然后按该优先级内的年龄。 限制最大流数有助于限制 CPU 加载,并减少音频混合会影响视觉对象或 UI 性能的可能性。

可以通过设置非零循环值来循环声音。 值为 -1 会导致声音永远循环。 在这种情况下,应用程序必须显式调用 stop() 函数来停止声音。 任何其他非零值都会导致声音重复指定的次数,例如值 3 会导致声音共播放 4 次。

还可以更改播放速率。 播放速率为 1.0 会导致声音以原始频率播放(如有必要,重新采样到硬件输出频率)。 播放速率为 2.0 会导致声音以原始频率播放两倍,并且播放速率为 0.5 会导致它以一半的原始频率播放。 播放速率范围为 0.5 到 2.0。

优先级运行低到高,即较高的数字是更高的优先级。 调用播放时,使用优先级会导致活动流数超过创建 SoundPool 时 maxStreams 参数建立的值。 在这种情况分配器将停止最低优先级流。 如果有多个具有相同低优先级的流,它将选择最旧的流来停止。 如果新流的优先级低于所有活动流,则新声音不会播放,play() 函数将返回零的 streamID。

让我们检查一个典型的用例:游戏由多个级别的游戏组成。 对于每个级别,只有该级别才使用一组唯一的声音。 在这种情况下,游戏逻辑应在加载第一个级别时创建新的 SoundPool 对象。 级别数据本身可能包含此级别要使用的声音列表。 加载逻辑循环访问调用相应 SoundPool.load() 函数的声音列表。 此过程通常应尽早完成此操作,以便在播放前允许将音频解压缩为原始 PCM 格式的时间。

加载声音并启动播放后,应用程序可以通过调用 SoundPool.play()触发声音。 播放流可以暂停或恢复,应用程序还可以通过实时调整播放速率来调整多普勒或合成效果的音调来改变音调。

请注意,由于由于资源约束,流可以停止,因此 streamID 是对流特定实例的引用。 如果流停止以允许更高的优先级流播放,则流不再有效。 但是,允许应用程序在 streamID 上调用方法,而不会出错。 这有助于简化程序逻辑,因为应用程序不需要担心流生命周期。

在我们的示例中,当玩家完成该级别时,游戏逻辑应调用 SoundPool.release(),以释放正在使用的所有本机资源,然后将 SoundPool 引用设置为 null。 如果玩家启动另一个级别,则会创建一个新的 SoundPool、加载声音以及播放简历。

适用于 . 的 android.media.SoundPoolJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

构造函数

SoundPool(Int32, Stream, Int32)
已过时.

构造函数。

SoundPool(IntPtr, JniHandleOwnership)

创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。

属性

Class

返回此 Object的运行时类。

(继承自 Object)
Handle

基础 Android 实例的句柄。

(继承自 Object)
JniIdentityHashCode

SoundPool 类管理并播放应用程序的音频资源。

(继承自 Object)
JniPeerMembers

SoundPool 类管理并播放应用程序的音频资源。

PeerReference

SoundPool 类管理并播放应用程序的音频资源。

(继承自 Object)
ThresholdClass

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

ThresholdType

此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。

方法

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)

从声音 ID 播放声音。

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)

从声音 ID 中卸载声音。

UnregisterFromRuntime()

SoundPool 类管理并播放应用程序的音频资源。

(继承自 Object)
Wait()

使当前线程等待,直到唤醒它,通常是通过 em 通知/em> 或 <em>interrupted</em>。<><

(继承自 Object)
Wait(Int64)

使当前线程等待直到唤醒,通常是通过 <em>通知</em> 或 <em interrupted</em>>,或直到经过一定数量的实时。

(继承自 Object)
Wait(Int64, Int32)

使当前线程等待直到唤醒,通常是通过 <em>通知</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 类管理并播放应用程序的音频资源。

适用于