Android 录音延迟
我正在为Android编写一个应用程序,我的目标是记录用户的歌声。录音后,我播放与器乐同步的唱片(这不是问题) 问题是,当我在播放音频的同时开始录制时,我怀疑录制开始有延迟:(当我稍后尝试播放录制时,当录制也录制了乐器时,这一点很明显)。Nexus5上的延迟可能在300毫秒左右 我的查询是:Android 录音延迟,android,audio,audio-recording,Android,Audio,Audio Recording,我正在为Android编写一个应用程序,我的目标是记录用户的歌声。录音后,我播放与器乐同步的唱片(这不是问题) 问题是,当我在播放音频的同时开始录制时,我怀疑录制开始有延迟:(当我稍后尝试播放录制时,当录制也录制了乐器时,这一点很明显)。Nexus5上的延迟可能在300毫秒左右 我的查询是: 所有安卓设备(4.0+)上的延迟是否为常数 如何计算无延迟 在移动设备上打开录音并缩放是否可以接受 到乐器(可能涉及音频解码/编码) 如何消除延迟?正如@Lukos已经提到的,延迟很可能取决于处理速度。
- 所有安卓设备(4.0+)上的延迟是否为常数
- 如何计算无延迟
- 在移动设备上打开录音并缩放是否可以接受 到乐器(可能涉及音频解码/编码)
如何消除延迟?正如@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,但不确定这是否会在录制开始后立即向您发出通知,或者是在录制实际开始之前发出通知。您必须在那里做一些测试。是所有Android设备(4.0+)上的延迟常数吗? 是,因为至少音频往返延迟 您可以确保延迟不是恒定的,因为它还取决于:
- 实际的音频硬件编解码器:某些编解码器启动缓慢。例如,看看
- 音频在处理链中的缓冲方式:4096个样本(the)的缓冲区大小显然会比1024个样本的缓冲区增加更多的延迟
我建议您使用更简单的解决方案:在UI上提供一个滑块,允许用户调整乐器和录音之间的混合(在后台使用
AudioTrack.setVolume
)。通过这种方式,您可以确定乐器/声音的比例确实符合用户的口味。我认为延迟不是恒定的,我认为它取决于处理速度。也许你可以在滴答声中加上一个计数之类的。我一回去工作就会试试这个。我会让你了解最新情况。谢谢你的回答!很抱歉没有给你赏金。我用你们两个回答的信息来解决我的问题。我感到很难过,因为我不能分享一半的赏金。谢谢你的详细回答。我正在实施杰弗里的解决方案。你的信息真的很有价值!