سؤال

أنا أتطلع إلى تقليل سعة إخراج إكستوديوفيلريد قبل إعادة حفظه إلى ملف.إليك الكود الأصلي الخاص بي:

    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)

كنت أعتقد أن حلقة من خلال كونفيرتداتا.مبوفرز [0].مدتا, ضرب كل عينة في كسر, لكنها من النوع " باطل."أي أفكار ستكون رائعة ، شكرا على القراءة!

تحرير:

هذا هو المسار الذي سأسلك إليه الآن:

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