質問

ファイルを救う前に、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をループすると思い、各サンプルに分数を掛けていますが、「無効」の型です。どんなアイデアも素晴らしいです、読んでくれてありがとう!

編集:

これは私が今下がる道です:

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

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

役に立ちましたか?

解決

それを手に入れた。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;
.

確かに、スケーリングの後にいくつかのノイズがあります - 私の最善の推測はそれが低いビットレートに関連する量子化ノイズです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top