python手记(47)

#!/usr/bin/env python  

# -*- coding: utf-8 -*-

#http://blog.csdn.net/myhaspl  

#code:[email protected] 

import wave

import pylab as pl

import numpy as np

import copy



print 'http://blog.csdn.net/myhaspl'  

print '[email protected]'  

print  

  

print 'working...' 







print "read wav data...."

# 打开WAV文档

f = wave.open(r"jg.wav", "rb")

fo = wave.open(r"hyspeak.wav", "wb")

fi=wave.open(r"back.wav", "rb")



# 读取波形数据

# (nchannels, sampwidth, framerate, nframes, comptype, compname)

params = f.getparams()

nchannels, sampwidth, framerate, nframes = params[:4]

str_data = f.readframes(nframes)



fi_params=fi.getparams()

fi_nframes = fi_params[3]

fi_str_data=fi.readframes(fi_nframes)



#将波形数据转换为数组,并更改

print "update wav data...."

wave_data = np.fromstring(str_data, dtype=np.short)

fi_wave_data= np.fromstring(fi_str_data, dtype=np.short)









#复制并除去背景声音

new_wave_data=copy.deepcopy(wave_data)

temp_wavedata=fi_wave_data[:len(new_wave_data)]

new_wave_data=(new_wave_data-temp_wavedata*0.5)*2



new_wave_data=np.array(new_wave_data)

new_wave_data =new_wave_data.astype(wave_data.dtype)

new_str_data=new_wave_data.tostring()

#写波形数据参数

print "save new wav files...."

fo.setnchannels(nchannels)

fo.setframerate(framerate)

fo.setsampwidth(sampwidth)

fo.writeframes(new_str_data)













# 绘制波形

wave_data.shape = -1, 2

wave_data = wave_data.T

time = np.arange(0, nframes) * (1.0 / framerate)

pl.subplot(221)

pl.plot(time, wave_data[0])

pl.subplot(222)

pl.plot(time, wave_data[1], c="g")

pl.xlabel("time (seconds)")



 

# 绘制波形

new_wave_data.shape = -1, 2

new_wave_data =new_wave_data.T

new_time = np.arange(0, nframes) * (1.0 / framerate)

pl.subplot(223)

pl.plot(new_time,new_wave_data[0])

pl.subplot(224)

pl.plot(new_time, new_wave_data[1], c="g")

pl.xlabel("time (seconds)")

pl.show()

 

本博客所有内容是原创,未经书面许可,严禁任何形式的转载

http://blog.csdn.net/u010255642

 

 

python根据上篇博文的结果消除背景声音,原理就是上篇博文的算法的逆过程

python手记(47)

 

你可能感兴趣的:(python)