1、下载与安装scipy
scipy下载链接: http://www.scipy.org/Download#head-0dfc04e10313d2e70988c6cb3bef7a9e09860c8f
同时可以下载说明文档链接http://docs.scipy.org/doc/
2、wav文件写操作
3、signal.chirp函数使用说明
4、点击按钮实现信号生成,点击按钮实现信号显示
5、Python代码
#!usr/bin/env python #code=utf-8 from Tkinter import * import wave import numpy as np import scipy.signal as signal import matplotlib.pyplot as plt import sys sys.setrecursionlimit(1000000) #define the params of wave channels = 1 sampwidth = 2 framerate = 9600 file_name = 'sweep.wav' frequency_begin = 1 frequency_end = 100 #define the time of wave time = 1 def Generate_Wav(): #generate the time bar t = np.arange(0,time,1.0/framerate) #generate the chirp signal from 300 to 3300Hz wave_data = signal.chirp(t, frequency_begin, time, frequency_end, method = 'linear')*1000 #cast to the type of short wave_data = wave_data.astype(np.short) #open a wav document f = wave.open(file_name,"wb") #set wav params f.setnchannels(channels) f.setsampwidth(sampwidth) f.setframerate(framerate) #turn the data to string f.writeframes(wave_data.tostring()) f.close() def my_button(root,label_text,button_text,button_func): '''''function of creat label and button''' #label details label = Label(root) label['text'] = label_text label.pack() #label details button = Button(root) button['text'] = button_text button['command'] = button_func button.pack() def read_wave_data(file_path): #open a wave file, and return a Wave_read object f = wave.open(file_path,"rb") #read the wave's format infomation,and return a tuple params = f.getparams() #get the info nchannels, sampwidth, framerate, nframes = params[:4] #Reads and returns nframes of audio, as a string of bytes. str_data = f.readframes(nframes) #close the stream f.close() #turn the wave's data to array wave_data = np.fromstring(str_data, dtype = np.short) time = np.arange(0, nframes) * (1.0/framerate) return wave_data, time def Plot_Wav(): wave_data, time = read_wave_data(file_name) plt.plot(time, wave_data) plt.grid(True) plt.show() def main(): root = Tk() my_button(root, 'Generate a sweep wav', 'Generate', Generate_Wav) my_button(root, 'Plot the wav', 'Plot', Plot_Wav) root.mainloop() if __name__ == "__main__": main()