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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top