Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-对winsound使用多个标志?_Python_Windows_Python 3.x_Audio_Wav - Fatal编程技术网

Python-对winsound使用多个标志?

Python-对winsound使用多个标志?,python,windows,python-3.x,audio,wav,Python,Windows,Python 3.x,Audio,Wav,这是我当前的代码: import winsound as wav wav.PlaySound("music.wav", wav.SND_LOOP | wav.SND_ASYNC) input() wav.PlaySound("beep.wav", wav.SND_ASYNC | wav.SND_NOSTOP) 来自:“[Winsound]对[文件]的]解释取决于标志的值,标志可以是下面描述的常量的按位或组合” 音乐本身异步播放,并循环播放。但是,当上述代码播放蜂鸣音时,会抛出一个错误(spr

这是我当前的代码:

import winsound as wav

wav.PlaySound("music.wav", wav.SND_LOOP | wav.SND_ASYNC)
input()
wav.PlaySound("beep.wav", wav.SND_ASYNC | wav.SND_NOSTOP)
来自:“[Winsound]对[文件]的]解释取决于标志的值,标志可以是下面描述的常量的按位或组合”

音乐本身异步播放,并循环播放。但是,当上述代码播放蜂鸣音时,会抛出一个错误(sprites.py是代码的文件):

回溯(最近一次呼叫最后一次):
文件“../sprites.py”,第5行,在
播放声音(“beep.wav”,wav.SND_ASYNC,wav.SND_NOSTOP)
运行时错误:无法播放声音
交换
SND_ASYNC
SND_NOSTOP
会产生相同的错误,删除
SND_NOSTOP
会发出嘟嘟声,但音乐会中断

为什么会发生这种情况,如果它是不可修复的,有没有其他方法可以让嘟嘟声在不切断音乐的情况下播放

如果这很重要的话,声音文件是


存在,但它似乎没有答案。

您梳理的旗子很好;这不是问题所在。问题是您使用的API不支持一次播放多个声音

换句话说,抛出异常是因为循环中已经有声音在播放。
SND_NOSTOP
标志仅在您希望防止当前播放的声音被中断时使用;引发异常以指示正在播放声音。如果没有该标志,则停止旧声音并播放新声音

winsound
Python模块只不过是围绕

SND\u NOSTOP
指定的声音事件将产生另一个已在同一进程中播放的声音事件。如果由于生成该声音所需的资源正忙于播放另一个声音而无法播放该声音,则函数会立即返回FALSE,而不播放请求的声音

如果未指定此标志,PlaySound将尝试停止当前在同一进程中播放的任何声音。在其他进程中播放的声音不受影响

仅当当前没有播放其他声音时,才使用该标志乐观地播放声音:

try:
    wav.PlaySound("beep.wav", wav.SND_ASYNC | wav.SND_NOSTOP)
except RuntimeError:
    # sound api busy with another sound, tough luck
    pass
为了同时播放声音,您需要一个能够混合声音的API
PlaySound
无法执行此操作,标准库中没有其他功能可以执行此操作


您需要的不是让您使用DirectSound API。像这样。该库包含一个优秀的音乐播放器,它可以将循环音乐与偶尔并行播放的其他声音效果结合起来

你能提供wav文件的链接,这样我就可以复制错误添加的声音文件。
try:
    wav.PlaySound("beep.wav", wav.SND_ASYNC | wav.SND_NOSTOP)
except RuntimeError:
    # sound api busy with another sound, tough luck
    pass