Allarme acustico al termine del codice


143

Sono in una situazione in cui il mio codice impiega molto tempo per essere eseguito e non voglio fissarlo continuamente, ma voglio sapere quando è finito.

Come posso fare in modo che il codice (Python) suoni come un "allarme" quando viene fatto? Stavo pensando di farlo riprodurre un file .wav quando raggiunge la fine del codice ...

È anche un'idea fattibile? In tal caso, come potrei farlo?


quale sistema operativo stai usando?
Thomas Fenzl,

Ubuntu 12.04 e il codice è in Python.
mtigger

4
Sarei interessato a sapere come farlo anche in Windows.
Jared Nielsen,


Risposte:


235

Su Windows

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

Dove freq è la frequenza in Hz e la durata è in millisecondi.

Su Linux e Mac

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

Per utilizzare questo esempio, è necessario installare sox.

Su Debian / Ubuntu / Linux Mint, esegui questo nel tuo terminale:

sudo apt install sox

Su Mac, eseguilo nel tuo terminale (usando macports):

sudo port install sox

Discorso su Mac

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

Discorso su Linux

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

Devi installare il speech-dispatcherpacchetto in Ubuntu (o il pacchetto corrispondente su altre distribuzioni):

sudo apt install speech-dispatcher

1
giusto Devi scaricarlo, ti darò il link, fammelo trovare ... ne ho appena pubblicato un altro per i mac che ti parlerà davvero, quindi può dirti quando sarà finito
Ryan Saxe,

Grazie! ti capita di sapere se Linux ne ha uno che parlerà anche a te?
mtigger

2
il mio dice che dire non è stato trovato, anche se ho installato Sox e il gioco funziona. ma ho trovato un'alternativa. import os os.system ('espeak "il programma è terminato"')
mtigger

winsound non è stato trovato. Non è disponibile per OS X?
Charlie Parker,

1
@CharlieParker, se guardi la risposta completa, la prima opzione è solo per gli utenti di Windows. Gli altri affermano come su altri ambienti, tra cui OSX
Ryan Saxe,


26

Questo sembra funzionare su Windows e Linux * ( da questa domanda ):

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

beep()

In Windows, puoi mettere alla fine:

import winsound
winsound.Beep(500, 1000)

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

Per lavorare su Linux, potrebbe essere necessario eseguire le seguenti operazioni (dal commento di QO):

  • in un terminale, digitare "cd /etc/modprobe.d", quindi "gksudo gedit blacklist.conf"
  • commentare la riga che dice "blacklist pcspkr", quindi riavviare
  • controlla anche che nelle preferenze del terminale sia selezionata la "Campana terminale".

1
Grazie! solo per aggiungere, potrebbe essere necessario attivare il suono della campana del terminale in Ubuntu Gnome per farlo funzionare.
mtigger

@mtigger Potresti spiegare come fare, in modo che possiamo aggiornare la risposta ... (o puoi aggiornare)
Saullo GP Castro

1
in un terminale, digitare "cd /etc/modprobe.d", quindi "gksudo gedit blacklist.conf". decommenta la riga che dice 'blacklist pcspkr', quindi riavvia. controlla inoltre che nelle preferenze del terminale sia selezionata la "Campana terminale".
mtigger

come verificare "che le preferenze del terminale abbiano" Terminal Bell "controllato" in Ubuntu 13?
user2384994

"\ a" ha funzionato per me sul sottosistema Ubuntu per Windows, grazie !!
Ryan,

17

Ubuntu speech dispatcher può essere usato:

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

ma, iniziando a giocare al termine del processo.
cengizkrbck,

questo è il comportamento previsto, vuoi il suono al termine del processo
Ishan Khare,

puoi aggiungere -wargomento da attendere mentre spd-say termina la frase
ruX

8

Suppongo che desideri la campana di sistema standard e non vuoi preoccuparti di frequenze, durate, ecc., Vuoi solo la campana di Windows standard.

import winsound
winsound.MessageBeep()

8

La risposta di Kuchi non ha funzionato per me su OS X Yosemite (10.10.1). Ho trovato il afplaycomando ( qui ), che puoi semplicemente chiamare da Python. Funziona indipendentemente dal fatto che la suoneria acustica del terminale sia abilitata e senza una libreria di terze parti.

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

6

Vedi: Python Sound ("Bell")
Questo mi ha aiutato quando volevo fare lo stesso.
Tutti i crediti vanno a gbc

Citazione:

Hai provato :

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

Questo funziona per me qui su Mac OS 10.5

In realtà, penso che il tuo tentativo originale funzioni anche con una piccola modifica:

print('\a')

(Hai solo bisogno delle virgolette singole attorno alla sequenza di caratteri).


6

Perché usare Python? Potresti dimenticare di rimuoverlo e archiviarlo in un repository. Basta eseguire il comando python con && e un altro comando per eseguire l'avviso.

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

oppure rilascia una funzione nel tuo .bashrc. Uso apython qui ma potresti ignorare 'python'

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

ottimo, funziona. anche conos.system("paplay sound-alarm.oga")
fsevenm

4

Può essere fatto per codice come segue:

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
È necessario aggiungere alcuni commenti o altre spiegazioni per questo codice per spiegare come funziona e perché risponde alla domanda.
skrrgwasme
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.