如何在Oboe onAudioReady方法中放大音频数据?

时间:2019-03-27 19:06:35

标签: android c++ audio oboe

我想使用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;

    }

它严重失真。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在LiveEffect样本中,记录和回放流均为AudioFormat::I16,即16位整数。在此行上,您要投射到float

auto *outputData = static_cast<float *>(audioData);    

这将导致您听到的失真,因此,将其投射为int16_t并乘以恒定的幅度即可。

请务必检查放大后的样本值是否不超过INT16_MAX,否则会出现环绕和失真的情况。