Comment puis-je faire bip mon haut-parleur pc


173

À l'aide de bash, comment puis-je faire en sorte que le haut-parleur de l'ordinateur émette un bip?

Quelque chose comme ce echo 'beepsound' > /dev/pcspkrserait bien.



Réponses:


124

J'utilise généralement le petit utilitaire beepinstallé sur de nombreux systèmes. Cette commande va essayer différentes approches pour créer un son système.

Il y a 3 façons de créer un son à partir de la beeppage de manuel:

  1. La méthode traditionnelle pour produire un bip dans un script shell consiste à écrire un caractère ASCII BEL( \007) sur la sortie standard, au moyen d’une commande shell telle que

    echo -ne '\007'
    

    Cela ne fonctionne que si la sortie standard du shell appelant est actuellement dirigée vers un terminal quelconque. sinon, le bip ne produira aucun son et pourrait même causer une corruption indésirable dans le fichier vers lequel la sortie est dirigée.

  2. Il existe d'autres moyens de provoquer un bip sonore. Une méthode légèrement plus fiable consiste à ouvrir /dev/ttyet à envoyer votre personnage BEL là-bas. Ceci est robuste contre la redirection d'E / S, mais échoue quand même dans le cas où le script shell souhaitant générer un bip n'a pas de terminal de contrôle, par exemple parce qu'il est exécuté à partir d'un gestionnaire de fenêtres X.

  3. Une troisième approche consiste à vous connecter à votre écran X et à lui envoyer une commande de sonnerie. Cela ne dépend pas d'un terminal Unix, mais nécessite (bien sûr) un affichage X.

beep va simplement essayer ces 3 méthodes.


9
La page d'accueil de cette beepcommande est la suivante: johnath.com/beep Sous Ubuntu / Debian, vous pouvez l'installer avec apt-get install beep.
Riccardo Murri

14
Sur Linux, il existe une quatrième méthode badass pour émettre des bips: déchargez le pcspkrmodule, chargez-le snd-pcsp, et vous avez maintenant une carte son alsa qui utilise des astuces classiques pour envoyer le son numérique à votre haut-parleur interne. Les haut-parleurs internes piézoélectriques donnent des résultats médiocres, mais la qualité est tout à fait satisfaisante pour les haut-parleurs internes classiques. De cette façon, vous pouvez être beaucoup plus créatif pour vos bips sonores;)
BatchyX

8
@isomorphismes: pcspkret snd-pcspsont des modules, pas des packages. utilisez modprobe/ modprobe -r/ lsmodpour les manipuler. Pour votre information, ils sont dans le linux-image-somethingpaquetage, qui est déjà installé, espérons-le (sinon vous n'auriez pas de noyau Linux).
BatchyX

3
beep fonctionne généralement bien pour debian mais je devais charger le module pour que cela fonctionne sur ubuntu
mchid

4
Comme mchid l’a dit, après l’ajout du module:, bip retentit modprobe snd-pcsp!
lepe

74

Tout simplement en écho \aou \07fonctionne pour moi.

$ echo -e "\a"

Cela nécessitera probablement le pcspkrchargement du module de noyau. Je n'ai testé cela que sur RHEL, donc YMMV.

MISE À JOUR

Comme Warren l'a souligné dans les commentaires, cela peut ne pas fonctionner s'il est connecté à distance via SSH. Une solution rapide consisterait à rediriger la sortie vers l’un des périphériques TTY (idéalement inutilisé). Par exemple:

$ echo -en "\a" > /dev/tty5

5
Si vous utilisez un terminal X ou ssh dans la machine, le terminal risque de clignoter, car de nombreux programmes de type xterm / vt100 sont configurés pour le faire pour les caractères BEL.
Warren Young

2
Cela a du sens, mais cela n’a pas fonctionné pour moi sur Ubuntu 12.04.
isomorphismes

2
@isomorphismes: c'est pour les consoles, pas pour les terminaux X11. Pour les bips sous X, vous pouvez essayer ceci: askubuntu.com/a/587311/11015
MestreLion

1
@ isomorphismes: J'utilise également Ubuntu 12.04, et pour moi sudo modprobe pcspkrc'était suffisant pour activer les bips sonores sous le VT, via printf "\a"ou beeputilitaire.
MestreLion

3
Aucune des méthodes ne fonctionne pour moi. Ubuntu 16.04.1 LTS
Ar2015

68

REMARQUE: cette solution émet des bips provenant des haut - parleurs et non de la carte mère .

ALSA est livré avec le test de haut-parleur , un générateur de tonalité de test de haut-parleur en ligne de commande, qui peut être utilisé pour générer un bip:

$ speaker-test -t sine -f 1000 -l 1

Voir ce fil arch forum linux .

Cependant, la durée du bip sera arbitraire, mais peut être contrôlée comme suit:

$ ( speaker-test -t sine -f 1000 )& pid=$! ; sleep 0.1s ; kill -9 $pid

Nous pouvons aller plus loin et émettre un bip avec cette fonction:

_alarm() {
  ( \speaker-test --frequency $1 --test sine )&
  pid=$!
  \sleep 0.${2}s
  \kill -9 $pid
}

qui s'appelle avec des arguments fréquence et durée:

$ _alarm 400 200

Dans cet esprit, il est possible de créer une musique simple avec speaker-test. Voir ce script shell .


1
Votre fonction en tant que one-liner (et compatible Ctrl-C):timeout ${2} speaker-test --frequency ${1} --test sine
user569825

1
Il n'y a pas vraiment besoin de sauver pid, fait juste speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $! la même chose. Quoi qu'il en soit, la méthode de @ user569825 est plus agréable.
erm3nda

Aïe, ça fait mal.
shadi Il y a

28
tput bel

parce que terminfo définit belcomme

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)

