清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
import web
import sys
import os
import numpy as np
import fastdtw
from scikits.audiolab import wavread
import scikits.talkbox
from scikits.talkbox import features
from scikits.talkbox.features import mfcc
urls = (
'/demo', 'hello',
'/calcmfcc', 'calcmfcc',
'/calcdist', 'calcdist',
'/addtemplate', 'addtemplate',
)
db = web.database(dbn='mysql', user='root', pw='root', db='audiotemplate')
def str2list(sstr, spliter):
arr=sstr.split(spliter)
b=[]
for s in arr:
if(s!=''):
b.append(int(s))
return b
def mydist(a, b):
i_dist=0
for i in range(0, len(a)):
i_dist=i_dist+abs(a[i]-b[i])
return i_dist/len(a)
def mfcc2str(llist):
re=''
for i in llist:
temp=''
for j in i:
temp=temp+str(j)+'@'
re=re+temp+'#'
return re
def str2mfcc(sstr):
temp=sstr.split('#')
temp.pop()
re=[]
for lstr in temp:
llist=[]
arr=lstr.split('@')
arr.pop()
for elem in arr:
llist.append(float(elem))
re.append(llist)
return re
def data2mfcc(sstr):
data=str2list(sstr, ',')
temp=mfcc(data)[0]
return mfcc2str(temp)
def dist(str1, str2):
mf1=str2mfcc(str1)
np1=np.array(mf1)
mf2=str2mfcc(str2)
np2=np.array(mf2)
re=fastdtw.fastdtw(np1, np2, 1, mydist)[0]
return re
class hello:
def GET(self, name):
return name
class calcmfcc:
def POST(self):
data=web.data()
return data2mfcc(data)
class calcdist:
def POST(self):
form=web.input(name="a", data="")
name=form.name
mf=data2mfcc(form.data)
temps=db.query('select * from template where name="' + name + '"')
mindist=999999
for temp in temps:
mindist=min(mindist, dist(mf, temp.mfcc_text))
return mindist
class addtemplate:
def POST(self):
form=web.input(name="a", data="")
mf=data2mfcc(form.data)
db.insert('template', name=form.name, mfcc_text=mf)
return "ok"
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()