音频文件末尾的音量衰减

Posted

技术标签:

【中文标题】音频文件末尾的音量衰减【英文标题】:Volume fade at the end of the audio file 【发布时间】:2010-11-11 08:21:26 【问题描述】:

嗨,

我正在做一个处理音频文件的 iphone 应用程序。应用程序还包含一个音频转换器,因此我的 /Documents 文件夹中可能有任何音频格式的文件。

我想要的是通过在结尾降低音量并在文件开头淡入来实现平滑的音频文件结束。

我该怎么做? (只是指向一个方向。一个框架,功能,方法)

我可以使用所有 Apple 音频框架,包括高级和低级的。 我什至可以在文件转换时访问音频缓冲区。

提前致谢。

注意:我在播放时不需要音频淡入/淡出功能。我需要这个功能已经写在音频文件中。

【问题讨论】:

【参考方案1】:

因为您要处理不同的格式,所以最好在转换数据时在样本级别应用淡入淡出。

如果你是离线进行转换,那么你已经知道文件中的样本数量,所以你可以正常处理X - B样本(其中X是样本总数,B是淡入淡出持续时间):

int i = 0;
for(i = 0; i < X - B; i++) 
  sampleToBeConverted[i] = inputSample[i]

然后,对于最后的 B 样本,您将执行以下操作:

for(int j = 0; j < B; j++, i++) 
  sampleToBeConverted[i] = inputSample[i] * (1.0 - (j / B));

那将是一个线性渐变斜率,所以如果你想要更漂亮的东西,那么,那就去把自己搞砸吧。 ;) 基本上,进行线性渐变的公式是y = m * x + b(还记得代数课吗?),在这种情况下你的斜率是1 / B,y 偏移是 1.0,这是你想要应用的最大音量增益(即没有收益)。

如果您是实时进行转换,则需要将B 样本保存在环形缓冲区中,然后在处理结束时应用上述算法。

【讨论】:

我只是在我的转换函数中使用它并将该公式应用于我的缓冲区。非常感谢 Nik,这正是我想要的。

以上是关于音频文件末尾的音量衰减的主要内容,如果未能解决你的问题,请参考以下文章

VIPERFX完美音质设置方法?

FFMPEG调整音频文件音量大小

使用 SOX 按百分比值减少音频文件的音量

音频文件播放没有音量

如何在javascript中调整音频文件的音量[重复]

在 Linux 中导出音频文件音量 dB 级别