Reduciendo la amplitud de la producción de ATRAUDIOFILEREAD
-
21-12-2019 - |
Pregunta
Estoy buscando reducir la amplitud de la salida de ExtentaudiofileRead antes de volver a presentarla.Aquí está mi código original:
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)
Pensé en bucle a través de convertidoData.mBuffers [0] .mdata, multiplicando cada muestra por una fracción, pero es de tipo "vacío".Cualquier idea sería estupenda, gracias por leer!
Editar:
Aquí está el camino que voy a bajar ahora:
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;
}
El archivo de salida definitivamente no es una versión escalada de la entrada, pero creo que esto puede deberse a opciones variables incorrectas anteriores.
Solución
lo tengo.Al reemplazar littleBuffer[i]=0.5*(UInt8)frameData;
con el código a continuación, la escala de audio según se esperaba.
float frameData=signalData[i];
if (frameData>127){
frameData=255-frameData;
frameData*=scaleFactor;
frameData=255-frameData;
}else{
frameData*=scaleFactor;
}
littleBuffer[i]=(int)frameData;
Es cierto que hay un poco de ruido después de la escala: mi mejor conjetura es que es el ruido de cuantificación relacionado con la tasa de bits baja.