微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python – 为winsound使用多个标志?

这是我现在的代码

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)

从python winsound文档 :“ [Winsound]对文件的解释取决于标志的值,它可以是下面描述的常量的按位或运算组合 ”

音乐本身asynchronous播放,并循环播放。 但是,当上面的代码播放嘟嘟声,它会引发错误(sprites.py是代码文件):

Traceback (most recent call last): File ".../sprites.py",line 5,in <module> wav.PlaySound("beep.wav",wav.SND_ASYNC | wav.SND_NOSTOP) RuntimeError: Failed to play sound

交换SND_ASYNC和SND_NOSTOP会产生相同的错误,并且移除SND_NOSTOP结果会发出嘟嘟声,但音乐会被SND_NOSTOP 。

C#与Adobe Air的桌面应用程序

C#无法启动系统EXE进程

C / C ++中未固定的结构

如何更改.net Web应用程序中的认文化设置?

R Markdown文件被编织成HTML / PDF后松散编码信息

为什么会发生这种情况,如果不能修复,还有另外一种方法可以在不切断音乐的情况下发出嘟嘟声?

声音文件在这里 ,如果这是重要的。

这个问题存在,但它似乎没有答案。

从控制台运行gimp

MinGW上的localtime_r支持

如何使用RubyreplaceVC ++资源文件中的文本,当编码全部被破解?

是否有可能从Python内杀死Windows上的进程?

我在哪里可以获得编程反馈

你正在梳旗子就好了; 这不是问题。 问题是,您正在使用的API不支持一次播放多个声音。

换句话说,因为已经有一个声音在循环播放,所以抛出异常。 SND_NOSTOP标志仅用于防止当前正在播放的声音中断; 提出例外以表明声音正在播放。 没有旗子,旧的声音停止,新的声音播放。

winsound python模块只不过是Windows API PlaySound函数一个简单的包装器,它指出:

SND_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。 像pyglet库一样 。 这个库包含了一个优秀的音频API ,它可以将并发音乐和偶尔并行播放的其他音效结合起来。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