2008-08-17 127 views
43

我想通過發出嘟嘟聲來讓Python程序在完成任務時發出警報。目前,我使用import os,然後使用命令行語音程序說「過程完成」。我寧願它是一個簡單的「鍾」。Python聲音(「貝爾」)

我知道有一個函數可以在可可應用程序NSBeep中使用,但我認爲這與此無關。

我也試過print(\a)但是沒有奏效。

我使用的是蘋果機,如果你不能通過我的可可評論告訴,那可能會有所幫助。

謝謝!

+6

`進口OS ; os.system('say「Beer time。'');打印('\ a \ a \ a')` – 2015-08-27 22:41:47

回答

61

你試過:

import sys 
sys.stdout.write('\a') 
sys.stdout.flush() 

那我在這裏10.5

其實在Mac OS,我覺得你原來的嘗試的作品還帶有少許的修改:

print('\a') 

(你只需要在字符序列周圍使用單引號)。

+4

我在Ubuntu上,它不適合我。任何想法? – kecske 2011-11-26 23:39:33

5

我不得不在我的活動終端配置文件iTerm中關閉「沉默終端鍾」選項print('\a')才能正常工作。它在終端默認情況下工作正常。

您也可以使用Mac模塊Carbon.Snd播放系統提示音:

>>> import Carbon.Snd 
>>> Carbon.Snd.SysBeep(1) 
>>> 

的碳模塊沒有任何文件,所以我只好用help(Carbon.Snd),看看哪些功能可用。它似乎是Carbon上的直接接口,因此Apple Developer Connection上的文檔可能會有所幫助。

10

如果你有PyObjC(Python的 - Objective-C的橋)安裝或OS上運行X 10.5的系統蟒蛇(其中附帶PyObjC),你可以做

from AppKit import NSBeep 
NSBeep() 

播放系統警報。

6

我嘗試了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中你有很多的自定義選項,您可以另外進行實驗。

1

建立在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'