是否可以根据频率以编程方式编辑声音文件?

Posted

技术标签:

【中文标题】是否可以根据频率以编程方式编辑声音文件?【英文标题】:Is it possible to programmatically edit a sound file based on frequency? 【发布时间】:2010-05-28 00:51:53 【问题描述】:

只是想知道是否可以通过删除基于特定频率范围的部分来浏览 flac、mp3、wav 等文件并编辑部分或整个文件?

例如,我有一个朋友背诵一首诗的录音,背景是一些打击乐器。我可以编写一个 C 程序来遍历整个文件并删除除人声之外的所有内容(人声频率范围为 85-255 Hz,从我一直在阅读的内容来看)?

提前感谢您的任何想法!

【问题讨论】:

我没有给你一个好的答案,但你可能正在寻找可以进行快速傅立叶变换的东西。 我不确定音频编程在波形上是如何工作的,确切地说,但这是我有一天想研究的东西。同时,如果您需要编辑此类文件,我建议您在您最喜欢的音频编辑应用程序中使用 陷波滤波器,例如 SoundForge (sonycreativesoftware.com/soundforgesoftware) 或 Audacity (audacity.sourceforge.net)。跨度> 我几乎把它作为超级用户关闭,直到我重新阅读它并找到“写一个 C 程序” 【参考方案1】:

针对OP的具体示例:我认为您对人声频率的理解是错误的。也许男性口语的基本频率保持在那个范围内(对于男高音歌唱,或女性演讲或唱歌,或喊叫,甚至基本频率也会更高,可能是 500-1000 Hz)。但这并不重要,因为即使基音很低,产生不同元音的泛音也会上升到 2000-4000 Hz 或更高。定义“噪声”辅音(如“t”和“s”)的频率一直到音频范围的顶部,例如 5000-10000 Hz。打击乐填充了相同的音频范围,因此我怀疑您是否可以通过过滤某些频率进出来分离语音和打击乐。

【讨论】:

【参考方案2】:

当然有可能,否则数字工作室混音软件就不存在了。

您实际上要求的是衰减整个文件的频率范围。在模拟领域,您将应用低通和高通滤波器(或其他一些滤波器组合)来衰减频率。

在软件中,您可以通过编写一种可以减少各种频率输出的数字滤波器来解决这个问题。频率将通过 FFT 计算来识别。

最快的做法是使用音频编辑应用并在其中应用更改。

有一个名为PortAudio 的音频库可以为在数字级别编辑音频流提供一些支持。它是用 C 编写的,并且有一个 C API。

【讨论】:

您不需要 FFT 来根据频率进行过滤,但您可以根据需要使用它。低通、高通和带通滤波器的实现通常非常简单,只需对每个样本进行几次加法和乘法即可。这是一个简单的high-pass 过滤器。【参考方案3】:

如果您想测试音频处理算法,我强烈建议您使用Supercollider。它是免费的,并且内置了多种音频过滤器。但消除语音可能需要进行大量调整。 Supercollider 将允许您编写由各种参数驱动的代码,然后将这些参数连接到一个 GUI,您可以在为其提供实时(或记录)数据的同时对其进行调整。

即使您想编写 C 代码,首先使用 Supercollider 也会学到很多东西。许多过滤器在 C 中非常容易实现,但您需要编写一定数量的框架代码才能开始使用。

此外,我从this 书中学到了很多关于编写数字音频滤波器的知识。除此之外,它还讨论了human speech 的一些特性,以及如何构建滤波器以选择性地增强或消除特定频率。它还提供了可用的 C 代码。

【讨论】:

【参考方案4】:

SciPy 可以做各种signal processing。

【讨论】:

在 Java 或 C 中有什么可以做到这一点的吗? 不知道。我没有深入了解这些。【参考方案5】:

您还可以使用 MAX/MSP(但那是付费的)或 PureData(那是免费的)来处理音乐算法,它们是创建 supercollider 的基础。如果您想在实时环境中做到这一点,它们是一款出色的软件。

【讨论】:

以上是关于是否可以根据频率以编程方式编辑声音文件?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式启动 Mac 的系统偏好设置屏幕 -> 声音

以编程方式在 iPhone 上创建声音

是否可以以编程方式在 Android 中收听扬声器输出?

什么软件可以创作声音,主要可以定义声音的频率,连续播放

以编程方式关闭 iPhone?

是否可以在播放时更改 Console.Beep 的频率?