You need to enable JavaScript to run this app. 使用Python的Turtle开发小游戏时winsound播放背景音乐报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的Turtle开发小游戏时winsound播放背景音乐报错如何解决

问题原因
  • 你将winsound.PlaySound("background.wav", winsound.SND_ASYNC)放在了while True无限循环内部,每次循环都会重新触发一次音频播放请求,上一次还在执行的播放任务会被新请求直接中断,不仅导致背景音乐始终卡在开头无法正常播放,还会占满所有可用音频通道,最终其他音效也全部失效。
  • winsound本身仅支持无压缩PCM编码的WAV格式音频,如果你的background.wav是压缩编码格式、文件路径错误、文件名包含特殊字符,也会触发RuntimeError: Failed to play sound报错。
  • 你仅使用了SND_ASYNC标记,没有搭配循环播放标记,单次音频播放结束后就会自动停止,反复调用反而会持续打断正常播放流程。
解决方法
  1. 首先将背景音乐播放代码从while循环中移出,放在循环启动前仅执行一次,需要循环播放背景音乐的话,追加winsound.SND_LOOP标记,多个标记用按位或|连接:
import winsound
# 放在while循环外部,全局仅执行一次
winsound.PlaySound("background.wav", winsound.SND_ASYNC | winsound.SND_LOOP)

while True:
    # 删除循环内部的背景音乐播放代码
    wn.update()
    # Move the ball
    ball.setx(ball.xcor() + ball.dx)
    ball.sety(ball.ycor() + ball.dy)
  1. 检查音频文件合规性:
  • 确认background.wav和Python脚本放在同一文件夹下,或者填写完整的绝对路径,路径中不要包含中文、空格或特殊符号
  • 将音频转码为无压缩PCM编码、16bit位深、44100Hz采样率的WAV格式,适配winsound的解码要求
  1. 如果需要同时播放背景音乐和其他游戏音效,winsound本身不支持多音频同时输出,可以改用pygame.mixer模块实现多音频通道管理,示例代码如下:
import pygame
# 初始化音频模块
pygame.mixer.init()
# 加载并循环播放背景音乐
pygame.mixer.music.load("background.wav")
pygame.mixer.music.play(-1)
# 加载其他音效
hit_sound = pygame.mixer.Sound("hit.wav")
# 需要播放音效时调用,不会打断背景音乐
hit_sound.play()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 00:48:04