문제

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

출력 파일은 입력의 크기가 조정된 버전이 아니지만 위의 잘못된 변수 선택으로 인한 것일 수 있다고 생각합니다.

도움이 되었습니까?

해결책

알았어요.교체하여 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