Как усилить аудио данные в гобо на методе 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
в противном случае вы получите обтекание и искажение.