Alarme sonore à la fin du code

143

Je suis dans une situation où mon code est extrêmement long à exécuter et je ne veux pas le regarder tout le temps mais je veux savoir quand il est terminé.

Comment puis-je faire sonner le code (Python) comme une "alarme" une fois terminé? J'envisageais de lui faire jouer un fichier .wav quand il atteint la fin du code ...

Est-ce même une idée réalisable? Si oui, comment pourrais-je le faire?

mtigger
la source
quel système d'exploitation utilisez-vous?
Thomas Fenzl
Ubuntu 12.04 et le code est en python.
mtigger
4
Je serais également intéressé de savoir comment faire cela sous Windows.
Jared Nielsen
1
Copie possible de Play audio avec Python Ubuntu bash: askubuntu.com/questions/277215/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Réponses:

235

Sous Windows

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

Où freq est la fréquence en Hz et la durée est en millisecondes.

Sur Linux et Mac

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

Pour utiliser cet exemple, vous devez installer sox.

Sur Debian / Ubuntu / Linux Mint, exécutez ceci dans votre terminal:

sudo apt install sox

Sur Mac, exécutez ceci dans votre terminal (en utilisant macports):

sudo port install sox

Discours sur Mac

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

Discours sur Linux

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

Vous devez installer le speech-dispatcherpackage dans Ubuntu (ou le package correspondant sur d'autres distributions):

sudo apt install speech-dispatcher
Ryan Saxe
la source
1
droit Vous devez le télécharger, je vais vous donner le lien, laissez-moi le trouver ... Je viens d'en publier un autre pour les macs qui vous parlera réellement, afin qu'il puisse vous dire quand c'est fait
Ryan Saxe
Merci! savez-vous si linux en a un qui vous parlera aussi?
mtigger
2
le mien dit que dire n'est pas trouvé, même si j'ai installé sox et jouer fonctionne. mais j'ai trouvé une alternative. import os os.system ('espeak "votre programme est terminé"')
mtigger
winsound est introuvable. N'est-il pas disponible pour OS X?
Charlie Parker
1
@CharlieParker, si vous regardez la réponse complète, la première option est réservée aux utilisateurs de Windows. Les autres indiquent comment faire sur d'autres environnements, qui incluent OSX
Ryan Saxe
30
 print('\007')

joue le son de la cloche

Josh Allemon
la source
3
Cela ne semble pas fonctionner via ipython / Jupyter
Kyle Barron
26

Celui-ci semble fonctionner à la fois sous Windows et Linux * (d' après cette question ):

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

beep()

Sous Windows, on peut mettre à la fin:

import winsound
winsound.Beep(500, 1000)

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

Pour travailler sous Linux, vous devrez peut-être faire ce qui suit (à partir du commentaire de QO):

  • dans un terminal, tapez 'cd /etc/modprobe.d' puis 'gksudo gedit blacklist.conf'
  • commentez la ligne qui dit 'blacklist pcspkr', puis redémarrez
  • vérifiez également que les préférences du terminal ont coché «Terminal Bell».
Saullo GP Castro
la source
1
Merci! juste pour ajouter, il faudra peut-être activer le son de la cloche du terminal dans ubuntu gnome pour que cela fonctionne.
mtigger
@mtigger Pourriez-vous s'il vous plaît expliquer comment faire cela, afin que nous puissions mettre à jour la réponse ... (ou vous pouvez mettre à jour)
Saullo GP Castro
1
dans un terminal, tapez 'cd /etc/modprobe.d' puis 'gksudo gedit blacklist.conf'. décommentez la ligne qui dit 'blacklist pcspkr', puis redémarrez. vérifiez également que les préférences du terminal ont coché «Terminal Bell».
mtigger
comment vérifier "que les préférences du terminal ont le 'Terminal Bell' vérifié" dans ubuntu 13?
user2384994
"\ a" a fonctionné pour moi sur le sous-système Ubuntu pour Windows, merci !!
Ryan
17

ubuntu speech dispatcher peut être utilisé:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])
Ishan Khare
la source
mais, commencer à jouer lorsque le processus est terminé.
cengizkrbck
c'est ce qu'est le comportement prévu, vous voulez le son lorsque le processus se termine
Ishan Khare
vous pouvez ajouter un -wargument pour attendre pendant que spd-say termine la phrase
ruX
8

Je suppose que vous voulez la cloche standard du système, et que vous ne voulez pas vous préoccuper des fréquences et des durées, etc., vous voulez juste la cloche standard de Windows.

import winsound
winsound.MessageBeep()
volaille7
la source
8

La réponse de Kuchi n'a pas fonctionné pour moi sur OS X Yosemite (10.10.1). J'ai trouvé la afplaycommande ( ici ), que vous pouvez simplement appeler depuis Python. Cela fonctionne indépendamment du fait que la sonnerie sonore du terminal soit activée et sans bibliothèque tierce.

import os
os.system('afplay /System/Library/Sounds/Sosumi.aiff')
Zekel
la source
6

Voir: Python Sound ("Bell")
Cela m'a aidé quand je voulais faire de même.
Tous les crédits vont à gbc

Citation:

As-tu essayé :

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

Cela fonctionne pour moi ici sur Mac OS 10.5

En fait, je pense que votre tentative originale fonctionne également avec une petite modification:

print('\a')

(Vous avez juste besoin des guillemets simples autour de la séquence de caractères).

Kuchi
la source
6

Pourquoi utiliser du tout python? Vous pourriez oublier de le supprimer et de l'archiver dans un référentiel. Exécutez simplement votre commande python avec && et une autre commande à exécuter pour faire l'alerte.

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

ou déposez une fonction dans votre .bashrc. J'utilise apython ici mais vous pouvez remplacer 'python'

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}
rtaft
la source
super, ça marche. aussi avecos.system("paplay sound-alarm.oga")
fsevenm
4

Cela peut être fait par code comme suit:

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

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])
Du Peng
la source
2
Vous devez ajouter des commentaires ou une autre explication à ce code pour expliquer son fonctionnement et pourquoi il répond à la question.
skrrgwasme