如果我需要能够:
- 播放多个不同长度的音频文件,如5到30秒。
- 分别为左/右声道设置音量。
- 应用音效(如混响/失真)。
那么,我应该使用AudioTrack、SoundPool还是MediaPlayer API呢?
此外,我找不到有关AudioTrack API的文档。 有人知道在哪里可以找到示例吗?
如果我需要能够:
那么,我应该使用AudioTrack、SoundPool还是MediaPlayer API呢?
此外,我找不到有关AudioTrack API的文档。 有人知道在哪里可以找到示例吗?
SoundPool实际上是一种音频混合器。
它只能播放短片段,无论它们是作为“ogg”还是“mp3”编码,或者是未压缩的。 SoundPool总是将它们以未压缩的形式存储在内存中,请注意限制为1 MB。 如果您的剪辑在内存中太大,SoundPool将会静音,并显示以下错误:“AudioFlinger无法创建轨道。 状态:-12”
MediaPlayer播放流并实时解码。
它可以播放更长的片段,但需要处理器功率。
结论:
SoundPool:
= 更适用于短音效(点击,爆炸声,声音循环)。
= 可以同时播放更多片段,并具有音量和速度控制。 它还可以播放循环。
MediaPlayer
= 更适用于背景音乐
= 当已经播放相同的音频剪辑时,无法再次播放该剪辑。 它需要完全完成剪辑后才能再次播放。
注意:
如果剪辑未完全加载和解码,则无法从SoundPool播放音乐。 因此,您必须使用OnLoadCompleteListener(Android 10或更高版本)进行检查。 如果在声音解码之前尝试播放音频,则SoundPool将会静音。 MediaPlayer不会出现这些问题。
播放音频
如果你想在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/
MediaPlayer不支持为多个声道设置音量。
我认为在这里SoundPool是唯一适合你需要的东西。
编辑:是的,你需要一个SoundPool,请阅读此文章: https://blog.csdn.net/chen_cheng_fly/article/details/7357350