杰瑞科技汇

Python winsound报警怎么用?

下面我将从简单到复杂,为你展示如何使用 winsound 实现报警功能。

Python winsound报警怎么用?-图1
(图片来源网络,侵删)

最简单的报警声音

这是最基础的用法,播放一个简单的 "哔" 声。

import winsound
import time
print("系统报警!系统报警!")
# 播放一个简单的提示音
winsound.Beep(1000, 500) # 频率1000Hz,持续500毫秒
print("报警结束。")

代码解释:

  • import winsound: 导入 winsound 模块。
  • winsound.Beep(frequency, duration): 这是核心函数。
    • frequency: 频率,单位是赫兹,范围是 37 到 32767。1000 是一个比较常见的提示音频率。
    • duration: 持续时间,单位是毫秒。500 表示声音持续半秒。

连续报警(嘀嘀嘀声)

在很多场景下,报警声是连续的、重复的,我们可以使用 for 循环和 time.sleep() 来实现。

import winsound
import time
print("检测到严重错误!开始持续报警...")
# 播响5次,每次间隔0.5秒
for i in range(5):
    print(f"报警第 {i+1} 次!")
    winsound.Beep(1000, 200)  # 声音短促
    time.sleep(0.5)           # 暂停0.5秒
print("报警停止。")

代码解释:

Python winsound报警怎么用?-图2
(图片来源网络,侵删)
  • for i in range(5): 创建一个循环,执行5次。
  • winsound.Beep(1000, 200): 播放一个短促的 200ms 的声音。
  • time.sleep(0.5): 让程序暂停 0.5 秒,这样声音之间就有了间隔,形成 "嘀嘀嘀" 的效果。

更复杂的报警音(频率变化)

报警声的音调会变化,以表示不同的紧急程度,我们可以通过改变 Beep 函数的 frequency 参数来实现。

import winsound
import time
print("警告!警告!系统即将崩溃!")
# 播放一个频率递增的报警声
for i in range(10):
    # 频率从 500Hz 开始,每次增加 100Hz
    frequency = 500 + (i * 100)
    winsound.Beep(frequency, 150)
    time.sleep(0.1)
print("报警结束。")

播放系统预设的 WAV 文件

Beep 声音比较单调,如果你有更复杂的报警声音(.wav 格式的音频文件),winsound 也可以播放。

假设你的项目目录下有一个名为 alarm.wav 的文件:

import winsound
print("播放自定义报警音!")
try:
    # 播放指定的 WAV 文件
    # 如果文件不存在或路径错误,会抛出异常
    winsound.PlaySound("alarm.wav", winsound.SND_FILENAME)
    # 或者使用绝对路径
    # winsound.PlaySound("C:\\Users\\YourUser\\Desktop\\alarm.wav", winsound.SND_FILENAME)
except FileNotFoundError:
    print("错误:找不到 alarm.wav 文件!")
    # 如果找不到文件,回退到默认的 Beep 声
    winsound.Beep(1000, 1000)
print("播放结束。")

PlaySound 函数的常用标志:

Python winsound报警怎么用?-图3
(图片来源网络,侵删)
  • winsound.SND_FILENAME: 表示第一个参数是一个文件名(字符串)。
  • winsound.SND_ASYNC: 异步播放,声音会在后台播放,你的 Python 程序会立即继续执行,而不会等待声音播放完毕。
  • winsound.SND_LOOP: 循环播放,这个标志通常与 SND_ASYNC 一起使用,让声音无限循环播放,你需要调用 winsound.PlaySound(None, 0) 来停止它。
  • winsound.SND_ALIAS: 播放系统预设的声音。winsound.SND_ALIAS('SystemExclamation') 会播放 Windows 的“警告”声。

示例:异步循环播放

import winsound
import time
print("开始异步循环播放报警音,5秒后停止...")
# 异步循环播放
winsound.PlaySound("SystemExclamation", winsound.SND_ALIAS | winsound.SND_ASYNC | winsound.SND_LOOP)
# 程序继续执行其他任务
for i in range(5):
    print(f"程序正在运行中... {i+1}/5")
    time.sleep(1)
# 停止播放
print("停止报警音。")
winsound.PlaySound(None, 0) # 停止所有异步声音

总结与注意事项

功能 函数 参数说明 适用场景
简单蜂鸣 winsound.Beep(frequency, duration) frequency: 频率 (37-32767 Hz)
duration: 持续时间 (毫秒)
简单提示、任务完成提醒
播放WAV文件 winsound.PlaySound(filename, flags) filename: WAV文件路径
flags: SND_FILENAME, SND_ASYNC
播放自定义、复杂的报警音
播放系统声音 winsound.PlaySound(alias, flags) alias: 如 'SystemAsterisk', 'SystemExclamation'
flags: SND_ALIAS, SND_ASYNC
调用系统内置的提示音

重要注意事项:

  1. Windows 专属: winsound 是 Windows 的标准库,在 macOS 或 Linux 上会报错 ModuleNotFoundError: No module named 'winsound',跨平台开发时,可以考虑使用 playsound 等第三方库。
  2. 权限问题: 在某些特殊环境下(如某些 Docker 容器或受限的沙盒环境),即使是在 Windows 上,winsound 也可能因为无法访问音频设备而失败。
  3. 用户体验: 对于长时间运行的报警,异步播放 (SND_ASYNC) 是一个很好的选择,因为它不会阻塞你的主程序,但请记得在适当时机调用 winsound.PlaySound(None, 0) 来停止它,否则它会一直循环下去。
分享:
扫描分享到社交APP
上一篇
下一篇