ExtAudioFileRead의 출력 진폭 줄이기
-
21-12-2019 - |
문제
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;
물론, 스케일링 후에 약간의 소음이 있습니다. 제가 가장 추측하기로는 낮은 비트 전송률과 관련된 양자화 소음인 것 같습니다.
제휴하지 않습니다 StackOverflow