Alarme sonoro quando o código termina

143

Estou em uma situação em que meu código demora muito para ser executado e não quero ficar olhando para ele o tempo todo, mas quero saber quando isso é feito.

Como faço para que o código (Python) pareça um "alarme" quando ele é feito? Eu estava pensando em fazê-lo reproduzir um arquivo .wav quando chegar ao final do código ...

É mesmo uma ideia viável? Se sim, como eu poderia fazer isso?

mtigger
fonte
Qual sistema operacional você está usando?
Thomas Fenzl 15/05
Ubuntu 12.04, e o código está em python.
Mtgger 15/05
4
Eu também estaria interessado em saber como fazer isso no Windows.
Jared Nielsen
1
Possível duplicado de reprodução de áudio com Python Ubuntu bash: askubuntu.com/questions/277215/...
Ciro Santilli郝海东冠状病六四事件法轮功

Respostas:

235

No Windows

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

Onde freq é a frequência em Hz e a duração em milissegundos.

No Linux e Mac

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

Para usar este exemplo, você deve instalar sox.

No Debian / Ubuntu / Linux Mint, execute isto no seu terminal:

sudo apt install sox

No Mac, execute isso no seu terminal (usando macports):

sudo port install sox

Discurso no Mac

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

Discurso no Linux

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

Você precisa instalar o speech-dispatcherpacote no Ubuntu (ou o pacote correspondente em outras distribuições):

sudo apt install speech-dispatcher
Ryan Saxe
fonte
1
right Você precisa fazer o download, eu darei o link, deixe-me encontrá-lo ... Acabei de publicar outro para macs que realmente fala com você, para que ele possa dizer quando terminar
Ryan Saxe
obrigado! você sabe se o linux tem um que também fale com você?
mtigger
2
o meu diz que o dizer não foi encontrado, apesar de eu ter instalado o sox e o play funciona. mas eu encontrei uma alternativa. import os os.system ('espeak "seu programa terminou"')
mtigger
winsound não foi encontrado. Não está disponível para o OS X?
Charlie Parker
1
@CharlieParker, se você olhar a resposta completa, a primeira opção é apenas para usuários do Windows. O estado aos outros como em outros ambientes, que inclui OSX
Ryan Saxe
30
 print('\007')

toca o som da campainha

Josh Allemon
fonte
3
Isto não aparece para trabalhar através ipython / Jupyter
Kyle Barron
26

Este parece funcionar no Windows e Linux * ( desta pergunta ):

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

beep()

No Windows, pode colocar no final:

import winsound
winsound.Beep(500, 1000)

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

Para trabalhar no Linux, você pode precisar fazer o seguinte (no comentário do QO):

  • em um terminal, digite 'cd /etc/modprobe.d' e depois 'gksudo gedit blacklist.conf'
  • comente a linha que diz 'lista negra pcspkr' e reinicie
  • verifique também se as preferências do terminal estão com o 'Terminal Bell' marcado.
Saullo GP Castro
fonte
1
obrigado! só para adicionar, pode ser necessário ativar o som da campainha do terminal no ubuntu gnome para que ele funcione.
mtigger
@mtigger Poderia explicar como fazer isso, para que possamos atualizar a resposta ... (ou você pode atualizar)
Saullo GP Castro
1
em um terminal, digite 'cd /etc/modprobe.d' e depois 'gksudo gedit blacklist.conf'. descomente a linha que diz 'lista negra pcspkr' e, em seguida, reinicie. verifique também se as preferências do terminal estão com o 'Terminal Bell' marcado.
mtigger
como verificar "se as preferências do terminal marcaram o 'Terminal Bell'" no ubuntu 13?
user2384994
"\ a" funcionou para mim no subsistema Ubuntu para Windows, obrigado !!
Ryan
17

O dispatcher de fala do ubuntu pode ser usado:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])
Ishan Khare
fonte
mas, começando a tocar quando o processo terminar.
cengizkrbck
isso é o que o comportamento desejado é que você deseja que o som quando o processo acabamentos
Ishan Khare
você pode adicionar -wargumento para esperar enquanto SPD-digamos termina a frase
Rux
8

Suponho que você queira a campainha padrão do sistema e não queira se preocupar com frequências e durações, etc., você só quer a campainha padrão do Windows.

import winsound
winsound.MessageBeep()
poulter7
fonte
8

A resposta de Kuchi não funcionou para mim no OS X Yosemite (10.10.1). Eu encontrei o afplaycomando ( aqui ), que você pode chamar apenas de Python. Isso funciona independentemente de a campainha audível do Terminal estar ativada e sem uma biblioteca de terceiros.

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

Veja: Python Sound ("Bell")
Isso me ajudou quando eu queria fazer o mesmo.
Todos os créditos vão para gbc

Citar:

Você tentou :

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

Isso funciona para mim aqui no Mac OS 10.5

Na verdade, acho que sua tentativa original também funciona com uma pequena modificação:

print('\a')

(Você só precisa de aspas simples na sequência de caracteres).

Kuchi
fonte
6

Por que usar python? Você pode esquecer de removê-lo e fazer o check-in em um repositório. Basta executar seu comando python com && e outro comando para executar o alerta.

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

ou solte uma função no seu .bashrc. Eu uso apython aqui, mas você pode substituir 'python'

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
rtaft
fonte
ótimo, funciona. também comos.system("paplay sound-alarm.oga")
fsevenm
4

Isso pode ser feito pelo código da seguinte maneira:

import time
time.sleep(10)   #Set the time
for x in range(60):  
    time.sleep(1)
    print('\a')
Satyendra Yadav
fonte
2
import subprocess

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])
Du Peng
fonte
2
Você deve adicionar alguns comentários ou outras explicações para este código para explicar como ele funciona e por que ele responde à pergunta.
Skrrgwasme