Как усилить аудио данные в гобо на методе AudioReady? - PullRequest
1 голос
/ 27 марта 2019

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

И когда я пытаюсь усилить аудиоданные следующим образом:

auto *outputData = static_cast<float *>(audioData);
    for (int i = 0; i < numFrames*channelCount; ++i){
        outputData[i] = outputData[i]*2;

    }

Это сильно искажается. Любая помощь будет оценена.

1 Ответ

1 голос
/ 02 апреля 2019

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

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

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

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

...