2009-09-19 257 views
20

在Android设备上以最少的延迟播放同时音频的选项是什么?我是否会从罐装SDK中获得一半体面的东西,还是那个问题太多了?该文档声称SoundPool类能够以相对良好的性能同时播放多个声音,但在模拟器和物理设备上运行一些测试后,它似乎很弱。是否有一个窍门,或者我必须去一个更低层次的API这种事情?我已经尝试过使用一个加载了多个样本的声音池,并且我尝试了多个声音池,每个声音池管理一个样本。我正在预加载所有内容,因此当我尝试播放时,除了调用SoundPool.play()之外,没有其他代码正在执行。适用于Android的低延迟音频API?

回答

4

我没有任何Android体验,但我为Windows Mobile编写了类似的东西。这些设备本身当然能够以低延迟(低于25毫秒)实时混合多种声音,尽管“多重”我的意思是4或5(而不是30至40)。然而,我只能通过编写我自己的代码来完成这个令人满意的代码,这个代码在内部进行了混音,并且只有在播放最终混合输出时才访问低级音频播放API。在.Net精简版框架中播放声音的更高级的方法在理论上可以用复音,但实际上它们的工作非常糟糕(大量的小故障,口吃和失真)。

我怀疑Android音频SDK有同样的问题,所以你可能必须自己写。

+0

我愿意尝试您在这里为低延迟音频记录/播放提出的建议。但我认为我需要更多的方向而不是当前的答案。你能描述一下你为WinPhone做了什么吗? – 2011-12-07 22:57:59

6

许多人对Andriod的低延迟音频感兴趣。下面是我在下面关于这个专题的主题:从今年的I/O大会上

  • 一个wave涵盖音频相关的主题。有关支持NDK中低延迟音频的Android issue

post表明,Android设备有ALSA驱动程序(能够低延迟音频) - 但似乎低延迟功能不暴露于通过NDK应用。

我对Android没有直接的经验,但是从我读过的内容来看,低延迟(小于< 10毫秒左右)并不是现实。请发布任何相反的经验!

6

Android 2.3现在支持对低延迟应用程序进行音频API(通过OpenSL)的本地访问。

但是,并非所有的硬件设备都会有低延迟的音频功能配置文件。因此,应用程序需要低延迟音频shouuld过滤装置没有被指定清单中的下列证明它在Android市场:

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

我有一个2.2的电话和一个1Ghz的CPU,我看到一堆应用程序做了一半体面的工作。在做了一些研究之后,我确信他们正在从音频文件中解码PCM数据并直接写入AudioTrack,这对于基本的音频音序器/播放器来说足够低的延迟 – Rich 2010-12-10 15:03:44

+0

@Rich:我已经尝试过2.2和一个1GHz的电话和最小的缓冲区大小Audiotrack在8kHz,Mono中给我的是1400。那是175毫秒。对于我想要的功能,这是慢的。 – AudioDroid 2011-06-07 14:59:23

+7

这是一个营销噱头 - 让别人认为是“跟上苹果。它应该被称为“中等延迟”。 我不认为有太多的用例可以从50 ms的延迟中受益。这对于合适的音频来说太慢了,对于其他任何东西都是不必要的。 – 2011-11-30 20:05:49

1

请参阅我的回答Android: sound API (deterministic, low latency)

Android设备的延迟取决于API,更多取决于特定设备的硬件和驱动程序。启用低延迟播放会消耗更多功率并增加音频故障的可能性,因此许多OEM厂商会故意放大播放缓冲区。