我应该使用AudioTrack,SoundPool还是MediaPlayer?

Fed*_*ede 27 audio android media-player audiotrack

我需要播放多个音频文件,持续时间不同,如5到30秒.我想为右/左声道独立设置音量,也可以应用效果,如Reverb或Distortion.那么,我应该使用哪种API?

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

Elv*_*vic 52

声音池实际上是音频混音器.它可以播放短片段,无论它们是编码为ogg还是mp3,或者它们都是未压缩的.声音池始终将它们存储在未压缩的内存中,您必须知道限制为1 MB.如果你的剪辑内存太大,声音池会沉默,你会发现以下错误:"AudioFlinger无法创建曲目.状态:-12"媒体播放器播放流并实时解码.因此它可以播放更长的剪辑但需要处理器能力.

因此,媒体播放器更适合背景音乐,而声音池可以更好地用于短音频效果(点击,爆炸,声音循环).此外,声音池可以同时播放更多剪辑,并具有音量和速度控制.它也可以播放循环.

一个注意事项:如果剪辑未完全加载和解码,则无法播放声音池中的音乐.因此,您必须使用OnLoadCompleteListener(Android 10或更高版本)进行检查.如果您在解码之前尝试播放声音,则声音池将静音.

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


Har*_*sha 9

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

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

我认为这是(部分原因)人们说SoundPool更适合游戏等短音.希望这可以帮助:)


小智 9

播放音频?

如果您想在 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/

?

?


Goo*_*oot 3

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

我认为 SoundPool 是唯一能满足您需求的东西。

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