Question

Je cherche à réduire l'amplitude de la sortie d'ExtAudioFileRead avant de la réenregistrer dans un fichier.Voici mon code d'origine :

    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)

J'avais pensé à boucler via convertedData.mbuffers [0] .mdata, multipliant chaque échantillon par une fraction, mais c'est de type "vide". Toutes les idées seraient formidables, merci d'avoir lu!

MODIFIER:

Voici le chemin que je suis en train de suivre maintenant :

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;
}

Le fichier de sortie n'est certainement pas une version mise à l'échelle de l'entrée, mais je pense que cela peut être dû à des choix de variables incorrects ci-dessus.

Était-ce utile?

La solution

J'ai compris.En remplaçant littleBuffer[i]=0.5*(UInt8)frameData; avec le code ci-dessous, l'audio évolue comme prévu.

float frameData=signalData[i];
if (frameData>127){
    frameData=255-frameData;
    frameData*=scaleFactor;
    frameData=255-frameData;
}else{
    frameData*=scaleFactor;
}
littleBuffer[i]=(int)frameData;

Certes, il y a du bruit après la mise à l'échelle. Ma meilleure hypothèse est qu'il s'agit d'un bruit de quantification lié au faible débit binaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top