import IPython
import cv2
import IPython.displayimport librosa
import librosa.displayfrom fastai.vision import *import osDATA = '/Users/zl/Documents/audio/data/'
CSV_TRN_CURATED = DATA + 'train_curated.csv'  # 训练数据集:文件名,标签
TRN_CURATED = DATA + 'train_curated'  # 训练数据的图片位置。# Mel-spectrogram Dataset
PREPROCESSED = Path(DATA + 'fat2019_prep_mels1')  # 生成数据的保存位置
MELS_TRN_CURATED = os.path.join(PREPROCESSED, 'mels_train_curated.pkl')  # 结果保存文件,图片保存成pkl.def read_audio(conf, pathname, trim_long_data):"""librosa 是音频处理库,conf.sampling_rate 为采样率 44100:param conf::param pathname::param trim_long_data::return:"""y, sr = librosa.load(pathname, sr=conf.sampling_rate)  # 将音频文件加载为浮点时​​间系列。# trim silenceif 0 < len(y):  # workaround: 0 length causes errory, _ = librosa.effects.trim(y)  # trim, top_db=default(60)# make it unified length to conf.samplesif len(y) > conf.samples:  # long enough 88200if trim_long_data:y = y[0:0 + conf.samples]else:  # pad blankpadding = conf.samples - len(y)  # add padding at both ends 不够的话就补充。offset = padding // 2y = np.pad(y, (offset, conf.samples - len(y) - offset), conf.padmode)return ydef audio_to_melspectrogram(conf, audio):"""计算一个梅尔频谱系数图:param conf::param audio::return:"""spectrogram = librosa.feature.melspectrogram(audio,sr=conf.sampling_rate,n_mels=conf.n_mels,hop_length=conf.hop_length,n_fft=conf.n_fft,fmin=conf.fmin,fmax=conf.fmax)spectrogram = librosa.power_to_db(spectrogram)  # 转化频谱系数单位spectrogram = spectrogram.astype(np.float32)return spectrogramdef show_melspectrogram(conf, mels, title='Log-frequency power spectrogram'):""":param conf: :param mels: :param title: :return: """librosa.display.specshow(mels, x_axis='time', y_axis='mel',sr=conf.sampling_rate, hop_length=conf.hop_length,fmin=conf.fmin, fmax=conf.fmax)plt.colorbar(format='%+2.0f dB')plt.title(title)plt.show()def read_as_melspectrogram(conf, pathname, trim_long_data, debug_display=False):""":param conf::param pathname::param trim_long_data::param debug_display::return:"""x = read_audio(conf, pathname, trim_long_data)mels = audio_to_melspectrogram(conf, x)if debug_display:IPython.display.display(IPython.display.Audio(x, rate=conf.sampling_rate))show_melspectrogram(conf, mels)return melsdef mono_to_color(X, mean=None, std=None, norm_max=None, norm_min=None, eps=1e-6):""":param X: :param mean: :param std: :param norm_max: :param norm_min: :param eps: :return: """# Stack X as [X,X,X]X = np.stack([X, X, X], axis=-1)# Standardizemean = mean or X.mean()X = X - meanstd = std or X.std()Xstd = X / (std + eps)_min, _max = Xstd.min(), Xstd.max()norm_max = norm_max or _maxnorm_min = norm_min or _minif (_max - _min) > eps:# Normalize to [0, 255]V = XstdV[V < norm_min] = norm_minV[V > norm_max] = norm_maxV = 255 * (V - norm_min) / (norm_max - norm_min)V = V.astype(np.uint8)else:# Just zeroV = np.zeros_like(Xstd, dtype=np.uint8)return Vdef convert_wav_to_image(df, source):"""## 转化WAV文件为图片,返回包含图片的list。:param df::param source::return:"""X = []for i, row in df.iterrows():wav_path = os.path.join(source, str(row.fname))  # WAV文件路径print(wav_path)x = read_as_melspectrogram(conf, wav_path, trim_long_data=False)  # 读取图像并转化成数组x_color = mono_to_color(x)  # 转化为三维图像X.append(x_color)return Xdef save_as_pkl_binary(obj, filename):"""Save object as pickle binary file.Thanks to https://stackoverflow.com/questions/19201290/how-to-save-a-dictionary-to-a-file/32216025"""with open(filename, 'wb') as f:pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)def convert_dataset(df, source_folder, filename):"""转化WAV文件为图片,并保存image。:param df::param source_folder::param filename::return:"""X = convert_wav_to_image(df, source=source_folder)save_as_pkl_binary(X, filename)print(f'Created {filename}')return Xclass conf:sampling_rate = 44100duration = 2  # sechop_length = 347 * duration  # to make time steps 128fmin = 20fmax = sampling_rate // 2n_mels = 128n_fft = n_mels * 20padmode = 'constant'samples = sampling_rate * durationdef get_default_conf():return confdef main():trn_curated_df = pd.read_csv(CSV_TRN_CURATED)# 获取配置参数conf = get_default_conf()# 转化数据集 128xN   (N/128)*2=时长。convert_dataset(trn_curated_df, TRN_CURATED, MELS_TRN_CURATED);# convert_dataset(test_df, TEST, MELS_TEST);if __name__ == '__main__':main()

