Alarma sonora cuando termina el código

143

Estoy en una situación en la que mi código tarda mucho en ejecutarse y no quiero estar mirándolo todo el tiempo, pero quiero saber cuándo está listo.

¿Cómo puedo hacer que el código (Python) suene como una "alarma" cuando se hace? Estaba contemplando hacer que reproduzca un archivo .wav cuando llegue al final del código ...

¿Es esta incluso una idea factible? Si es así, ¿cómo podría hacerlo?

mtigger
fuente
¿Qué sistema operativo estás usando?
Thomas Fenzl
Ubuntu 12.04, y el código está en python.
mtigger
44
También me interesaría saber cómo hacer esto en Windows.
Jared Nielsen
1
Posible duplicado de Play audio con Python Ubuntu bash: askubuntu.com/questions/277215/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Respuestas:

235

En Windows

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

Donde freq es la frecuencia en Hz y la duración es en milisegundos.

En Linux y Mac

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

Para usar este ejemplo, debe instalar sox.

En Debian / Ubuntu / Linux Mint, ejecute esto en su terminal:

sudo apt install sox

En Mac, ejecute esto en su terminal (usando macports):

sudo port install sox

Discurso en Mac

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

Discurso en Linux

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

Necesita instalar el speech-dispatcherpaquete en Ubuntu (o el paquete correspondiente en otras distribuciones):

sudo apt install speech-dispatcher
Ryan Saxe
fuente
1
bien Tienes que descargarlo, te daré el enlace, déjame encontrarlo ... Acabo de publicar otro para Mac que realmente te hablará, para que pueda decirte cuándo está listo
Ryan Saxe
¡Gracias! ¿Sabes si Linux tiene uno que te hable a ti también?
mtigger
2
el mío dice que no se encuentra dicho, a pesar de que he instalado Sox y Play Works. Pero he encontrado una alternativa. import os os.system ('espeak "su programa ha terminado"')
mtigger
No se encuentra winsound. ¿No está disponible para OS X?
Charlie Parker
1
@CharlieParker, si observa la respuesta completa, la primera opción es solo para usuarios de Windows. Los otros indican cómo hacerlo en otros entornos, que incluye OSX
Ryan Saxe
30
 print('\007')

toca el sonido de la campana

Josh Allemon
fuente
3
Esto no parece funcionar a través de ipython / Jupyter
Kyle Barron
26

Este parece funcionar tanto en Windows como en Linux * ( de esta pregunta ):

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

beep()

En Windows, puede poner al final:

import winsound
winsound.Beep(500, 1000)

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

Para trabajar en Linux, es posible que deba hacer lo siguiente (del comentario de QO):

  • en una terminal, escriba 'cd /etc/modprobe.d' y luego 'gksudo gedit blacklist.conf'
  • comenta la línea que dice 'blacklist pcspkr', luego reinicia
  • compruebe también que las preferencias del terminal tienen marcada la 'Campana del terminal'.
Saullo GP Castro
fuente
1
¡Gracias! solo para agregar, es posible que deba activar el sonido de la campana de terminal en ubuntu gnome para que funcione.
mtigger
@mtigger ¿Podría explicar cómo hacerlo, para que podamos actualizar la respuesta ... (o puede actualizar)
Saullo GP Castro
1
en una terminal, escriba 'cd /etc/modprobe.d' y luego 'gksudo gedit blacklist.conf'. descomenta la línea que dice 'blacklist pcspkr', luego reinicia. compruebe también que las preferencias del terminal tienen marcada la 'Campana del terminal'.
mtigger
¿Cómo verificar "que las preferencias del terminal tienen el 'Terminal Bell' marcado" en Ubuntu 13?
user2384994
"\ a" funcionó para mí en el subsistema Ubuntu para Windows, ¡gracias!
Ryan
17

El despachador de voz de ubuntu se puede usar:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])
Ishan Khare
fuente
pero, comenzando a jugar cuando el proceso terminó.
cengizkrbck
ese es el comportamiento previsto, quieres el sonido cuando finaliza el proceso
Ishan Khare
puedes agregar -wargumentos para esperar mientras spd-say termina la frase
ruX
8

Supongo que desea la campana del sistema estándar, y no quiere preocuparse por las frecuencias y duraciones, etc., solo quiere la campana de Windows estándar.

import winsound
winsound.MessageBeep()
poulter7
fuente
8

La respuesta de Kuchi no funcionó para mí en OS X Yosemite (10.10.1). Encontré el afplaycomando ( aquí ), al que puedes llamar desde Python. Esto funciona independientemente de si el timbre audible de Terminal está habilitado y sin una biblioteca de terceros.

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

Ver: Python Sound ("Bell").
Esto me ayudó cuando quería hacer lo mismo.
Todos los créditos van a gbc

Citar:

Has probado :

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

Eso funciona para mí aquí en Mac OS 10.5

En realidad, creo que tu intento original también funciona con una pequeña modificación:

print('\a')

(Solo necesita las comillas simples alrededor de la secuencia de caracteres).

Kuchi
fuente
6

¿Por qué usar Python? Puede olvidar eliminarlo y registrarlo en un repositorio. Simplemente ejecute su comando de Python con && y otro comando para ejecutar para hacer la alerta.

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

o suelte una función en su .bashrc. Utilizo apython aquí pero puedes anular 'python'

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
rtaft
fuente
Genial, funciona. también conos.system("paplay sound-alarm.oga")
fsevenm
4

Se puede hacer por código de la siguiente manera:

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

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])
Du Peng
fuente
2
Debe agregar algunos comentarios u otra explicación para este código para explicar cómo funciona y por qué responde la pregunta.
skrrgwasme