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()
时间: 2024-04-11 18:30:15 浏览: 195
python使用tkinter实现浮动窗口动态实时显示时钟
这段代码是一个简单的录音程序,使用了Python的tkinter库和pyaudio库。它创建了一个窗口,包含了开始录音和停止录音的按钮,并显示录音状态。
在开始录音按钮的回调函数start()中,它首先弹出一个文件保存对话框,让用户选择保存录音文件的路径和文件名。然后通过创建一个PyAudio对象p和一个音频流对象stream,打开音频流并设置参数。接着创建一个Wave_write对象wf,用于写入音频数据到文件。在一个循环中,不断从音频流中读取数据,并将数据写入文件。直到停止录音按钮被按下,循环结束,关闭文件和音频流。
停止录音按钮的回调函数stop()会将全局变量allowRecording设置为False,停止录音循环,并将录音状态显示为"Ready"。
在窗口关闭时,会检查是否正在录制,如果是,则弹出错误提示框。
这段代码的功能是实现一个简单的录音程序,可以开始录制声音,并将录制的声音保存为.wav文件。
阅读全文