代码完成时发出声音警报


143

我处于这样一种情况,我的代码要花很长时间才能运行,并且我不想一直盯着它,但想知道何时完成。

完成后,如何使(Python)代码听起来像是“警报”?我当时正在考虑使其在代码末尾时播放.wav文件...

这甚至是可行的想法吗?如果是这样,我该怎么办?


您使用什么操作系统?
Thomas Fenzl

Ubuntu 12.04,代码在python中。
mtigger 2013年

4
我也想知道如何在Windows中执行此操作。
Jared Nielsen


Answers:


235

在Windows上

import winsound
duration = 1000  # milliseconds
freq = 440  # Hz
winsound.Beep(freq, duration)

其中freq是频率(单位为Hz),持续时间以毫秒为单位。

在Linux和Mac上

import os
duration = 1  # seconds
freq = 440  # Hz
os.system('play -nq -t alsa synth {} sine {}'.format(duration, freq))

为了使用此示例,您必须安装sox

在Debian / Ubuntu / Linux Mint上,在终端中运行以下命令:

sudo apt install sox

在Mac上,在终端(使用macports)中运行以下命令:

sudo port install sox

在Mac上的演讲

import os
os.system('say "your program has finished"')

在Linux上的演讲

import os
os.system('spd-say "your program has finished"')

您需要speech-dispatcher在Ubuntu中安装该软件包(或在其他发行版中安装相应的软件包):

sudo apt install speech-dispatcher

1
正确,您必须下载它,我给您链接,让我找到它...我刚刚为Mac发布了一个实际上会与您交谈的文件,因此它可以告诉您完成的时间
Ryan Saxe

谢谢!您是否知道Linux是否也有一款可以与您交流?
mtigger

2
我的话说没找到,即使我已经安装了袜子并玩了。但我找到了另一种选择。import os os.system('espeak“您的程序已完成”')
mtigger

找不到winsound。OS X不可用吗?
查理·帕克

1
@CharlieParker,如果您查看完整答案,则第一个选项仅适用于Windows用户。其他人陈述了如何在其他环境中进行操作,其中包括OSX
Ryan Saxe


26

这个似乎在Windows和Linux *上都可以使用(根据这个问题):

def beep():
    print("\a")

beep()

在Windows中,可以放在末尾:

import winsound
winsound.Beep(500, 1000)

where 500 is the frequency in Herz
      1000 is the duration in miliseconds

要在Linux上工作,您可能需要执行以下操作(根据QO的评论):

  • 在终端中,键入“ cd /etc/modprobe.d”,然后键入“ gksudo gedit blacklist.conf”
  • 评论说“ blacklist pcspkr”的行,然后重新启动
  • 还要检查终端首选项是否已选中“ Terminal Bell”。

1
谢谢!只是要添加,可能需要在ubuntu gnome中打开终端铃音才能正常工作。
mtigger 2013年

@mtigger请您解释一下如何做,以便我们可以更新答案...(或者您可以更新)
Saullo GP Castro

1
在终端中,键入“ cd /etc/modprobe.d”,然后键入“ gksudo gedit blacklist.conf”。取消注释“ blacklist pcspkr”的行的注释,然后重新启动。还要检查终端首选项是否已选中“ Terminal Bell”。
mtigger 2013年

如何在Ubuntu 13中检查“终端首选项是否已选中'Terminal Bell'”?
user2384994 2013年

“ \ a”在Windows的Ubuntu子系统上为我工作,谢谢!
瑞安

17

可以使用ubuntu语音调度程序:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])

但是,过程完成后才开始播放。
cengizkrbck 2015年

这就是预期的行为,您希望过程完成时发出声音
Ishan Khare

您可以添加-w参数以等待spd-say完成该短语
ruX

8

我假设您想要标准的系统铃声,而不想关心频率和持续时间等,您只想要标准的Windows铃声。

import winsound
winsound.MessageBeep()

8

Kuchi的答案在OS X Yosemite(10.10.1)上对我不起作用。我确实找到了afplay命令(在这里),您可以从Python调用该命令。无论是否启用了终端音频铃,并且没有第三方库,此方法都有效。

import os
os.system('afplay /System/Library/Sounds/Sosumi.aiff')

6

请参阅:Python声音(“铃声”)
当我想做同样的事情时,这对我有帮助。
所有学分归gbc

引用:

你有没有尝试过 :

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

在Mac OS 10.5上适合我

实际上,我认为您的原始尝试也可以进行一些修改:

print('\a')

(您只需要在字符序列周围加上单引号)。


6

为什么要完全使用python?您可能会忘记删除它,并将其检入存储库。只需使用&&和另一个命令运行python命令以运行警报。

python myscript.py && 
    notify-send 'Alert' 'Your task is complete' && 
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga

或将函数放入.bashrc中。我在这里使用apython,但是您可以覆盖“ python”

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}

很好,很有效。也与os.system("paplay sound-alarm.oga")
fsevenm


2
import subprocess

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])

2
您应该为此代码添加一些注释或其他解释,以解释其工作方式以及为什么回答问题。
skrrgwasme,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.