Reduzindo a amplitude da saída de ExtAudioFileRead
-
21-12-2019 - |
Pergunta
Estou procurando reduzir a amplitude da saída do ExtAudioFileRead antes de salvá-la novamente no arquivo.Aqui está meu 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)
Eu pensei em fazer um loop através do converttedData.MBuffers [0] .mdata, multiplicando cada amostra por uma fração, mas é do tipo "vazio". Quaisquer idéias seriam fantásticas, obrigado pela leitura!
EDITAR:
Este é o caminho que estou trilhando agora:
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;
}
O arquivo de saída definitivamente não é uma versão dimensionada da entrada, mas acho que isso pode ser devido às escolhas incorretas de variáveis acima.
Solução
Entendi.Ao substituir littleBuffer[i]=0.5*(UInt8)frameData;
com o código abaixo, o áudio é dimensionado conforme o esperado.
float frameData=signalData[i];
if (frameData>127){
frameData=255-frameData;
frameData*=scaleFactor;
frameData=255-frameData;
}else{
frameData*=scaleFactor;
}
littleBuffer[i]=(int)frameData;
É certo que há algum ruído após o dimensionamento – meu melhor palpite é que seja ruído de quantização relacionado à baixa taxa de bits.