winsound — Windows 的声音播放接口


winsound 模块提供对 Windows 平台提供的基本声音播放机制的访问。它包括函数和几个常量。

winsound.Beep(frequency, duration)

发出 PC 扬声器的蜂鸣声。frequency 参数指定声音的频率(以赫兹为单位),并且必须在 37 到 32,767 的范围内。duration 参数指定声音应持续的毫秒数。如果系统无法发出扬声器蜂鸣声,则会引发 RuntimeError

winsound.PlaySound(sound, flags)

从平台 API 调用底层的 PlaySound() 函数。sound 参数可以是文件名、系统声音别名、作为 类字节对象 的音频数据或 None。它的解释取决于 flags 的值,flags 可以是下面描述的常量的按位 OR 组合。如果 sound 参数为 None,则会停止任何当前播放的波形声音。如果系统指示错误,则会引发 RuntimeError

winsound.MessageBeep(type=MB_OK)

调用平台 API 中的基础 MessageBeep() 函数。它会播放注册表中指定的声音。type 参数指定要播放的声音;可能的值有 -1MB_ICONASTERISKMB_ICONEXCLAMATIONMB_ICONHANDMB_ICONQUESTIONMB_OK,所有这些值都在下面进行了描述。值 -1 会产生“简单蜂鸣声”;如果无法以其他方式播放声音,这是最终的备用方案。如果系统指示错误,则会引发 RuntimeError

winsound.SND_FILENAME

sound 参数是 WAV 文件的名称。不要与 SND_ALIAS 一起使用。

winsound.SND_ALIAS

sound 参数是注册表中的声音关联名称。如果注册表中没有此类名称,则播放系统默认声音,除非还指定了 SND_NODEFAULT。如果没有注册默认声音,则引发 RuntimeError。不要与 SND_FILENAME 一起使用。

所有 Win32 系统至少支持以下内容;大多数系统支持更多内容

PlaySound() name

相应的控制面板声音名称

'SystemAsterisk'

星号

'SystemExclamation'

感叹号

'SystemExit'

退出 Windows

'SystemHand'

严重停止

'SystemQuestion'

问号

例如

import winsound
# Play Windows exit sound.
winsound.PlaySound("SystemExit", winsound.SND_ALIAS)

# Probably play Windows default sound, if any is registered (because
# "*" probably isn't the registered name of any sound).
winsound.PlaySound("*", winsound.SND_ALIAS)
winsound.SND_LOOP

重复播放声音。还必须使用 SND_ASYNC 标志以避免阻塞。不能与 SND_MEMORY 一起使用。

winsound.SND_MEMORY

sound 参数为 PlaySound() 的 WAV 文件的内存映像,作为 类似字节的对象

注意

此模块不支持从内存映像异步播放,因此此标志和 SND_ASYNC 的组合将引发 RuntimeError

winsound.SND_PURGE

停止播放指定声音的所有实例。

注意

此标志在现代 Windows 平台上不受支持。

winsound.SND_ASYNC

立即返回,允许声音异步播放。

winsound.SND_NODEFAULT

如果找不到指定的声音,请不要播放系统默认声音。

winsound.SND_NOSTOP

不要中断当前播放的声音。

winsound.SND_NOWAIT

如果声音驱动程序繁忙,请立即返回。

注意

此标志在现代 Windows 平台上不受支持。

winsound.MB_ICONASTERISK

播放 SystemDefault 声音。

winsound.MB_ICONEXCLAMATION

播放 SystemExclamation 声音。

winsound.MB_ICONHAND

播放 SystemHand 声音。

winsound.MB_ICONQUESTION

播放 SystemQuestion 声音。

winsound.MB_OK

播放 SystemDefault 声音。