Я использую FFMPEG avcodec_decode_audio
для декодирования аудио входных файлов различных типов. Полученные образцы имеют тип SHORT.
Эти сэмплы обрабатываются другой библиотекой, которая требует сэмплы во входном формате FLOAT. Наконец, для воспроизведения (на Android) мне нужно снова преобразовать сэмплы FLOAT в SHORT:
short* inputSamples = ...;
float* tmpBuffer = new float[nrInputSamples];
for (int i=0; i<nrInputSamples; i++)
tmpBuffer[i] = inputSamples[i]/32767.0f;
//process audio here
for (int i=0; i<nrInputSamples; i++)
inputSamples[i] = tmpBuffer[i]*32767.0f;
Есть ли более эффективный способ сделать это (например, заставить ffmpeg декодировать аудио в сэмплы FLOAT)?
С Уважением,
Используйте библиотеку swresample, которая включена в библиотеку ffmpeg, она существует для таких случаев, как эта. Вы можете найти примеры того, как это сделать, в их хранилище кода.
Других решений пока нет …