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

时间:2010-05-28 00:51:53

标签: c audio voice frequency-analysis

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

因此,例如,我有一个朋友在后台朗诵一首带有几个打击乐器的诗的录音。我可以编写一个贯穿整个文件的C程序并删除除人声之外的所有内容(人类语音频率范围为85-255 Hz,来自我读过的内容)吗?

提前感谢任何想法!

5 个答案:

答案 0 :(得分:5)

解决OP的具体例子:我认为你对人类语音频率的理解是错误的。也许男性口语的基本频率保持在该范围内(对于男高音歌唱,或女性演讲或唱歌,或者喊叫,即使是基础也会高得多,可能是500-1000赫兹)。但这甚至都不重要,因为即使基波很低,产生不同元音的泛音也会达到2000-4000赫兹或更高。定义“噪声”辅音如“t”和“s”的频率一直到音频范围的顶部,比如5000-10000 Hz。打击乐器填充相同的音频范围,所以我怀疑你可以通过过滤或输出某些频率来分离语音和打击乐。

答案 1 :(得分:4)

这当然是可能的,否则数字工作室混音软件将不存在。

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

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

最快的方法是使用音频编辑应用程序并在那里应用更改。

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

答案 2 :(得分:2)

如果您想测试音频处理算法,我强烈建议Supercollider。它是免费的,内置了多种音频滤波器。但是消除语音可能需要相当多的调整。 Supercollider允许您编写由各种参数驱动的代码,然后将这些参数挂钩到GUI,您可以在向GUI提供实时(或记录)数据时进行调整。

即使您想编写C代码,您也可以先使用Supercollider学到很多东西。许多过滤器在C中实现起来非常容易,但是在开始之前你需要编写一定数量的框架代码。

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

答案 3 :(得分:1)

SciPy可以做各种signal processing

答案 4 :(得分:1)

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