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?


¿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


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

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


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'.

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"'])

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()

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')

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).


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
}

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')

2
import subprocess

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.