比如采样率为22050,音频文件有36s,那么x为长度为22050*36=793800的float。
成都创新互联主要从事网站制作、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务霍山,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
用到了python库 Spleeter
抽象地了解下原理吧
参考文章是这篇:Spleeter: a fast and efficient music source separation tool with pre-trained models
原理文章是这篇 SINGING VOICE SEPARATION: A STUDY ON TRAINING DATA
粗略扫了一眼,原理主要是用U-Net进行分割,然后这个Python工具主要是利用了一个pre-trained的model。
参考链接:机器之心的一篇文章
纵轴表示频率(从0到10kHz),横轴表示剪辑的时间。由于我们看到所有动作都发生在频谱的底部,我们可以将频率轴转换为对数轴。
可以对频率取对数。
感觉这个参数蛮有意思的
整个频谱被投影到12个区间,代表音乐八度音的12个不同的半音(或色度), librosa.feature.chroma_stft 用于计算。
先对音频进行短时傅里叶变换
其中每行存储一个窗口的STFT,大小为1025*1551
这里要注意理解怎么基于stft的结果来画频谱图
没太了解,感觉就大概知道有这么个量可以用到就行。
librosa.feature.spectral_centroid 计算信号中每帧的光谱质心:
1. 先理解连续傅里叶变换
2. 再理解离散傅里叶变换
对连续函数进行离散采样
3. 最后进入短时傅里叶变换
是先把一个函数和窗函数进行相乘,然后再进行一维的傅里叶变换。并通过窗函数的滑动得到一系列的傅里叶变换结果,将这些结果竖着排开得到一个二维的表象。
if (xrow ~= 1)
x = x';
else
x= x;
end
你在这里把x变成行向量;可是在下面语句里又按照列向量给第一下标赋值,
tfr(indices,icol)=x(round(ti+tau),1).*conj(h(round(Lh+1+tau)));
这样就造成了向量下标超出。改成这样试试:
tfr(indices,icol)=x(1,round(ti+tau)).*conj(h(round(Lh+1+tau)));
原文:
Python version
ttslearn のインストール
ttslearn の动作确认
パッケージのインポート
描画周りの设定
NumPy と Torch を用いた配列の作成
numpy.ndarray と torch.Tensor のインタフェースの违い
numpy.ndarray と torch.Tensor の相互変换
numpy.ndarray と torch.Tensor のメモリ共有
scipy.io.wavfile を利用した音声ファイルの読み込み
音声の可视化
窓関数
短时间フーリエ変换の実装
短时间フーリエ変换の结果の可视化
librosa.stft を用いた短时间フーリエ変换
librosa.stftは、STFTを実行する前にデフォルトで信号の冒头と末尾にパディング処理を行います。前述のSTFT実装はこの処理をサポートしていないため、同等のSTFTの结果を得るためには、center=Falseとしてパディング処理を行わないように设定します。
时间解像度と周波数解像度のトレードオフ
逆短时间フーリエ変换による音声の复元
メルフィルタバンク
メルスペクトログラムの计算
Griffin-Lim のアルゴリズムに基づく位相复元
瞬时周波数の可视化 (bonus)
Griffin-Limのアルゴリズムは、位相复元手法です。合成音声と自然音声の瞬时位相(位相の时间微分)を比较することで、位相复元が期待通り行われているかを视覚的に确认できます。
翻译:
Python 版本
ttslearn 的安装
ttslearn 的操作确认
导入程序包
设置绘图格式
使用NumPy和Torch创建数组
numpy.ndarray和torch.Tensor之间的接口差异
numpy.ndarray和torch.Tensor的相互转换
numpy.ndarray和torch.Tensor的内存共享
使用scipy.io.wavfile读取音频文件
语音可视化
窗函数
短时傅立叶变换的实现
短时傅立叶变换结果的可视化
使用librosa.stft的短时傅立叶变换
缺省情况下,librosa.stft在执行STFT(短时傅里叶变换)之前会对信号的开头和结尾进行填充。 由于上面提到的STFT实现不支持此操作,因此要获得等效的STFT结果,请将填充操作设置为center=False。
在时间分辨率和频率分辨率间权衡取舍
通过逆短时傅立叶变换进行语音的复原
邮件过滤器组
计算质谱图
基于Griffin-Lim算法的相位复原
瞬时频率可视化(bonus)
Griffin-Lim的算法是一种相位恢复方法。 通过比较合成语音和自然语音的瞬时相位(相位的时间微分),我们可以直观地看到相位恢复是否按预期进行。
官方文档中给出了非常详细的安装方法
函数声明:
librosa.core.stft(y, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, dtype=class 'numpy.complex64', pad_mode='reflect')
常用参数说明:
y:输入的numpy数组,要求都是实数
n_fft:fft的长度,默认2048
hop_length:stft中窗函数每次步进的单位
win_length:窗函数的长度
window:窗函数的类型
return:一个1+n_fft/2*1+len(y)/hop_length的二维复数矩阵,其实就是时频谱
参考:
主要用这两个
matplotlib.pyplot.pcolormesh()
matplotlib.pyplot.colorbar()