所以我们的想法是:你可以用短时傅立叶变换(stft)从音频文件中生成频谱图。然后一些人产生了一种叫做“二进制掩模”的东西来从反向stft中产生不同的音频(例如,去除背景噪声等)。在
我的理解是:
stft是一个简单的公式,应用于音频文件,它生成的信息可以很容易地显示在频谱图中。 通过取stft矩阵的逆矩阵,并将其乘以一个相同大小的矩阵(二进制矩阵),您可以创建一个包含信息的新矩阵,以生成带有屏蔽声音的音频文件。在
一旦我做了矩阵乘法,如何创建新的音频文件?
虽然不多,但我的代码如下:
from librosa import load
from librosa.core import stft, istft
y, sample_rate = load('1.wav')
spectrum = stft(y)
back_y = istft(spectrum)
谢谢,这里有一些幻灯片让我走了这么远。如果您能给我一个python示例/演示,我将不胜感激
Librosa的STFT是全功能的,所以除非你非常小心地操作频谱,否则你不会从它的
istft
中得到合理的输出。在这里有一对函数,
stft
和istft
,它们代表正向和反向STFT,还有一个helper方法,它提供STFT数组中每个像素的时间和频率位置,还有一个演示:这是在gist中,如果你更容易阅读的话。在
整个模块假设只有真实数据,并使用Numpy的
rfft
函数。当然,您可以将其推广到复杂数据(或使用librosa),但对于您的应用程序(音频屏蔽),使用纯实数转换可以更容易地确保一切正常,并且逆STFT的输出仅为实数(如果您正在执行完全通用的复杂STFT,则很容易将其搞砸,您需要小心保持对称性)。在演示程序首先生成一些测试数据,并确认数据的
istft
再次生成数据。测试数据是一个啁啾,从5赫兹开始,以每秒2赫兹的频率下降,因此在大约10秒的数据中,啁啾的频率会在15赫兹左右结束。演示绘制STFT(通过获取STFT数组的绝对值):所以
stft.py
文件中import stft
导入spectrum = stft.stft(y, 128)
spectrum
阵列上应用这些效果back_y = stft.istft(spectrum, 128)
获得处理过的音频。在掩蔽/放大/衰减频率内容意味着只需缩放
spectrum
阵列的一些单元。如果你有具体的问题,请告诉我们。但希望这会给你一个简单的方法来应用任意效果。在如果您真的想使用librosa的函数,请告诉我们,我们也可以向您展示如何做到这一点。在
相关问题 更多 >
编程相关推荐