資源簡介
此文件用于語音在線傳輸,基于Python2.7,利用socket編程
代碼片段和文件信息
import?wave
import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?python_speech_features?import?mfcc
from?math?import?cos?sin?sqrt?pi
def?read_file(file_name):
????with?wave.open(file_name?‘r‘)?as?file:
????????params?=?file.getparams()
????????_?_?framerate?nframes?=?params[:4]
????????str_data?=?file.readframes(nframes)
????????wave_data?=?np.fromstring(str_data?dtype=np.short)
????????time?=?np.arange(0?nframes)?*?(1.0?/?framerate)
????????return?wave_data?time
????return?index1?index2
def?find_point(data):
????count1?count2?=?0?0
????for?index?val?in?enumerate(data):
????????if?count1?40:
????????????count1?=?count1?+?1?if?abs(val)?>?0.15?else?0
????????????index1?=?index
????????if?count1?==?40?and?count2?5:
????????????count2?=?count2?+?1?if?abs(val)?0.001?else?0
????????????index2?=?index
????????if?count2?==?5:
????????????break
????return?index1?index2
def?select_valid(data):
????start?end?=?find_point(normalized(data))
????print(start?end)
????return?data[start:end]
def?normalized(a):
????maximum?=?max(a)
????minimum?=?min(a)
????return?a?/?maximum
def?compute_mfcc_coff(file_prefix=‘‘):
????mfcc_feats?=?[]
????s?=?range(10)
????I?=?[0?3?4?8]
????II?=?[5?7?9]
????Input?=?{‘‘:?s?‘I‘:?I?‘II‘:?II?‘B‘:?s}
????for?index?file_name?in?enumerate(file_prefix?+?‘{0}.wav‘.format(i)?for?i?in?Input[file_prefix]):
????????data?time?=?read_file(file_name)
????????#data?=?select_valid(data)
????????#if?file_prefix==‘II‘:data?=?select_valid(data)
????????mfcc_feat?=?mfcc(data?48000)[:75]
????????mfcc_feats.append(mfcc_feat)
????t?=?np.array(mfcc_feats)
????return?np.array(mfcc_feats)
def?create_dist():
????for?i?m_i?in?enumerate(mfcc_coff_input):??#?get?the?mfcc?of?input
????????for?j?m_j?in?enumerate(mfcc_coff):??#?get?the?mfcc?of?dataset
????????????#?build?the?distortion?matrix?bwtween?i?wav?and?j?wav
????????????N?=?len(mfcc_coff[0])
????????????distortion_mat?=?np.array([[0]?*?len(m_i)
???????????????????????????????????????for?i?in?range(N)]?dtype=np.double)
????????????for?k1?mfcc1?in?enumerate(m_i):
????????????????for?k2?mfcc2?in?enumerate(m_j):
????????????????????distortion_mat[k1][k2]?=?sqrt(
????????????????????????sum((mfcc1[1:]?-?mfcc2[1:])**2))
????????????yield?i?j?distortion_mat
評論
共有 條評論