【python实用小脚本系列】用 Python 打造你的专属录音机,随时随地记录声音!
嘿,小伙伴们!今天我来给大家介绍一个超实用的 Python 小工具——一个能帮你随时随地录音的“声音捕手”!是不是听起来很酷?再也不用担心错过重要的声音啦!接下来,我带大家看看这个神奇的代码是怎么工作的,还能怎么玩出更多花样!
第一步:揭秘核心代码,看看它是怎么“捕捉声音”的
这个工具的核心功能是通过麦克风录制声音,并保存为音频文件。听起来是不是有点像魔法?其实,它背后的工作原理非常有趣!接下来,我们来看看它是怎么实现的。
1. 初始化录音参数:告诉程序怎么录音
class App():chunk = 1024 # 每次读取的音频数据块大小sample_format = pyaudio.paInt16 # 音频格式channels = 2 # 音频通道数fs = 44100 # 采样率
这段代码的作用是设置录音的基本参数。chunk
是每次读取的音频数据块大小,sample_format
是音频格式(这里用的是 16 位整型),channels
是音频通道数(立体声是 2),fs
是采样率(44100 是 CD 音质的标准采样率)。
2. 创建图形界面:让程序有个“脸”
self.button1 = tk.Button(main, text='Start', width=6, command=self.startrecording)
self.button2 = tk.Button(main, text='Stop', width=6, command=self.stoprecording)
self.button1.pack()
self.button2.pack()
这段代码的作用是创建一个简单的图形界面,有两个按钮:“开始”和“停止”。点击“开始”按钮开始录音,点击“停止”按钮停止录音并保存文件。
3. 开始录音:让程序“听”声音
def startrecording(self):self.p = pyaudio.PyAudio() # 初始化 PyAudioself.stream = self.p.open(format=self.sample_format, channels=self.channels, rate=self.fs, input=True)self.isrecording = Trueself.button1['state'] = 'disable' # 禁用“开始”按钮print('Recording')t = threading.Thread(target=self.record) # 创建一个线程用于录音t.start()
这段代码的作用是初始化录音设备,并开始录音。pyaudio.PyAudio()
会打开音频设备,self.stream.read(self.chunk)
会不断读取音频数据并存储到 self.frames
列表中。
4. 停止录音并保存文件:把声音“存”下来
def stoprecording(self):self.isrecording = Falseprint('Recording Completed')self.filename = input('Name the file?') # 提示用户输入文件名self.filename = self.filename + ".wav"wf = wave.open(self.filename, 'wb') # 打开文件保存音频wf.setnchannels(self.channels)wf.setsampwidth(self.p.get_sample_size(self.sample_format))wf.setframerate(self.fs)wf.writeframes(b''.join(self.frames)) # 写入音频数据wf.close()main.destroy()
这段代码的作用是停止录音,并把录制的音频数据保存为 .wav
文件。用户可以输入文件名,程序会自动添加 .wav
后缀。
第二步:这个代码能用来干啥?应用场景大揭秘!
这个工具不仅仅是一个简单的“录音机”,它的应用场景其实非常广泛!以下是一些有趣的用法:
- 会议记录:录制会议内容,方便事后整理。
- 学习笔记:录制老师的讲解,方便复习。
- 创意记录:随时随地记录灵感,方便后续创作。
- 语音备忘录:录制语音备忘录,方便提醒自己重要事项。
总之,只要你需要记录声音,这个工具都能帮你轻松搞定!
第三步:扩展玩法,让工具更强大!
接下来,我来教大家两个进阶玩法,让你的工具变得更智能、更有趣!
扩展 1:自动保存文件名——不用手动输入文件名
我们可以扩展代码,让程序自动保存文件名,不用每次都手动输入。
from datetime import datetimedef stoprecording(self):self.isrecording = Falseprint('Recording Completed')timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # 获取当前时间戳self.filename = f"Recording_{timestamp}.wav" # 自动生成文件名wf = wave.open(self.filename, 'wb')wf.setnchannels(self.channels)wf.setsampwidth(self.p.get_sample_size(self.sample_format))wf.setframerate(self.fs)wf.writeframes(b''.join(self.frames))wf.close()main.destroy()
这段代码会根据当前时间生成文件名,比如 Recording_2024-04-12_15-30-45.wav
,方便你快速找到文件。
扩展 2:实时显示录音状态——看到录音进度
我们可以让程序实时显示录音状态,比如录音时长。
import timedef record(self):start_time = time.time() # 记录开始时间while self.isrecording:data = self.stream.read(self.chunk)self.frames.append(data)elapsed_time = time.time() - start_time # 计算已录音时间print(f"Recording... {elapsed_time:.2f} seconds", end="\r") # 实时显示录音时长
这段代码会在录音时实时显示已录音的时长,方便你了解录音进度。
总结:录音机,记录声音的好帮手!
好了,今天的分享就到这里啦!是不是觉得这个工具超级实用?它不仅能帮你录制声音,还能通过简单的扩展,实现更多有趣的功能。有了它,你的学习和生活会变得更加轻松和高效。
如果你也想拥有这样一个“声音捕手”,那就赶紧动手试试吧!相信我,有了它,你的生活会变得更加丰富多彩。
最后,别忘了点赞和分享,让更多人知道这个超实用的 Python 小工具!我们下次再见!
需要完整的源码,请在评论区留言,或私信我。