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

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

除了低延迟播放外,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 文档。

此页面的部分内容是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的术语使用。

构造函数

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 类管理和播放应用程序的音频资源。

适用于