Android中播放,暂停/停止和设置音频音量的相对延迟

时间:2015-03-15 17:25:44

标签: android audio latency

我的问题是关于在Android中播放,暂停/停止和设置音频音量的相对延迟。具体来说:暂停/停止音频片段与播放音频片段的延迟相同还是更低,同样,设置片段(或系统音量)的音量与播放音量相同还是更低。< / p>

对于上下文,假设在Android中播放音频片段的延迟为150ms,即在T = 0m时执行SoundPool.play,最终用户在T = 150ms时听到声音。

在T = 200m时,程序执行SoundPool.pause。如果暂停等待时间也是150米,这意味着最终用户在听到200米的剪辑后,T = 350米才会听到暂停。但是,如果暂停等待时间为50米,那么声音将在T = 250米处停止,此时最终用户只有100米。

显然,设备之间的延迟不是恒定的,准确的或一致的,所以更准确地说,我真正要问的是Android是否使用单独的路径或技术来暂停/停止/改变音频音量(程序中的任何一个)特定的或系统范围的音量,其本质上比音频播放方式的延迟更低。

1 个答案:

答案 0 :(得分:1)

设置播放需要更多时间,因为必须初始化播放以下操作需要路径

  1. 找到媒体文件的MIME类型,这需要解析媒体格式并查找特定标题
  2. 初始化音频解码器(通常是硬件),OMX解码器必须加载到内存中
  3. 设置缓冲区说在解析器中分配10个缓冲区,在解码器中分配10个缓冲区。
  4. 设置解析器和解码器之间的路径以及播放音频设备(扬声器)
  5. 播放发生在此步骤,数据从解析器缓冲区流向解码器缓冲区,当解码器缓冲区被填满时,OMX(解码器框架)将通知播放器引擎,引擎将缓冲区数据传递给AudioManager - &gt; AudioTrack等。
  6. 解码器将再次处理来自Parser缓冲区的数据,此过程一直持续到EOF或用户按下暂停/停止
  7. 在暂停期间,延迟应该比播放低得多,因为只有暂停数据,但缓冲区不会被释放。

    在停止缓冲区释放并且播放器也被释放时,如果用户需要再次播放,需要再次播放相同的过程。

    音量调高和调低简单调用AudioManager来调整呼叫铃声。所以它的延迟应该低于播放/停止