在Android设备上以最少的延迟播放同步音频有哪些选择?我是否会从罐装SDK中获得一些不错的东西,还是要求太多?该文档声称SoundPool类能够以相对良好的性能同时播放多个声音,但在模拟器和物理设备上运行一些测试后,它似乎相当弱。可能有一个技巧,或者我是否必须为更低级别的api做这种事情?我尝试使用单个声音池加载多个样本,我尝试了多个声音池,每个声音池管理一个样本。我正在预加载所有内容,因此当我尝试播放时,除了调用SoundPool.play()之外,我没有执行其他代码。
答案 0 :(得分:6)
许多人对Andriod的低延迟音频感兴趣。以下是我关注的话题:
此post表明Android设备具有ALSA驱动程序(能够提供低延迟音频) - 但似乎低延迟功能不会通过NDK向应用程序公开。
我对Android没有直接的经验,但从我所读到的,低延迟(低于<10ms左右)尚未成为现实。请发布相反的经验!
答案 1 :(得分:6)
Android 2.3现在支持对低延迟应用程序的本地访问音频API(通过OpenSL)。
但是,并非所有硬件设备都具有低延迟音频功能配置文件。因此,通过在清单中指定以下内容,需要低延迟音频shouuld过滤设备的应用程序在Android市场中不支持它:
<uses-feature android:name="android.hardware.audio.low_latency"/>
答案 2 :(得分:4)
我没有任何Android体验,但我为Windows Mobile编写了类似的东西。设备本身当然能够以低延迟(低于25毫秒)实时混合多个声音,尽管“多个”我的意思是4或5(而不是30到40)。但是,我只能通过编写自己的内部混合代码并访问低级音频播放API来实现最终的混合输出,从而能够令人满意地实现这一目标。在.Net Compact Framework中播放声音的高级方法在理论上能够复音,但在实践中它们工作可怕(很多毛刺,口吃和失真)。
我怀疑Android音频SDK存在同样的问题,因此您可能需要自己编写。
答案 3 :(得分:1)
请参阅我对Android: sound API (deterministic, low latency)的回答。
Android设备的延迟较少取决于API,而更多取决于该特定设备的硬件和驱动程序。启用低延迟播放会消耗更多功率并增加音频故障的可能性,因此许多OEM会故意放大播放缓冲区。