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

如何每分钟播放同一音频?使用playsound库遇MCI设备错误

问题:playsound循环播放音频触发Error 263错误

尝试用playsound库实现每分钟重复播放同一音频,首次播放正常,但第二次运行时出现如下错误。

原代码

from playsound import playsound
from datetime import datetime
import time

while 1:
    playsound('mysound.mp3')
    time.sleep(60 - datetime.now().second)

错误信息(中文翻译)

Error 263 for command:
        open mysound.mp3
    指定的设备未打开或不被MCI识别。

    Error 263 for command:
        close mysound.mp3
    指定的设备未打开或不被MCI识别。
Failed to close the file: mysound.mp3
---------------------------------------------------------------------------
PlaysoundException                        Traceback (most recent call last)
c:\Users\ ...\notebook.ipynb Cell 4 line 8
     
      5 import time
      7 while 1:
----> 8     playsound('mysound.mp3')
      9     time.sleep(60 - datetime.now().second)
     12 #playsound('mysound.mp3')
     13 
     14 #def get_data(): 
   (...)
     19 #      
     20 #persistencia(get_data)

File c:\src\miniconda\Lib\site-packages\playsound.py:72, in _playsoundWin(sound, block)
     
     70 try:
     71     logger.debug('Starting')
---> 72     winCommand(u'open {}'.format(sound))
     73     winCommand(u'play {}{}'.format(sound, ' wait' if block else ''))
     74     logger.debug('Returning')

File c:\src\miniconda\Lib\site-packages\playsound.py:64, in _playsoundWin.<locals>.winCommand(*command)
     
     60     exceptionMessage = ('\n    Error ' + str(errorCode) + ' for command:'
     61                         '\n        ' + command.decode('utf-16') +
     62                         '\n    ' + errorBuffer.raw.decode('utf-16').rstrip('\0'))

...

PlaysoundException: 
    Error 263 for command:
        open mysound.mp3
    指定的设备未打开或不被MCI识别。

错误原因

这是Windows平台下playsound库的常见问题:第一次播放后,库没有正确释放音频设备或文件句柄,导致第二次调用MCI命令打开音频时,设备处于异常状态,无法被识别。

修复方案

方案1:改用pygame实现(推荐,稳定性更高)

pygame的音频管理机制更可靠,适合循环播放场景:

import pygame
from datetime import datetime
import time

# 初始化音频 mixer
pygame.mixer.init()
# 加载音频文件
sound = pygame.mixer.Sound('mysound.mp3')

while True:
    # 播放音频
    sound.play()
    # 等待音频播放完毕,避免和下一次播放重叠
    while pygame.mixer.get_busy():
        time.sleep(0.1)
    # 休眠到下一分钟的起始点
    time.sleep(60 - datetime.now().second)

方案2:针对playsound的临时修复

如果坚持使用playsound,可以尝试使用绝对路径并添加错误重试机制,同时确保文件未被占用:

from playsound import playsound
from datetime import datetime
import time
import os

# 转换为绝对路径,避免相对路径导致的识别问题
sound_path = os.path.abspath('mysound.mp3')

while True:
    try:
        playsound(sound_path)
    except Exception:
        # 捕获错误后短暂延迟重试
        time.sleep(1)
        playsound(sound_path)
    time.sleep(60 - datetime.now().second)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:00:30