PYTHON 语音识别高阶篇

文章介绍了如何使用Python的PyAudio库和Vosk、OpenAIwhisper模型实现语音录音控制时间和识别功能。作者提供了详细代码示例,展示了如何在程序中集成这两种语音识别方法,并讨论了它们在实际应用中的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、上一篇博客中讲到用SpeechRecognition库和Vosk模型来识别语音,通过麦克风录音的话,只能录很短的录音,经过不断网上搜寻,终于找到一段能控制录音时间的代码:

class Recorder(): # 录音程序
    def __init__(self, chunk=1024, channels=1, rate=16000):
        self.CHUNK = chunk # 音频帧率(也就是每次读取的数据是多少,默认1024)
        self.FORMAT = pyaudio.paInt16 # 采样时生成wav文件正常格式
        self.CHANNELS = channels # 音轨数(每条音轨定义了该条音轨的属性,如音轨的音色、音色库、通道数、输入/输出端口、音量等。可以多个音轨,不唯一)
        self.RATE = rate # 采样率(即每秒采样多少数据)
        self._running = True
        self._frames = [] # 定义frames为一个空列表

    def start(self):
        _thread.start_new_thread(self.__recording, ())

    def __recording(self):
        self._running = True
        self._frames = []
        p = pyaudio.PyAudio() # 创建PyAudio对象
        stream = p.open(format=self.FORMAT, # 采样生成wav文件的正常格式
                        channels=self.CHANNELS,  # 音轨数
                        rate=self.RATE,  # 采样率
                        input=True, # Ture代表这是一条输入流,False代表这不是输入流
                        frames_per_buffer=self.CHUNK) # 每个缓冲多少帧
        while (self._running):
            data = stream.read(self.CHUNK) # 每次读chunk个数据
            self._frames.append(data) # 将读出的数据保存到列表中
        stream.stop_stream() # 停止输入流
        stream.close() # 关闭输入流
        p.terminate() # 终止pyaudio

    def stop(self):
        self._running = False

    def save_wave(self, filename):
        p = pyaudio.PyAudio() # 创建PyAudio对象
        if not filename.endswith(".wav"):
            filename = filename + ".wav"
        wf = wave.open(filename, 'wb') # 以’wb‘二进制流写的方式打开一个文件
        wf.setnchannels(self.CHANNELS) # 设置音轨数
        wf.setsampwidth(p.get_sample_size(self.FORMAT)) # 设置采样点数据的格式,和FOMART保持一致
        wf.setframerate(self.RATE) # 设置采样率与RATE要一致
        wf.writeframes(b''.join(self._frames)) # 将声音数据写入文件
        wf.close() # 数据流保存完,关闭文件

    def record(self):
        print('请按回车键开始录音:')
        a = input()
        if str.__len__(a) == 0:
            begin = time.time()
            print("开始录音ing")
            self.start()
            print("请按回车键停止录音:")
            b 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值