You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合Python SpeechRecognition与OpenAI Whisper实现麦克风语音无文件转写?

无需保存本地文件实现SpeechRecognition+Whisper语音转写

原代码问题分析

你之前的代码报错主要有两个原因:

  1. 用open("audio.wav", "r+")打开文件时,r+模式要求文件已存在,不存在就会报错;而且SpeechRecognition的AudioData对象不是原始字节数据,不能直接写入文件。
  2. OpenAI的Whisper接口需要的是符合WAV格式的有效文件对象或字节流,你传递的文件对象没有正确写入音频数据,自然触发错误。

正确实现方案

SpeechRecognition的AudioData对象自带get_wav_data()方法,可直接导出标准WAV格式的字节数据。我们用io.BytesIO把这些字节包装成内存中的文件对象,完全不需要保存到本地硬盘,就能直接传给Whisper接口。

复用原有录音逻辑的完整代码

import speech_recognition as sr
import openai
import io

def whisper_listen():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Speak Anything :")
        audio = r.listen(source)
        
        # 将AudioData转为WAV字节流,包装成内存文件对象
        wav_data = audio.get_wav_data()
        audio_file = io.BytesIO(wav_data)
        audio_file.name = "audio.wav"  # 给文件对象指定名字,Whisper需要识别文件格式
        
        try:
            transcript = openai.Audio.transcribe("whisper-1", audio_file)
            print("You said : {}".format(transcript["text"]))
            return transcript["text"]
        except Exception as e:
            print(f"转写失败: {str(e)}")
            return "write me some code to print hello world"

注意事项

  • 提前通过openai.api_key = "你的API密钥"配置好OpenAI密钥
  • get_wav_data()默认导出PCM 16-bit、16kHz的WAV数据,完全符合Whisper的输入要求
  • 必须给内存文件对象指定name属性,否则Whisper无法识别文件格式

内容的提问来源于stack exchange,提问作者Lukas Baker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 21:37:16