【问题标题】:AudioTrack, SoundPool or MediaPlayer Which Should I use?AudioTrack、SoundPool 或 MediaPlayer 我应该使用哪个?
【发布时间】:2012-11-11 16:53:11
【问题描述】:

我需要播放多个持续时间不同的音频文件,例如 5 到 30 秒。我想为右/左声道独立设置音量,并应用效果,如混响或失真。那么,我应该使用哪个 API?

另外,我在 AudioTrack API 上找不到太多文档。你知道我在哪里可以找到例子吗? 谢谢。

【问题讨论】:

    标签: android audio media-player audiotrack


    【解决方案1】:

    声音池实际上是音频混合器。它只能播放短片,无论它们是编码为 ogg 还是 mp3 还是未压缩。声音池总是将它们存储在未压缩的内存中,并且您必须知道限制是 1 MB。如果您的剪辑在内存中太大,声音池将静音,您会发现以下错误: “AudioFlinger 无法创建轨道。状态:-12” 媒体播放器播放流并实时解码。因此它可以播放更长的剪辑,但需要处理器能力。

    所以媒体播放器更适合背景音乐,而声音池更适合短音频效果(点击、爆炸、声音循环)。此外,声音池可以同时播放更多片段,并具有音量和速度控制。还可以循环播放。

    请注意:如果剪辑未完全加载和解码,则无法播放声音池中的音乐。所以你必须使用 OnLoadCompleteListener (Android 10 或以上) 来检查它。如果您在解码之前尝试播放声音,声音池将静音。

    媒体播放器不会遇到这些问题。

    【讨论】:

      【解决方案2】:

      播放音频​

      如果您想在您的 Android 应用中播放音频,有三种 API 可供选择​

      MediaPlayer - 实时流式传输和解码本地或远程文件。适用于长剪辑和背景音乐等应用程序。更多的 CPU 和资源密集型。初始化时间比较长。 MediaPlayer 是一个状态机!​

      SoundPool - 适用于短音频效果或剪辑。未压缩存储在内存中,1MB 限制。播放前必须完全加载剪辑。支持音量和速度控制、循环、同步声音、优先级。​

      AudioTrack - Android 上最低级别的音频 API。它提供了一个您可以配置的通道。向通道推送和拉取字节数据。配置速率、采样、音频格式等,可以解码不支持格式的音频。​

      总之,MediaPlayer 是一个很好的通用类来播放文件,SoundPool 非常适合短音频效果,AudioTrack 可以让你进入低级音频配置。

      ​ 参考 - https://en.proft.me/2018/05/8/how-play-audio-file-android/

      【讨论】:

        【解决方案3】:

        除了其他答案的建议之外,MediaPlayer 和 SoundPool 之间的一个区别是,在 MediaPlayer 中,您不能在已经播放的声音剪辑中播放它(该功能在游戏中尤其有用)。 MediaPlayer 需要剪辑完全完成才能再次播放。我认为官方网站上提供了这些信息。

        但是,SoundPool 没有这样的问题,而且我注意到 SoundPool 仅在调用时播放音频(我有时注意到在使用 MediaPlayer 时有轻微延迟)。

        我认为这是(部分)人们说 SoundPool 更适合短声音(例如游戏)的原因。 希望这会有所帮助:)

        【讨论】:

          【解决方案4】:

          MediaPlayer 不支持为多通道设置音量。

          我认为 SoundPool 是这里唯一适合您需求的东西。

          编辑:是的,您需要一个 SoundPool,请阅读以下内容: https://blog.csdn.net/chen_cheng_fly/article/details/7357350

          【讨论】:

          【解决方案5】:

          还要补充一点,所有其他答案都完全错过了。在 MedialPlayer 中,您可以获得媒体完成事件,而在 SoundPool 中没有像完成事件那样的东西。您必须自己应用逻辑。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-01-27
            • 2012-03-10
            • 2011-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多