【问题标题】:Better to choose SoundPool or MediaPlayer in Android?在 Android 中选择 SoundPool 或 MediaPlayer 更好吗?
【发布时间】:2013-02-14 19:39:04
【问题描述】:

我目前正在尝试制作一个应用程序,其中有触发音频文件的按钮,但这些音频文件是由用户通过文件浏览器活动选择的。听说 MediaPlayer 有延迟等问题,但 SoundPool 有内存限制?

另外,我可以让用户通过从文件浏览器(所选项目)返回一个字符串来设置音频文件,并将其用作音频 API 的路径,无论它是哪个路径?

【问题讨论】:

标签: java android file audio button


【解决方案1】:

SoundPool 如果您尝试播放已加载的文件,速度会更快。因为加载文件需要更多时间,并且文件应该更小以获得更好的性能。

但在您的情况下,用户似乎从FileBrowser 中选择要播放的文件,并且文件大小会有所不同,因此加载时间。改用MediaPlayer

【讨论】:

  • 这也是我的理解,SoundPool 确实适用于游戏之类的东西,您可以在其中存储许多压缩在 apk 中的音效,而不必处理加载后的延迟解压问题。 SoundPool 还使您能够更改播放速率,这对音效很好。
  • 是的,soundPool 的更好之处在于您可以一次加载声音,而无需每次播放时都加载。 MediaPlayer 正好相反。而在 OP 的情况下,MediaPlayer 是完美的。
  • MediaPlayer 在按下按钮和实际播放文件之间存在延迟怎么办?
  • 这种情况总会发生,因为即使是本地流也需要加载。您应该制作一个 ui 进度微调器,让用户知道它正在加载,并将 OnPreparedListener 添加到您的 MediaPlayer 并在调用时移除进度微调器。
【解决方案2】:

SoundPoolMediaPlayer 快,但它有其自身的局限性。

SoundPool 用于小声音,例如您可以在 onClick() 方法中使用的声音,以便每次用户单击任何位置时都会发出咔哒声,因为这些文件已预加载在内存中不要让 CPU 为它的行为而受苦,这就是为什么 SoundPoolMediaPlayer 快的原因。此外,它还可以管理一次渲染的音频流的数量。

MediaPlayer 用于用户可以访问播放、暂停、查找、开始等播放选项的情况。此外,通常对于长音频MediaPlayer 很好,因为您无法在其中加载长音频事先的记忆。您还可以使用MediaPlayer 在互联网上播放音频(如果您打算在将来的版本中这样做,这将很有用)。

在您的情况下,允许用户从文件浏览器活动中播放音频,我建议您选择MediaPlayer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多