17

Pour utiliser la carte son si soxest installé et le haut-parleur du PC sinon:

$ play -q -n synth 0.1 sin 880 || echo -e "\a"

sox est disponible pour la plupart des distributions.


2
+1 Je ne savais pas que le jeu avait cette fonctionnalité. J'ai fini par utiliser ceci dans un thenbloc à l'intérieur watchpour m'avertir lorsqu'une certaine condition était remplie. Me permet même de garder mes écouteurs. C'était très utile pour moi.
andyortlieb

D'un jeu sudo -u USER play...
bas

Sur mon système, playutilise pulseaudio, en tant qu'utilisateur. Je suppose que cela dépend de la configuration du système.
Alexander

13

Certaines distributions ont des utilitaires de ligne de commande pour y parvenir. Vous pourriez peut-être nous dire sur quelle distro vous êtes, ou chercher (par exemple emerge -s beepdans gentoo).

Au-delà des utilitaires "disponibles", vous pouvez également créer un script Perl qui émet le bip, il vous suffit simplement d'inclure:

<SomeCodeBefore>
print "\007";
<SomeCodeAfter>  

Si vous finissez par avoir un bip, essayez ce qui suit:

#! /bin/sh 

beep -f 500 -l 700 
beep -f 480 -l 400 
beep -f 470 -l 250 
beep -f 530 -l 300 -D 100 
beep -f 500 -l 300 -D 100 
beep -f 500 -l 300 
beep -f 400 -l 600 
beep -f 300 -l 500 
beep -f 350 -l 700 
beep -f 250 -l 600

J'aime que mes questions restent distro-agnostiques, echo -e "\007"travaillerais- je en bash au lieu de print "\007Perl?
Stefan

1
@Stefan - Le bip est à peu près «universel». Vous pouvez toutefois rester agnostique en utilisant "echo -e" \ a "'ou" echo -e "\ 07"'. À votre santé!
wormintrude

2
Ce serait plus portable à utiliser printf '\007'au lieu de echo.
Dennis Williamson


2

Essayer

echo -n Ctrl+ V Ctrl+G

L'inconvénient est que cela ne fonctionnera que lorsque le périphérique de sortie est un terminal. Par conséquent, il est possible que cela ne fonctionne pas dans une tâche cron, par exemple. (Mais si vous êtes root, vous pourrez peut-être effectuer une redirection vers /dev/consoleun bip immédiat.)


1

Sous Linux, des outils tels que, par exemple, beeppeuvent utiliser un ioctl sur le périphérique de la console pour émettre un son donné. Pour être plus précis, beeputilisera l' KIOCSOUNDioctl, mais il y a aussi un KDMKTONEioctl qui peut être utilisé pour générer du son.

Si je comprends bien, le premier émet un son qui dure jusqu’à ce qu’il soit explicitement annulé, tandis que le second crée un bip d’une durée prédéterminée. Voir la console_ioctlpage de manuel (4) pour plus de détails.

Donc, si vous n'êtes pas satisfait de ce qui se beeppasse, vous pouvez écrire quelques lignes de code pour accéder directement à ces ioctls. En supposant que vous ayez un accès complet à /dev/console, ce qui pourrait nécessiter des privilèges root.


-1

Dans un terminal, appuyez sur Ctrl+ Gpuis surEnter


1
Dans mon terminal (gnome-terminal), cela fonctionne sans Enter. Tout comme un test de haut-parleur PC, cela me semble bien. C'est totalement inutile dans les scripts, cependant.
Palec

Downvotes surprenants. Cela fonctionne sur certains PC, mais il est possible que cela ne fonctionne pas sur tous.
Zzzach ...

Cela ne fonctionne pas sur rxvt, urxvt, xterm, lxterm ou lxterminal, mon terminal ne devrait-il pas au moins clignoter s'il a une sonnerie visuelle?
Willem

Cela fonctionne sur xterm
Chris
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.