web-dev-qa-db-fra.com

Python: émettre un bip sonore

J'essaie de faire en sorte que le programme me donne un bip sonore. Je suis sur une machine Windows. J'ai regardé http://docs.python.org/library/winsound.html

Mais je ne sais pas comment je peux programmer ceci avec un scanner de codes à barres.

Voici mon code pour le scanner de codes à barres en série.

ser = serial.Serial()
ser.baudrate = 9600

#for windows
ser.port = 2 #for COM3

ser.open()
ser.write('hello')
ser.close()

MISE À JOUR: Depuis que je gêne mes collègues de travail avec le bip. Puis-je le faire passer par la prise audio pour casque?

75
Marc Brigham

Sous Windows, si vous souhaitez simplement que l'ordinateur émette un bip:

import winsound
frequency = 2500  # Set Frequency To 2500 Hertz
duration = 1000  # Set Duration To 1000 ms == 1 second
winsound.Beep(frequency, duration)

La winsound.Beep() peut être utilisée partout où vous voulez que le bip se produise.

110
CyanRook

La façon multi-plateforme de faire ceci est de print '\a'. Cela enverra le caractère ASCII) à la sortie standard et produira éventuellement un bip (alerte). Notez que de nombreux émulateurs de terminaux modernes offrent la possibilité d’ignorer les caractères d’alarme.

Puisque vous êtes sur Windows, vous serez heureux d’entendre que Windows a sa propre API Beep , qui vous permet d’envoyer des bips. de longueur et de hauteur arbitraires. Notez que ceci est une solution uniquement Windows, vous devriez donc probablement préférer print '\a' sauf si vous vous souciez vraiment de Hertz et des millisecondes.

L’API Beep est accessible via le module winsound : http://docs.python.org/library/winsound.html

113
jforberg

Linux.

$ apt-get install beep

$ python
>>> os.system("beep -f 555 -l 460")

OR

$ beep -f 659 -l 460 -n -f 784 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 880 -l 230 -n -f 659 -l 230 -n -f 587 -l 230 -n -f 659 -l 460 -n -f 988 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 1047-l 230 -n -f 988 -l 230 -n -f 784 -l 230 -n -f 659 -l 230 -n -f 988 -l 230 -n -f 1318 -l 230 -n -f 659 -l 110 -n -f 587 -l 230 -n -f 587 -l 110 -n -f 494 -l 230 -n -f 740 -l 230 -n -f 659 -l 460
18
YumYumYum

Je cherchais le même mais pour Linux Shell.

Le sujet m'a amené à une réponse, -Merci-

Peut-être plus de manière pythonique:

import os
beep = lambda x: os.system("echo -n '\a';sleep 0.2;" * x)
beep(3)

Remarques :

  • la valeur de veille (ici 0.2), dépend de la durée (secondes) de votre bip sonore par défaut
  • J'ai choisi d'utiliser os.system plutôt que subprocess.Popen pour la simplicité (ça pourrait être mauvais)
  • le '-n' pour echo n'aura plus d'affichage
  • le dernier ';' after sleep est nécessaire pour la séquence de texte résultante (* x)
  • également testé par ssh sur un terme X
12
s4mdf0o1

J'ai fait un package à cet effet.

Vous pouvez l'utiliser comme ceci:

from pybeep.pybeep import PyVibrate, PyBeep
PyVibrate().beep()
PyVibrate().beepn(3)
PyBeep().beep()
PyBeep().beepn(3)

Cela dépend de sox et ne supporte que python3.

4
qed

Il y a une réponse Windows et une réponse Debian, alors voici un Mac :

Cela suppose que vous êtes simplement ici à la recherche d'un moyen rapide d'émettre un son d'alerte personnalisable, et pas spécifiquement le bip piézoélectrique que vous obtenez sous Windows:

os.system( "say beep" )

Avertissement: Vous pouvez remplacer os.system avec un appel au module subprocess si vous craignez que quelqu'un modifie votre code sonore.

Voir: Comment rendre le matériel sonore sous Mac OS X 10.6

3
c z

La voie multi-plateforme:

import time
import sys
for i in range(1,6):
    sys.stdout.write('\r\a{i}'.format(i=i))
    sys.stdout.flush()
    time.sleep(1)
sys.stdout.write('\n')
3
foo bar