录音延迟

时间:2014-11-05 10:44:34

标签: android audio audio-recording

我正在为Android编写应用程序,我的目标是记录用户的歌声。录音后,我播放与乐器同步的录音(这不是问题)。

问题是当我在播放音频的同时开始录音时我怀疑录音开始有延迟:(当录音录制乐器后我尝试播放录音时会很明显) 。关于nexus 5,延迟可能约为300毫秒。

我的询问是:

  • 是所有Android设备上的延迟常数(4.0 +)?
  • 如何计算没有involving complex methods的延迟?
  • 在移动设备上可以接受,打开录音并进行缩放 有助于(有可能涉及音频解码/编码)?

如何摆脱延迟?

2 个答案:

答案 0 :(得分:4)

正如@Lukos已经提到的,延迟很可能取决于处理速度。启动录像机只需要一些时间。

我相信你最好的解决方案是首先启动录音机,然后在你知道录音机启动后立即启动音频播放。这样你的录音会有一些延迟,但至少你是同步的。您需要确保已初始化播放,因此可以尽快启动。

这可以使用AudioRecorder回调来实现。

// Assuming you have a recorder objects defined somewhere
AudioRecord recorder;

recorder.setNotificationMarkerPosition(1);
recorder.setRecordPositionUpdateListener(new AudioRecord.OnRecordPositionUpdateListener() {
    @Override
    public void onMarkerReached(AudioRecord recorder) {
        // start audio playback
    }

    @Override
    public void onPeriodicNotification(AudioRecord recorder) {

    }
});

请注意,我不确定标记位置。您也可以使用0,不确定在录制开始后是否立即通知您,或者是否在实际开始之前通知您。你必须在那里做一些测试。

答案 1 :(得分:4)

是所有Android设备上的延迟常数(4.0 +)?

The delaynot constant,因为至少音频往返延迟is not constant

您可以确定延迟不是恒定的,因为它还取决于:

如何在不涉及复杂方法的情况下计算延迟? You can't.(没有复杂的方法)。

AudioTrack API报告的音频延迟仅是软件延迟。和measuring the latency is not a simple task一样,您可以看到in the official documentation

如何摆脱延迟?

这是一个好消息:你可能不需要摆脱延迟,只要你在录制完成后就开始播放。

杰弗里的解决方案是一个很好的开始。请注意,您需要读取()数据,否则您的回调将不会被调用。

在移动设备上是否可以接受,打开录音并将其缩放为乐器(可能涉及音频解码/编码)?

AudioTrack.setVolume()为您提供了一种扩展音轨的简单方法。自动查找缩放因子可能非常棘手:您需要估计录音的响度以及乐器的响度。

我建议你使用一个更简单的解决方案:在你的用户界面上提供一个滑块,允许你的用户调整乐器和录音之间的混音(在后台使用AudioTrack.setVolume)。这样,您可以确保乐器/语音比率真正符合用户的口味。

相关问题