171 votes

Python : Faire un bruit de bip

Je tente de faire en sorte que le programme me donne un bruit de bip. Je suis sur une machine windows. J'ai consulté http://docs.python.org/library/winsound.html

Mais je ne suis pas sûr comment je peux programmer cela avec un lecteur de code-barres.

Voici mon code pour le lecteur de code-barres série.

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

#pour windows
ser.port = 2 #pour COM3

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

MISE À JOUR : Puisque j'ennuie mes collègues avec le bip. Puis-je le faire passer par la prise audio pour les écouteurs ?

4 votes

Vous souhaitez que le scanner de code-barres fasse du bruit ou que la machine Windows à laquelle il est connecté le fasse ?

0 votes

La machine Windows. Je pense que le scanner de code-barres le fera tout seul

16 votes

Re "Mise à jour": Oui, c'est un fait bien connu que les bip peuvent être agaçants :)

246voto

CyanRook Points 929

Sous Windows, si vous souhaitez simplement faire émettre un son de bip à l'ordinateur:

import winsound
fréquence = 2500  # Définir la fréquence à 2500 Hertz
durée = 1000  # Définir la durée à 1000 ms == 1 seconde
winsound.Beep(fréquence, durée)

Le winsound.Beep() peut être utilisé partout où vous souhaitez que le bip se produise.

27 votes

Celui-ci est sympa: def ennuyer(): for i in range(1, 10): winsound.Beep(i * 100, 200)

19 votes

Ou def sos(): for i in range(0, 3): winsound.Beep(2000, 100) for i in range(0, 3): winsound.Beep(2000, 400) for i in range(0, 3): winsound.Beep(2000, 100). Je devrais probablement retourner travailler maintenant :D

1 votes

Sur windows, winsound.Beep est transmis à travers les Sons de windows.

194voto

jforberg Points 1089

La façon cross-plateforme de le faire est d'utiliser print('\a'). Cela enverra le caractère Bell ASCII à stdout, et générera espérons-le un bip (pour 'alerte'). Notez que de nombreux émulateurs de terminal modernes offrent l'option d'ignorer les caractères de sonnerie.

Comme vous êtes sur Windows, vous serez heureux d'apprendre que Windows a sa propre (tenez-vous bien) API Beep, qui vous permet d'envoyer des bips de longueur et de hauteur arbitraires. Notez que ceci est une solution uniquement pour Windows, donc vous devriez probablement préférer print('\a') à moins que Hertz et millisecondes vous importent vraiment.

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

2 votes

Bien qu'il ait demandé spécifiquement pour Windows, je pense que c'est la meilleure solution dans l'ensemble, à moins que l'API WinSound ne revienne à \a pour l'indépendance de l'OS. Il existe également de nombreuses API audio.

2 votes

Honnêtement, je éviterais de jouer les bip du haut-parleur PC dans un effort de programmation sérieux. S'il est effectivement sur Windows, il devrait probablement essayer de jouer le signal "alerte" par défaut du thème du système à la place. Avec un peu de chance, ce signal est accessible à travers le package GUI qu'il utilise.

3 votes

Si vous utilisez print dans une application console, pensez à ajouter end="" pour éviter un saut de ligne à chaque bip.

43voto

YumYumYum Points 2882

Linux.

$ apt-get install beep

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

OU

$ 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

14 votes

Downvoted for two reasons: first, GNU/Linux != Debian and apt-get isn't universal; second, you shouldn't use os.system, use the subprocess module instead.

1 votes

En tant qu'utilisateur de Linux essayant d'obtenir un bip simple et bon marché pour quand un long code se termine, c'était de loin la solution la plus facile. J'ai particulièrement aimé le petit air ! Notez que vous devrez peut-être appeler "sudo modprobe pcspkr" et installer beep avant que cette option ne fonctionne, selon askubuntu.com/questions/19906/beep-in-shell-script-not-working

14 votes

Le code os.system est bon, surtout avec une valeur codée en dur, tout le monde n'écrit pas un serveur web.

41voto

c z Points 1188

Il y a une réponse pour Windows et une réponse pour Debian, donc voici une réponse pour Mac:

Cela suppose que vous cherchez simplement un moyen rapide de créer un son d'alerte personnalisable, et non spécifiquement le bip piézoélectrique que vous obtenez sur Windows:

os.system( "say beep" )

Avertissement: Vous pouvez remplacer os.system par un appel au module subprocess si vous craignez que quelqu'un pirate votre code de bip.

Voir: Comment faire le son de bip matériel dans Mac OS X 10.6

1 votes

Et si vous ne voulez pas attendre que la commande say se termine, utilisez un & après : os.system('say "votre message ici" &')

0 votes

Plateforme croisé avec ces commandes.

26voto

s4mdf0o1 Points 317

J'étais à la recherche de la même chose mais pour Linux shell.

Le sujet m'a mené à une réponse, -merci-

Peut-être d'une manière plus pythonique :

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

Notes :

  • la valeur de sommeil (ici 0.2), dépend de la longueur (en secondes) de votre son de bip par défaut
  • J'ai choisi d'utiliser os.system plutôt que subprocess.Popen pour la simplicité (cela pourrait être mauvais)
  • le '-n' pour echo est pour ne plus afficher
  • le dernier ';' après sleep est nécessaire pour la séquence de texte résultante (*x)
  • aussi testé à travers ssh sur un terme X

7 votes

Python a l'équivalent à la fois de echo (print) et de sleep, il n'est donc pas pythonique d'utiliser des appels externes, en particulier lorsqu'il s'agit d'appels Unix (non portables).

0 votes

Que signifie (3) ?

1 votes

@bumbumpaw le (3) est passé à la lambda en tant qu'argument x. Pour ce cas spécifique, la chaîne "echo -n '\a';sleep 0.2;" sera concaténée 3 fois avec elle-même, générant la chaîne "echo -n '\a';sleep 0.2;echo -n '\a';sleep 0.2;echo -n '\a';sleep 0.2;" avant l'appel réel à la fonction os.system.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X