0

ファイルに再保存する前に、ExtAudioFileRead の出力の振幅を減らしたいと考えています。これが私の元のコードです:

    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)

私は、convertedData.mBuffers[0].mData をループして、各サンプルに分数を乗算することを考えていましたが、それは "void" 型です。読んでくれてありがとう!

編集:

これが私が今下っているパスです:

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

出力ファイルは間違いなく入力のスケーリングされたバージョンではありませんが、これは上記の誤った変数の選択が原因である可能性があると思います.

4

1 に答える 1

0

とった。以下のコードに置き換えるlittleBuffer[i]=0.5*(UInt8)frameData;と、オーディオは期待どおりにスケーリングされます。

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

確かに、スケーリング後にノイズが発生します。これは、低ビットレートに関連する量子化ノイズであると推測されます。

于 2014-08-12T11:09:15.100 に答える