用python编写录音机——GUI控制录音开始与结束(tkinter)

老规矩,我们先来看代码👇

import pyaudio
import threading
import wave
import tkinter


class Recorder:
    def __init__(self, chunk=1024, channels=1, rate=64000):
        self.CHUNK = chunk
        self.FORMAT = pyaudio.paInt16
        self.CHANNELS = channels
        self.RATE = rate
        self._running = True
        self._frames = []

    def start(self):
        threading._start_new_thread(self.__recording, ())


    def __recording(self):
        self._running = True
        print('start recording')
        self._frames = []
        p = pyaudio.PyAudio()
        stream = p.open(format=self.FORMAT,
                        channels=self.CHANNELS,
                        rate=self.RATE,
                        input=True,
                        frames_per_buffer=self.CHUNK)
        while self._running:
            data = stream.read(self.CHUNK)
            self._frames.append(data)

        stream.stop_stream()
        stream.close()
        p.terminate()

    def stop(self):
        self._running = False
        print('stop')

    def save(self):

        p = pyaudio.PyAudio()

        wf = wave.open("001.wav", 'wb')
        wf.setnchannels(self.CHANNELS)
        wf.setsampwidth(p.get_sample_size(self.FORMAT))
        wf.setframerate(self.RATE)
        wf.writeframes(b''.join(self._frames))
        wf.close()
        print("Saved")


##主程序

# 创建窗口
window = tkinter.Tk()
# 给窗口命名
window.title("录音与播放器")
# 设置窗口大小
window.geometry("500x300")  #注意其中的x不是乘号!
re = Recorder()

# 设置一个录音按钮
b1 = tkinter.Button(window, text="开始录音", font=("FangSong", 14), width=10, height=1, command=re.start)
b1.place(x=100, y=100, anchor="nw")
# 设置一个停止按钮
b2 = tkinter.Button(window, text="结束录音", font=("FangSong", 14), width=10, height=1, command=re.stop)
b2.place(x=200, y=100, anchor="nw")
#设置一个保存按钮
b3 = tkinter.Button(window, text="保存录音", font=("FangSong", 14), width=10, height=1, command=re.save)
b3.place(x=300, y=100, anchor="nw")


# 主窗口循环
window.mainloop()


与通过输入控制录音的开始和结束的录音机相比(程序及解释见:用python编写录音机——通过输入控制录音的开始和结束)多了tkinter库。这个库也是python自带的库,不需要另外安装。


tkinter库,用来绘制GUI界面,存放按钮等。在此代码的主程序中,有大量的运用。

学习tkinter库时,可以与pygame的界面绘制进行对比。

创建窗口:

window = tkinter.Tk()

窗口命名:

window.title("名字")

窗口大小(注意,其中的长度和宽度之间用小写字母x连接):

window.geometry("500x300")

创建按钮:

b1 = tkinter.Button(window, text="开始录音", font=("FangSong", 14), width=10, height=1, command=re.start)

其中,第一个参数表示按钮绘制的窗口,text参数表示按钮上所显示的内容,font参数表示按钮上内容的字体字号,width和height分别表示按钮的宽的和高度,command参数链接到按下按钮所要执行的指令。

        按钮的位置:  

b1.place(x=100, y=100, anchor="nw")

参数anchor指起始位置(用north、south、east和west表示),这里的nw(northwest)表示的是以左上角的点为坐标原点。x和y分别表示按钮的左上角的点距离(在笛卡尔坐标系中,以左上角为坐标原点,水平向右的方向为x轴的正方向,竖直向下的方向为y轴的正方向。)。


更多优化请看:

用python编写录音机——GUI控制录音开始与结束(PyQt5)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值