看大佬写的

import scipy.signal as signal
import librosa
import torch
import numpy as np
import copysr = 22050 # Sample rate.
n_fft = 2048 # fft points (samples)
frame_shift = 0.0125 # seconds
frame_length = 0.05 # seconds
hop_length = int(sr*frame_shift) # samples.
win_length = int(sr*frame_length) # samples.
n_mels = 80 # Number of Mel banks to generate
power = 1.2 # Exponent for amplifying the predicted magnitude
n_iter = 100 # Number of inversion iterations
preemphasis = .97 # or None
max_db = 100
ref_db = 20
top_db = 15def get_spectrograms(fpath):'''Returns normalized log(melspectrogram) and log(magnitude) from `sound_file`.Args:sound_file: A string. The full path of a sound file.Returns:mel: A 2d array of shape (T, n_mels) <- Transposedmag: A 2d array of shape (T, 1+n_fft/2) <- Transposed'''# Loading sound filey, sr = librosa.load(fpath, sr=22050)# Trimmingy, _ = librosa.effects.trim(y, top_db=top_db)# Preemphasisy = np.append(y[0], y[1:] - preemphasis * y[:-1])# stftlinear = librosa.stft(y=y,n_fft=n_fft,hop_length=hop_length,win_length=win_length)# magnitude spectrogrammag = np.abs(linear)  # (1+n_fft//2, T)# mel spectrogrammel_basis = librosa.filters.mel(sr, n_fft, n_mels)  # (n_mels, 1+n_fft//2)mel = np.dot(mel_basis, mag)  # (n_mels, t)# to decibelmel = 20 * np.log10(np.maximum(1e-5, mel))mag = 20 * np.log10(np.maximum(1e-5, mag))# normalizemel = np.clip((mel - ref_db + max_db) / max_db, 1e-8, 1)mag = np.clip((mag - ref_db + max_db) / max_db, 1e-8, 1)# Transposemel = mel.T.astype(np.float32)  # (T, n_mels)mag = mag.T.astype(np.float32)  # (T, 1+n_fft//2)return mel, magdef melspectrogram2wav(mel):'''# Generate wave file from spectrogram'''# transposemel = mel.T# de-noramlizemel = (np.clip(mel, 0, 1) * max_db) - max_db + ref_db# to amplitudemel = np.power(10.0, mel * 0.05)m = _mel_to_linear_matrix(sr, n_fft, n_mels)mag = np.dot(m, mel)# wav reconstructionwav = griffin_lim(mag)# de-preemphasiswav = signal.lfilter([1], [1, -preemphasis], wav)# trimwav, _ = librosa.effects.trim(wav)return wav.astype(np.float32)def spectrogram2wav(mag):'''# Generate wave file from spectrogram'''# transposemag = mag.T# de-noramlizemag = (np.clip(mag, 0, 1) * max_db) - max_db + ref_db# to amplitudemag = np.power(10.0, mag * 0.05)# wav reconstructionwav = griffin_lim(mag)# de-preemphasiswav = signal.lfilter([1], [1, -preemphasis], wav)# cwav, _ = librosa.effects.trim(wav)return wav.astype(np.float32)def _mel_to_linear_matrix(sr, n_fft, n_mels):m = librosa.filters.mel(sr, n_fft, n_mels)m_t = np.transpose(m)p = np.matmul(m, m_t)d = [1.0 / x if np.abs(x) > 1.0e-8 else x for x in np.sum(p, axis=0)]return np.matmul(m_t, np.diag(d))def griffin_lim(spectrogram):'''Applies Griffin-Lim's raw.'''X_best = copy.deepcopy(spectrogram)for i in range(n_iter):X_t = invert_spectrogram(X_best)est = librosa.stft(X_t, n_fft, hop_length, win_length=win_length)phase = est / np.maximum(1e-8, np.abs(est))X_best = spectrogram * phaseX_t = invert_spectrogram(X_best)y = np.real(X_t)return ydef invert_spectrogram(spectrogram):'''spectrogram: [f, t]'''return librosa.istft(spectrogram, hop_length, win_length=win_length, window="hann")def plot_spectrogram_to_numpy(spectrogram):fig, ax = plt.subplots(figsize=(12, 3))im = ax.imshow(spectrogram, aspect="auto", origin="lower",interpolation='none')plt.colorbar(im, ax=ax)plt.xlabel("Frames")plt.ylabel("Channels")plt.tight_layout()fig.canvas.draw()data = save_figure_to_numpy(fig)plt.close()return datadef save_figure_to_numpy(fig):# save it to a numpy array.data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))return dataif __name__ == '__main__':# melpost = torch.load('E:\\tacotron2\\melpost.wav(1).pt',map_location='cpu').detach().numpy()# mel = np.zeros((80, 1025))# mel[:, :960] = melpost# mel[:, 960:] = melpost[:,:65]aa = get_spectrograms('E:\\tacotron2\\000005.wav')import matplotlib.pyplot as plt# mel = mel / 11 + 1plt.figure()# plt.subplot(3, 1, 1)# plt.imshow(plot_spectrogram_to_numpy(mel))plt.subplot(2, 1, 2)plt.imshow(plot_spectrogram_to_numpy(aa[1].T))plt.subplot(2, 1, 1)plt.imshow(plot_spectrogram_to_numpy(aa[0].T))plt.show()# wav = melspectrogram2wav(mel.T)wav1 = melspectrogram2wav(aa[0])# librosa.output.write_wav("gg_stft.wav", wav, sr)librosa.output.write_wav("gg_stf11.wav", wav1, sr)

