我正在开发一个需要低延迟音频 I/O 的 Android DSP 项目。出于这个原因,我正在使用双簧管库。在LiveEffect示例中,演示了同步录制和回放。但是,对于声反馈中和,我需要另一种方式,即首先通过内置扬声器生成白噪声信号,然后使用麦克风记录它。我尝试使用这个被问到的问题修改LiveEffect示例,即将录制流设置为 Master(回调)并为播放流使用非阻塞写入方法。但是当我在 Pixel XL (Android 9.0) 上运行我的代码时出现以下错误:
D/AudioStreamInternalCapture_Client: processDataNow() wait for valid timestamps
D/AudioStreamInternalCapture_Client: advanceClientToMatchServerPosition() readN = 0, writeN = 384, offset = -384
--------- beginning of crash
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x5800003f666c66 in tid 2852 (AAudio_1), pid 2796 (ac.oiinitialize)
这是我的回调:
oboe::DataCallbackResult
AudioEngine::onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames) {
assert(oboeStream == mRecordingStream);
int32_t framesToWrite = mPlayStream->getFramesPerBurst();
oscillator_->whiteNoise(framesToWrite); // write white noise into buffer;
oboe::ResultWithValue<int32_t> result = mPlayStream->write(oscillator_->write(), framesToWrite, 0);
// oscillator_->write() returns const void* buffer;
if (result != oboe::Result::OK) {
LOGE("input stream read error: %s", oboe::convertToText(result.error()));
return oboe::DataCallbackResult ::Stop;
}
// add Adaptive Feedback Neutralization Algorithm here....
return oboe::DataCallbackResult::Continue;
}
我的方法对于生成信号然后通过麦克风捕获它是否正确?如果是这样,有人可以帮我解决这个错误吗?先感谢您。