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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top