ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

处理音频文件的python模块

2021-04-22 18:05:38  阅读:266  来源: 互联网

标签:mfcc python feat 音频文件 模块 np wav wave data


首先是wave

def read_wav_data(filename):'''
	读取一个wav文件,返回声音信号的时域谱矩阵和播放时间
	'''
	filename="/home/chenyang/"+filename[2:]with wave.open(filename,"rb") as wav: # 打开一个wav格式的声音文件流
		num_frame = wav.getnframes() # 获取帧数
		num_channel=wav.getnchannels() # 获取声道数
		framerate=wav.getframerate() # 获取帧速率
		num_sample_width=wav.getsampwidth() # 获取实例的比特宽度,即每一帧的字节数
		str_data = wav.readframes(num_frame) # 读取全部的帧
		wav.close() # 关闭流
	wave_data = np.fromstring(str_data, dtype = np.short) # 将声音文件数据转换为数组矩阵形式
	wave_data.shape = -1, num_channel # 按照声道数将数组整形,单声道时候是一列数组,双声道时候是两列的矩阵
	wave_data = wave_data.T # 将矩阵转置#wave_data = wave_data return wave_data, framerate

接着就是

from python_speech_features import mfccfrom python_speech_features import delta

def GetMfccFeature(wavsignal, fs):# 获取输入特征
	feat_mfcc=mfcc(wavsignal[0],fs)
	feat_mfcc_d=delta(feat_mfcc,2)
	feat_mfcc_dd=delta(feat_mfcc_d,2)# 返回值分别是mfcc特征向量的矩阵及其一阶差分和二阶差分矩阵
	wav_feature = np.column_stack((feat_mfcc, feat_mfcc_d, feat_mfcc_dd))return wav_feature

接着就是

from scipy.io import wavfile as wav

fs, audio = wav.read(file)

这个是语谱图函数

def GetFrequencyFeature(wavsignal, fs):'''

	'''if(16000 != fs):raise ValueError('[Error] ASRT currently only supports wav audio files with a sampling rate of 16000 Hz, but this audio is ' + str(fs) + ' Hz. ')# wav波形 加时间窗以及时移10ms
	time_window = 25 # 单位ms
	window_length = fs / 1000 * time_window # 计算窗长度的公式,目前全部为400固定值
	
	wav_arr = np.array(wavsignal)#wav_length = len(wavsignal[0])
	wav_length = wav_arr.shape[1]
	
	range0_end = int(len(wavsignal[0])/fs*1000 - time_window) // 10 + 1 # 计算循环终止的位置,也就是最终生成的窗数
	data_input = np.zeros((range0_end, window_length // 2), dtype = np.float) # 用于存放最终的频率特征数据
	data_line = np.zeros((1, window_length), dtype = np.float)for i in range(0, range0_end):
		p_start = i * 160
		p_end = p_start + 400
		
		data_line = wav_arr[0, p_start:p_end]
		
		data_line = data_line * w # 加窗
		
		data_line = np.abs(fft(data_line)) / wav_length
		
		
		data_input[i]=data_line[0: window_length // 2] # 设置为400除以2的值(即200)是取一半数据,因为是对称的#print(data_input.shape)
	data_input = np.log(data_input + 1)return data_input

还用
torchaudio
https://pytorch.org/audio/
aukit

标签:mfcc,python,feat,音频文件,模块,np,wav,wave,data
来源: https://blog.51cto.com/u_15177056/2725318

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有