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

Python playsound调用子目录mp3报错:驱动无法识别指定命令参数

问题现象

运行以下Python代码尝试播放Assets子目录下的mp3文件:

from playsound import playsound
import threading
threading.Thread(target=playsound, args=('Assets\Loss.mp3',)).start()

执行后抛出如下异常:

Error 259 for command:
        play "Assets\Loss.mp3" wait
    The driver cannot recognize the specified command parameter.

    Error 305 for command:
        close "Assets\Loss.mp3"
    Cannot specify extra characters after a string enclosed in quotation marks.
Failed to close the file: "Assets\Loss.mp3"
Traceback (most recent call last):
  File "C:\Users\ekila\Downloads\Smart Auto Bet\Test.py", line 10, in <module>
    playsound('Assets\Loss.mp3')
  File "C:\Python310\lib\site-packages\playsound.py", line 73, in _playsoundWin
    winCommand(u'play {}{}'.format(sound, ' wait' if block else ''))
  File "C:\Python310\lib\site-packages\playsound.py", line 64, in winCommand
    raise PlaysoundException(exceptionMessage)
playsound.PlaysoundException: 
    Error 259 for command:
        play "Assets\Loss.mp3" wait
    The driver cannot recognize the specified command parameter.

测试确认特殊现象:将目标mp3移动到Python脚本同级目录,传入文件名Loss.mp3调用时,音频可正常播放无报错,但需求是需要将mp3文件存放在Assets子目录下。
当前环境与已尝试方案:

  • 安装的playsound版本为1.2.2
  • 不使用多线程、直接调用playsound,问题仍复现
问题原因

这个报错是playsound 1.2.2版本Windows端的固有bug:底层调用Windows MCI多媒体接口发送播放指令时,对带目录层级的相对路径解析逻辑有缺陷,反斜杠路径会干扰MCI指令的引号闭合规则,导致驱动识别不到正确的命令参数;当音频文件放在脚本同级目录时,传入的路径不带目录分隔符,不会触发这个解析bug,因此可以正常播放。

解决方案

以下方案任选其一即可:

  • 方案1(最稳妥,推荐):传入音频文件的绝对路径,不需要修改第三方库代码。借助os模块动态拼接路径,兼容不同运行目录,代码示例:
from playsound import playsound
import threading
import os

# 获取当前脚本所在目录的绝对路径
base_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接Assets目录下音频文件的完整路径
audio_path = os.path.join(base_dir, "Assets", "Loss.mp3")

threading.Thread(target=playsound, args=(audio_path,)).start()
  • 方案2(改动最小):直接将相对路径中的Windows反斜杠替换为正斜杠,MCI接口原生支持正斜杠作为路径分隔符,不会触发解析错误,修改后代码如下:
from playsound import playsound
import threading
# 路径改为Assets/Loss.mp3
threading.Thread(target=playsound, args=('Assets/Loss.mp3',)).start()
  • 方案3:如果以上方案不生效,可以修改本地playsound库源码:打开Python安装目录下Lib/site-packages/playsound.py文件,找到winCommand函数,修正MCI指令拼接逻辑,给所有传入的音频路径统一包裹双引号,不要仅在路径包含空格时才添加引号即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:48:18