android - AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

标签 android audio media-player soundpool audiotrack

如果我需要能够使用 AudioTrack、SoundPool 或 MediaPlayer:

  • 播放多个持续时间不同的音频文件,例如 5 到 30 秒。
  • 独立设置右/左声道的音量。
  • 应用音效,例如混响/失真。

那么,我应该使用哪个 API?

另外,我在 AudioTrack API 上找不到太多文档。
有谁知道我在哪里可以找到示例?

最佳答案

SoundPool实际上是一个混音器。
它只能播放短片,无论它们是编码为“ogg”还是“mp3”还是未压缩。 SoundPool 始终将它们存储在未压缩的内存中,并注意限制为 1 MB。如果您的剪辑在内存中太大,SoundPool 将静音,您将收到以下错误:“AudioFlinger 无法创建音轨。状态:-12”

MediaPlayer 播放流并实时解码。
它可以播放更长的剪辑,但它需要处理器能力。

结论:
声池:
= 更适合短音频效果(点击、爆炸、声音循环)。
= 可以同时播放更多 fragment ,并具有音量和速度控制。它还可以循环播放。
媒体播放器
= 更适合背景音乐
= 无法播放已播放的相同声音 fragment 。它需要完全完成剪辑才能再次播放。

注意:
如果剪辑未完全加载和解码,您将无法播放 SoundPool 中的音乐。所以你必须使用 OnLoadCompleteListener(Android 10 或更高版本)来检查它。如果您在解码之前尝试播放声音,SoundPool 将静音。 MediaPlayer 不会遇到这些问题。

关于android - AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13527134/

相关文章:

android - 如何在android/eclipse中使按钮的颜色像玻璃的颜色

android - 当我键入 'ThankYou' 时,像自动完成结果这样的自定义 MultiAutoCompleteTextView 必须建议我 'TY'

android - 动态加载 aar 库

java - 多次打开/关闭时切换按钮崩溃

android - 如何从他的号码中获取联系人的姓名

c# - 尝试在音频播放代理中播放音频时出错。 System.SystemException:HRESULT = 0xC00D001A

java - 如何在程序运行时播放背景音乐?在java中

javascript - 全面的 html5 音频 API

Android 媒体播放器播放/暂停按钮

java - 在 android 上播放本地 m3u8 文件显示 setDataSourceFD 失败。 : status=0x80000000