首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >降低ExtAudioFileRead输出幅值

降低ExtAudioFileRead输出幅值
EN

Stack Overflow用户
提问于 2014-07-31 11:20:38
回答 1查看 121关注 0票数 0

我希望降低ExtAudioFileRead输出的幅度,然后再将其重新保存到文件中。这是我的原始代码:

代码语言:javascript
复制
    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”类型。任何想法都会很棒,谢谢你的阅读!

编辑:

这是我现在要走的路:

代码语言:javascript
复制
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;
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-12 11:09:15

明白了。通过将littleBuffer[i]=0.5*(UInt8)frameData;替换为下面的代码,音频按预期进行缩放。

代码语言:javascript
复制
float frameData=signalData[i];
if (frameData>127){
    frameData=255-frameData;
    frameData*=scaleFactor;
    frameData=255-frameData;
}else{
    frameData*=scaleFactor;
}
littleBuffer[i]=(int)frameData;

诚然,在缩放后有一些噪声--我最好的猜测是,它是与低比特率相关的量化噪声。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25057614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档