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?


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


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

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


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

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

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

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

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


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
}

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

2
import subprocess

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

2
Vous devez ajouter des commentaires ou une autre explication à ce code pour expliquer son fonctionnement et pourquoi il répond à la question.
skrrgwasme
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.