我需要播放多个音频文件,持续时间不同,如5到30秒。我想为右/左声道独立设置音量,也可以应用效果,如Reverb或Distortion。那么,我应该使用哪种API?
另外,我在AudioTrack API上找不到太多的文档。你知道我在哪里可以找到例子吗? THX。
答案 0 :(得分:50)
声音池实际上是音频混音器。它可以播放短片段,无论它们是编码为ogg还是mp3,或者它们都是未压缩的。声音池始终将它们存储在未压缩的内存中,您必须知道限制为1 MB。如果你的剪辑内存太大,声音池会沉默,你会发现以下错误: “AudioFlinger无法创建曲目。状态:-12” 媒体播放器实时播放流并对其进行解码。所以它可以播放更长的剪辑但需要处理器能力。
因此,媒体播放器更适合背景音乐,而声音池可以更好地用于短音频效果(点击,爆炸,声音循环)。此外,声音池可以同时播放更多剪辑,并具有音量和速度控制。它也可以播放循环。
一个注意事项:如果剪辑未完全加载和解码,则无法播放声音池中的音乐。因此,您必须使用OnLoadCompleteListener(Android 10或更高版本)进行检查。如果您在解码之前尝试播放声音,则声音池将静音。
媒体播放器不会遇到这些问题。
答案 1 :(得分:8)
除了其他答案所建议的内容之外,MediaPlayer和SoundPool之间的一个区别是,在MediaPlayer中,您无法在播放时播放声音片段(该功能在游戏中尤其有用)。 MediaPlayer需要剪辑完全完成才能再次播放。我认为这些信息是在官方网站上提供的。
然而,SoundPool没有这样的问题,而且我注意到SoundPool在调用它时播放音频(当我使用MediaPlayer时,我有时注意到有点延迟)。
我认为这是(部分原因)人们说SoundPool更适合游戏等短音。 希望这会有所帮助:)
答案 2 :(得分:4)
我会推荐MediaPlayer这么长时间。
您可以在此处找到更多信息:How bad is Android SoundPool? What alternative to use?
答案 3 :(得分:4)
播放音频
如果您想在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/
答案 4 :(得分:2)
MediaPlayer不支持为多个频道设置音量。
我认为SoundPool是唯一适合您需求的东西。
编辑:是的,你需要一个SoundPool,请阅读: http://www.wiseandroid.com/post/2010/07/13/Intro-to-the-three-Android-Audio-APIs.aspx
答案 5 :(得分:0)
还要补充一点,所有其他答案都完全遗漏了。在 MedialPlayer 中,您可以获得媒体完成事件,而在 SoundPool 中则没有完成事件。您必须自己应用逻辑。