阅读背景:

Python简单GUI(录音机)

来源:互联网 
import wave
import threading
import tkinter
import tkinter.filedialog
import tkinter.messagebox
import pyaudio

root = tkinter.Tk()
root.title('Recorder')
root.geometry('270x80+550+300')
root.resizable(False, False)

fileName = None
allowRecording = False      #录音状态
CHUNK_SIZE = 1024       #数据块大小
CHANNELS = 2        #频道
FORMAT = pyaudio.paInt16        #16位量化编码
RATE = 44100        #音频采样率

def record():
    global fileName
    p = pyaudio.PyAudio()
    
    #audio流对象
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK_SIZE)
    
    #音频文件对象
    wf = wave.open(fileName, 'wb')
    wf.setnchannels(CHANNELS)
    wf.setsampwidth(p.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    
    # 读取数据写入文件
    while allowRecording:
        data = stream.read(CHUNK_SIZE)
        wf.writeframes(data)
    wf.close()
    stream.stop_stream()
    stream.close()
    p.terminate()
    fileName = None
    
def start():
    global allowRecording, fileName    
    fileName = tkinter.filedialog.asksaveasfilename(filetypes=[('未压缩波形文件','*.wav')])
    if not fileName:
        return
    if not fileName.endswith('.wav'):
        fileName = fileName+'.wav'
    allowRecording = True
    lbStatus['text'] = 'Recording...'
    threading.Thread(target=record).start()

def stop():
    global allowRecording
    allowRecording = False
    lbStatus['text'] = 'Ready'
    
# 关闭程序时检查是否正在录制
def closeWindow():
    if allowRecording:
        tkinter.messagebox.showerror('Recording', 'Please stop recording before close the window.')
        return
    root.destroy()

btnStart = tkinter.Button(root, text='Start', command=start)
btnStart.place(x=30, y=20, width=100, height=20)
btnStop = tkinter.Button(root, text='Stop', command=stop)
btnStop.place(x=140, y=20, width=100, height=20)
lbStatus = tkinter.Label(root, text='Ready', anchor='w', fg='green')    #靠左显示绿色状态字
lbStatus.place(x=30, y=50, width=200, height=20)
root.protocol('WM_DELETE_WINDOW', closeWindow)

root.mainloop()
import wave
import threading
imp



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: