Вопрос

Я ищу уменьшить амплитуду вывода 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)
.

Я бы подумал, чтобы погибло через ConvertedDates.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