我想使用Oboe Library放大麦克风记录的audioData。 我这样创建了AudioEngine.cpp:https://github.com/google/oboe/blob/master/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp 这是具有audioData的类:
DataCallbackResult
AudioEngine::onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) {
/* some code */
// add your audio processing here
return DataCallbackResult::Continue;
}
当我尝试像这样放大audioData时:
auto *outputData = static_cast<float *>(audioData);
for (int i = 0; i < numFrames*channelCount; ++i){
outputData[i] = outputData[i]*2;
}
它严重失真。任何帮助将不胜感激。
答案 0 :(得分:1)
在LiveEffect样本中,记录和回放流均为AudioFormat::I16
,即16位整数。在此行上,您要投射到float
:
auto *outputData = static_cast<float *>(audioData);
这将导致您听到的失真,因此,将其投射为int16_t
并乘以恒定的幅度即可。
请务必检查放大后的样本值是否不超过INT16_MAX
,否则会出现环绕和失真的情况。