我希望降低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.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;
}输出文件肯定不是输入的缩放版本,但我认为这可能是由于上面不正确的变量选择造成的。
发布于 2014-08-12 11:09:15
明白了。通过将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;诚然,在缩放后有一些噪声--我最好的猜测是,它是与低比特率相关的量化噪声。
https://stackoverflow.com/questions/25057614
复制相似问题