Как усилить аудио данные в гобо на методе AudioReady?

Я хочу усилить аудиоданные, которые записываются микрофоном с помощью библиотеки гобоя. Я создал 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 ответ

Решение

В примере LiveEffect потоки записи и воспроизведения AudioFormat::I16 т.е. 16-битные целые числа. На этой линии вы читаете float:

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

Это вызовет искажение, которое вы слышите, поэтому вместо этого просто int16_t и умножить на постоянную амплитуду.

Убедитесь, что увеличенное значение выборки не выше INT16_MAX в противном случае вы получите обтекание и искажение.

Другие вопросы по тегам