Android低延迟音频接口?

20

在Android设备上同时播放音频的选项有哪些?使用预设SDK能否得到还算不错的效果,或者这太过苛求?文档声称SoundPool类能够以相对良好的性能同时播放多个声音,但在模拟器和真机上运行一些测试后,它似乎表现出较弱的性能。也许有什么技巧可以解决这个问题,或者我必须使用更低级别的API来处理这种情况?我已经尝试了使用单个声音池加载多个样本,也尝试了多个声音池分别管理单个样本。我已经预加载了所有东西,所以当我尝试播放时,除了调用SoundPool.play()之外,没有其他代码被执行。

4个回答

6

Android 2.3现在支持通过OpenSL对音频API进行本地访问,以实现低延迟应用。

然而,并非所有硬件设备都具有低延迟音频特性。因此,需要低延迟音频的应用程序应该在清单中指定以下内容来过滤不支持它的设备,以在Android市场上进行筛选:

<uses-feature android:name="android.hardware.audio.low_latency"/>

我现在有一部配备2.2系统和1Ghz处理器的手机,并且我看到了很多应用程序做得还不错。经过一些研究,我相信它们正在解码来自音频文件的PCM数据,并将其直接写入AudioTrack中,这已经足够低延迟以用作基本的音频序列器/播放器。 - Rich
@Rich:我已经尝试了2.2和1GHz手机,当采样率为8kHz,单声道时,Audiotrack给我的最小缓冲区大小是1400。这相当于175毫秒。对于我想要的功能来说,这太慢了。 - AudioDroid
7
这是一种营销伎俩-让人们认为自己“跟上了苹果的步伐”。它本应该被称为“中等延迟”。 我认为很少有用例能从50毫秒的延迟中受益。对于适当的音频响应来说太慢了,并且对于其他任何事情都是不必要的要求。 - Jon Biz
如果这是个噱头,那它并不是一个非常成功的噱头。直到最近,没有任何设备支持该功能。 - Ian Ni-Lewis

6
有许多人对Andriod上的低延迟音频感兴趣。以下是我关注的主题:

  • 今年I/O会议上涉及音频相关主题的Wave
  • Android 问题中有关于支持NDK中低延迟音频的内容。

这篇文章表明,Android设备有ALSA驱动程序(能够进行低延迟音频处理),但似乎低延迟功能不能通过NDK向应用程序公开。

尽管我没有直接在Android上体验过,但据我所读,低延迟(小于约10毫秒)目前还不是现实。请发表任何相反的经验!


4
我没有任何Android经验,但我曾为Windows Mobile编写过类似的东西。这些设备本身当然能够在实时低延迟(低于25毫秒)下混合多个声音,虽然“多个”意味着可能只有4或5个(而不是30到40个)。然而,我只能通过编写自己的代码来满意地实现这一点,该代码在内部进行混音,并仅访问低级音频播放API以播放最终混合输出。在.NET Compact Framework中播放声音的更高级方法理论上能够实现多声部,但在实践中它们运作得非常糟糕(出现很多故障、卡顿和失真)。
我怀疑Android音频SDK也存在同样的问题,因此您可能需要编写自己的代码。

我愿意尝试你在这里提出的低延迟音频录制/播放建议。但是,我认为我需要比当前答案更多的指导。你能否更详细地描述一下你在WinPhone上做了什么? - Tae-Sung Shin

1
请查看我的回答Android:声音API(确定性,低延迟)
Android设备的延迟取决于硬件和特定设备的驱动程序,而不是API。启用低延迟播放会消耗更多电量并增加音频故障的可能性,因此许多OEM会有意扩大其播放缓冲区。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接