我希望在将其恢复到文件之前减少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;
}
.

输出文件绝对不是输入的缩放版本,但我认为这可能是由于上面不正确的变量选择。

有帮助吗?

解决方案

得到它。通过用下面的代码替换生成acodeTagcode,音频尺度按预期缩放。

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