我想让一个 python 程序在它完成任务时发出哔哔声来提醒我。目前,我使用import os
然后使用命令行语音程序说“处理完成”。我宁愿它是一个简单的“铃铛”。
我知道Cocoa应用程序中可以使用一个功能NSBeep
,但我认为这与此没有太大关系。
我也试过
print(\a)
但这没有用。
我正在使用 Mac,如果您无法通过我的Cocoa评论来判断,那么这可能会有所帮助。
你有没有尝试过 :
import sys
sys.stdout.write('\a')
sys.stdout.flush()
这在 Mac OS 10.5 上对我有用
实际上,我认为您最初的尝试也可以稍作修改:
print('\a')
(您只需要字符序列周围的单引号)。
如果您安装了 PyObjC(Python - Objective-C 桥)或正在 OS X 10.5 的系统 python(PyObjC 附带)上运行,您可以这样做
from AppKit import NSBeep
NSBeep()
播放系统警报。
我尝试了 pygame 模块中的混音器,它工作正常。首先安装模块:
$ sudo apt-get install python-pygame
然后在程序中,这样写:
from pygame import mixer
mixer.init() #you must initialize the mixer
alert=mixer.Sound('bell.wav')
alert.play()
使用 pygame,你有很多自定义选项,你可以另外尝试。
我必须在 iTerm 的活动终端配置文件中关闭“静音终端铃”选项print('\a')
才能工作。默认情况下,它在终端中似乎工作正常。
您也可以使用 Mac 模块Carbon.Snd
播放系统提示音:
>>> import Carbon.Snd
>>> Carbon.Snd.SysBeep(1)
>>>
Carbon 模块没有任何文档,所以我不得不使用它help(Carbon.Snd)
来查看可用的功能。它似乎是 Carbon 的直接接口,因此 Apple Developer Connection 上的文档可能会有所帮助。
以 Barry Wark 的回答为基础......
NSBeep()
来自 AppKit 的工作正常,但也会使任务栏中的终端/应用程序图标跳转。一些额外的行NSSound()
避免了这种情况,并提供了使用另一种声音的机会:
from AppKit import NSSound
#prepare sound:
sound = NSSound.alloc()
sound.initWithContentsOfFile_byReference_('/System/Library/Sounds/Ping.aiff', True)
#rewind and play whenever you need it:
sound.stop() #rewind
sound.play()
可以通过命令行找到标准声音文件locate /System/Library/Sounds/*.aiff
使用的文件NSBeep()
似乎是'/System/Library/Sounds/Funk.aiff'