wav音频文件转Mel-Spectrograms频谱图像相关推荐

  1. python音频频谱_Python 读取WAV音频文件 画频谱的实例

    Python 读取WAV文件 import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用p ...

  2. 使用python绘制wav 音频文件频谱图

    1.wav 文件需要是Windows PCM 格式(未压缩),请参考 2.python 库的安装: pip install pyaudio(可能会用到) pip install matplotlib( ...

  3. python音频频谱_Python读取WAV音频文件 画频谱的方法

    Python 读取WAV文件 import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用p ...

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

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

  5. C语言解析WAV音频文件

    转载:http://www.cnblogs.com/LexMoon/p/wave-c.html 1.C语言解析WAV音频文件 代码地址: Github : https://github.com/Cas ...

  6. 如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法

    C++读取WAV音频文件的头部数据的实现方法 前言: 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有 ...

  7. Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件

    第21部分:永久保存Wav音频文件 原文地址:http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Begi ...

  8. c语言 文件 long double 读取,读取*.wav音频文件

    1.wav音频文件的格式 wav文件由文件头和采样数据2部分组成. 文件头又分为RIFF(Resource Interchange File Format).WAVE文件标识段 和 声音数据格式说明段 ...

  9. java 双声道音频_java实现切割wav音频文件的方法详解【附外部jar包下载】

    本文实例讲述了java实现切割wav音频文件的方法.分享给大家供大家参考,具体如下: import it.sauronsoftware.jave.Encoder; import it.sauronso ...

  10. python播放wav文件_python3 写一个WAV音频文件播放器的代码

    环境:ubuntu 16.04 python3.5 pycharm 包 : wave pyaudio sys 上代码:AudioPlayer.py # coding:utf-8 # author:ki ...

最新文章

  1. python终端中退格键,方向键不能使用
  2. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
  3. 万字长文重新解剖产品经理(内含大量图片)
  4. 从零开始撸一个Kotlin Demo
  5. 【转】pacs定位线_C#开发PACS医学影像处理系统(十五):Dicom影像交叉定位线算法
  6. 今天的中巴等各式车子的企业即时通讯
  7. java解析dxf文件_CAD文件无法打开,这两点原因你必须要知道
  8. 杭电2540遮挡判断
  9. java玻璃效果_swing透明效果(没aero毛玻璃那么好看)
  10. MATLAB 高等数学中的应用
  11. python pdf编辑器开发_使用pymupdf开发pdf查看编辑器
  12. Hbuilder无法正常运行微信小程序模拟器到指定页面为启动页
  13. django中的models的常用字段及属性
  14. for(auto a :b)
  15. Linux上杀毒软件有哪些?
  16. linux 光功率 模块_光模块及调整光模块输入光功率的方法
  17. java多线程JUC学习笔记
  18. 详解T507 核心板引脚功能修改指引-飞凌嵌入式
  19. 原生js实现canvas画布中绘制、移动、拖拽、删除矩形(如简易截图工具)
  20. 信息安全等保项目解读

热门文章

  1. 构建我的工作空间--懒人攻略
  2. 推荐和搜索系统的多样性研究综述
  3. 呕心沥血之react中使用vue组件 -- vuera
  4. 负数的二进制表示方法
  5. 2018年安徽粮食总产逾800亿斤 实现“十五连丰”
  6. Spring Boot Starters简单介绍
  7. 天天酷跑宠物哪个最好,论表现分中飞行金币占比
  8. 并发-AQS源码分析
  9. 关于展频和小数分频的理论原理和实践
  10. 苹果做游戏了,sony线上商店了。