梅尔频谱图与音频相互转化相关推荐

  1. python绘制频谱图,在音频分析中绘制频谱图

    I am working on speech recognition using neural network. To do so I need to get the spectrograms of ...

  2. 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...

    如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...

  3. 基于梅尔频谱的音频信号分类识别(Pytorch)

    本项目将使用Pytorch,实现一个简单的的音频信号分类器,可应用于机械信号分类识别,鸟叫声信号识别等应用场景. 项目使用librosa进行音频信号处理,backbone使用mobilenet_v2, ...

  4. 如何使用卷积神经网络从梅尔谱图检测 COVID-19 咳嗽

    新冠肺炎 COVID-19(2019 年冠状病毒病)是一种会导致人类呼吸系统问题.体温超过 38°C 的发烧.呼吸急促和咳嗽的疾病.即使是这种疾病也会导致肺炎死亡. 在 COVID-19 之前被认为是 ...

  5. librosa | 梅尔谱图最幽默的解释

    文章目录 写在前面 正文开始 了解梅尔频谱图 几天前发生在我脑海中的真实对话 频谱图 梅尔量表 梅尔频谱图 回顾 未完待续... 小白进来! 写在前面 Medium的一篇文章,特别幽默地介绍了梅尔谱图 ...

  6. 深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图

    前情提要 短时傅里叶变换公式 S ( m , k ) = ∑ n = 1 N − 1 x ( n + m H ) w ( n ) e − i 2 π k N n S(m,k) = \sum_{n=1} ...

  7. pyhton 画出音频文件的波形图和频谱图

    pyhton 画出音频文件的波形图和频谱图 # -*- coding:utf-8 -*- import wave import struct import numpy as np import mat ...

  8. 音频处理相关内容学习——自动编码器——变分自动编码器——频谱图

    文章目录 概述 一.Approaches And Challenges 生成的声音是什么类型 训练模型使用的是什么特征 原始音频Raw Audio 频谱图Spectrograms 声音生成模型常用的结 ...

  9. 音频频谱图(自定义View——进阶篇2)

    音频频谱 +  波形图绘制 我们经常有看到音乐播放器播放界面会有频谱图显示,感觉很炫,今天我就带大家来实现频谱图,顺便将波形图绘制也分享给大家,这里重点讲频谱这块.我们这里的频谱采用8分频fft,这里 ...

最新文章

  1. tensorflow生成对抗网络
  2. mysql删除有外链索引数据,Cannot delete or update a parent row: a foreign key constraint fails 问题的解决办法
  3. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔总结
  4. Phoenix Tips (12) 跟踪 Tracing
  5. [转] 关于ASP.NET中由于无法创建应用程序域,因此未能执行请求解决方案
  6. 实践:基于深度学习的卫星图像超分辨率处理技术(一)
  7. C++ 'dynamic_cast' and Java 'instanceof' 使用对比
  8. Linux下使用源码安装出现的坑
  9. 20个非常棒的Jquery实用工具
  10. 行业分类代码一览表2022-MySQL版
  11. Awvs 12.x安装教程及常见问题
  12. 计算机网络和物联网的区别与联系,3.5.2 从网络端系统接入的角度看互联网与物联网的区别与联系...
  13. Excel获取目标时间点/日期的方法
  14. 3D点云人脸鼻尖检测算法
  15. 微信小程序如何快速累计独立访客(UV)不低于 1000
  16. java 指纹比对 算法_Java通过sourceafis比对指纹图片的相似度判断指纹
  17. ac6005直连ap 如何配置_【无线】 AC直连AP配置
  18. 统计学基础——常用的概率分布(二项分布、泊松分布、指数分布、正态分布)
  19. 怎么保证促销商品不会超卖
  20. 什么是JSP引擎?什么是JSP容器?什么是Web服务器?

热门文章

  1. python 离线翻译软件_Python使用tkinter制作在线翻译软件
  2. srttrail txt无法开机_srttrail.txt怎么修复
  3. CentOS7下安装Hadoop伪分布式
  4. java智能卡操作系统_智能卡操作系统(COS),什么是智能卡操作系统(COS)
  5. 巧妙使用多个旧路由器无线中继提升网络速度
  6. MACD背离指标公式
  7. go集成gin+swagger
  8. 【物联网初探】- 08 - ESP32 操作电容式土壤湿度传感器(Arduino IDE)
  9. Packet Tracer 5.0 汉化包
  10. ​五分钟扫盲:进程与线程基础必知