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

Python语音机器人playsound循环播MP3报MCI Error 263如何解决?

错误原因
  • 核心是Windows系统下playsound库的底层实现缺陷:播放音频完成后不会及时释放文件句柄,也没有正确释放MCI设备资源。
  • 你在循环内反复覆盖同一个Welcome.mp3文件,前两次播放后文件还被系统占用,第三次要写入新内容或者打开播放时,系统无法访问被占用的文件,就抛出263错误。
修复方案

下面给两个可行的修复方式,按需选择即可:

方案1:每次使用不同的临时音频文件,播放后直接删除

不需要更换依赖库,修改循环内的音频生成播放逻辑就行,修改后的代码片段如下:

import uuid # 新增导入,用来生成唯一文件名

# 前面的原有代码保持不变,只修改for循环内的逻辑
for i in r.json():
    bot_message = i['text']
    print(f"{i['text']}")
    myobj = gTTS(text=bot_message)
    # 生成唯一临时文件名,避免重复占用
    temp_filename = f"temp_{uuid.uuid4().hex}.mp3"
    myobj.save(temp_filename)
    playsound(temp_filename)
    # 播放完成后删除临时文件
    os.remove(temp_filename)

这个方案改动最小,兼容性最好,适合不想调整依赖的场景。

方案2:更换更稳定的音频播放库

playsound本身年久失修,Windows下bug很多,可以换成pygame的音频模块来播放,稳定性更高:

  1. 先安装依赖:pip install pygame
  2. 修改后的播放逻辑示例:
from pygame import mixer # 新增导入

# 初始化mixer
mixer.init()

# 原有代码不变,循环内播放部分改成下面的逻辑
for i in r.json():
    bot_message = i['text']
    print(f"{i['text']}")
    myobj = gTTS(text=bot_message)
    myobj.save("Welcome.mp3")
    # 用pygame播放
    mixer.music.load("Welcome.mp3")
    mixer.music.play()
    # 等待播放完成
    while mixer.music.get_busy():
        pass
    # 卸载文件,释放资源
    mixer.music.unload()

内容的提问来源于stack exchange,提问作者Pankaj Jaiswal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:09:03