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

MacBook Air M1 Sonoma下pyttsx3报objc未定义NameError的解决咨询

解决MacBook Air M1 Sonoma下pyttsx3的NameError问题

错误原因

  1. pyttsx3的macOS驱动(nsss)依赖pyobjc库,未安装或安装不完整时会触发objc未定义的错误。
  2. 代码中存在函数嵌套定义问题:speak函数内部又定义了一个同名的speak函数,导致pyttsx3的实现无法被正确调用,且作用域混乱。

修复步骤

1. 安装依赖库

在终端执行以下命令,安装pyttsx3所需的pyobjc相关依赖:

pip install pyobjc pyobjc-core pyobjc-framework-Cocoa

如果使用Python3,可替换为pip3。

2. 修正代码结构

移除函数嵌套的错误写法,重构speak函数,让NSSpeechSynthesizer和pyttsx3的实现逻辑清晰分离:

import NSSpeechSynthesizer 
import speech_recognition as sr 
import webbrowser 
import pywhatkit 
import yfinance as yf 
import pyjokes 
import wikipedia 
import datetime 
import pyttsx3  # 提前导入pyttsx3

# 语音转文本函数(保持原逻辑不变)
def transform_audio_into_text():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        r.pause_threshold = 0.8 
        print("可以开始说话了")
        audio = r.listen(source)
        try:
            request = r.recognize_google(audio, language='es-PE')
            print("你的请求: " + request)
            return request
        except sr.UnknownValueError:
            print("我没听懂你说的")
            return "我还在等待..."
        except sr.RequestError:
            print("服务不可用")
            return "我还在等待..."
        except:
            print("出了点问题")
            return "我还在等待..."
            
# 语音合成函数(重构后)
def speak(message):
    # 优先使用NSSpeechSynthesizer
    try:
        synthesizer = NSSpeechSynthesizer.alloc().init()
        synthesizer.setVoice_("com.apple.speech.synthesis.voice.Monica")
        synthesizer.startSpeakingString_(message)
        while synthesizer.isSpeaking():
            pass
        return
    except Exception as e:
        print(f"NSSpeechSynthesizer 错误: {e}")
    
    # 备选使用pyttsx3
    try:
        engine = pyttsx3.init(driverName='nsss')
        engine.say(message)
        engine.runAndWait()
    except Exception as e:
        print(f"pyttsx3 错误: {e}")

额外说明

  • 如果安装依赖后仍有问题,可尝试升级pyttsx3到最新版本:pip install --upgrade pyttsx3
  • M1芯片系统建议使用原生支持arm64的Python环境(如从Python官网下载的安装包),避免Rosetta转译带来的兼容性问题。

内容的提问来源于stack exchange,提问作者Yeferson CV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:47:08