树莓派PyAudio项目报错NameError: name 'stream'未定义的解决求助
问题解决建议
核心原因
stream变量仅在still_picked_up代码块的局部作用域中定义,on_turn函数无法访问该局部变量;即便尝试全局变量方案,大概率是因为没有正确声明全局变量导致失效。
具体修复步骤
全局初始化变量
在所有函数定义之前,先初始化全局的stream及相关变量,确保作用域覆盖所有需要调用的函数:import pyaudio # 导入其他所需库... # 全局变量初始化 stream = None paused = False p = None # 同步初始化PyAudio实例,避免stream依赖的实例被提前销毁在
still_picked_up中声明全局变量并赋值
在still_picked_up函数内部,使用global关键字声明要操作的全局变量,再进行赋值操作:def still_picked_up(): global stream, p, paused # 重置暂停状态 paused = False # 初始化PyAudio和stream p = pyaudio.PyAudio() stream = p.open( format=pyaudio.paInt16, channels=1, rate=44100, output=True, # 填入你的其他参数 ) # 后续音频播放逻辑...在
on_turn中安全访问stream
在on_turn函数中,先检查stream是否已初始化(不为None),再调用is_active(),避免空引用错误:def on_turn(): global paused, stream # 先判断stream是否存在,再检查状态 if stream is not None: if stream.is_active(): if not paused: stream.stop_stream() paused = True else: stream.start_stream() paused = False # 其他旋转检测逻辑...添加资源清理逻辑(可选但推荐)
当听筒挂断时,关闭stream和PyAudio实例,避免资源泄漏:def on_hang_up(): global stream, p if stream is not None: stream.stop_stream() stream.close() stream = None if p is not None: p.terminate() p = None
内容的提问来源于stack exchange,提问作者FrytheGuy
相关产品推荐
相关产品推荐

