Уменьшение амплитуды вывода из ExtAudioFileRead
Я пытаюсь уменьшить амплитуду вывода ExtAudioFileRead перед сохранением его в файл. Вот мой оригинальный код:
AudioBufferList convertedData;
convertedData.mNumberBuffers=1;
convertedData.mBuffers[0].mNumberChannels=mySettings->outputFormat.mChannelsPerFrame;
convertedData.mBuffers[0].mDataByteSize=outputBufferSize;
convertedData.mBuffers[0].mData=outputBuffer;
frameCount=packetsPerBuffer;
CheckError(ExtAudioFileRead(mySettings->inputFile,
&frameCount,
&convertedData)
Я подумал перебрать convertData.mBuffers[0].mData, умножая каждую выборку на дробь, но это тип "void". Любые идеи будут потрясающими, спасибо за чтение!
РЕДАКТИРОВАТЬ:
Вот путь, по которому я иду сейчас:
UInt8 *littleBuffer=(UInt8*)malloc(sizeof(UInt8)*outputBufferSize);
Float32 *signalData=(Float32*)convertedData.mBuffers[0].mData;
for (int i=0;i<outputBufferSize;i++){
Float32 frameData=signalData[i];
littleBuffer[i]=0.5*(UInt8)frameData;
}
Выходной файл определенно не является масштабированной версией ввода, но я думаю, что это может быть связано с неправильным выбором переменных выше.
1 ответ
Решение
Понял. Заменяя littleBuffer[i]=0.5*(UInt8)frameData;
с кодом ниже, аудио масштабируется, как и ожидалось.
float frameData=signalData[i];
if (frameData>127){
frameData=255-frameData;
frameData*=scaleFactor;
frameData=255-frameData;
}else{
frameData*=scaleFactor;
}
littleBuffer[i]=(int)frameData;
По общему признанию, есть некоторый шум после масштабирования - я думаю, что это шум квантования, связанный с низкой скоростью передачи данных.