恢复时的Android AudioTrack延迟

时间:2014-05-24 14:42:10

标签: java android

我的应用程序需要经常暂停和恢复AudioTrack,并且此问题已在多台设备上进行测试和查看。播放和暂停音轨时,几秒钟内不做任何事情,然后恢复音频,然后延迟约0.3秒。如果您随后暂停并立即恢复,则不会有任何延迟。

这里有没有延迟的logcat :(来自cm-11-20140521-NIGHTLY-i9500)

D/AudioFlinger( 2578): start(4098), calling pid 13180 session 3204
D/AudioFlinger( 2578): PAUSED => RESUMING (4098) on thread 0xb730ae40

这里有延迟时的logcat:

D/AudioFlinger( 2578): start(4098), calling pid 13180 session 3204
D/AudioFlinger( 2578): PAUSED => RESUMING (4098) on thread 0xb730ae40
V/audio_hw_primary( 2578): start_output_stream: starting stream
V/audio_hw_primary( 2578): start_output_stream: stream out device: 2, actual: 2

而且我认为导致延迟的start_output_stream事件或GC。有谁知道如何解决这个问题?

P.S。这是背景代码:

public boolean onTouch(View view, MotionEvent motionevent) {
    switch (motionevent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            pressed = true;
            (new Thread(new Runnable() {
                public void run() {
                    /* Generate savedTrack */
                    if (pressed) savedTrack.play();
                }
            })).start();
            return true;
        case MotionEvent.ACTION_UP:
            pressed = false;
            if (savedTrack != null) savedTrack.pause();
            return true;
    }
    return false;
}

1 个答案:

答案 0 :(得分:0)

好的事实证明,如果一段时间没有播放STREAM_MUSIC音频,输出设备/流将自行关闭并在恢复音频时导致延迟。因此解决方案很简单:当应用程序处于前台时,在后台播放静音循环轨道。

我注意到的另一件事是,如果你的AudioTrack小于16个样本,它就不会循环。希望这有帮助。