web-dev-qa-db-fra.com

Comment faire bip de mon haut-parleur pc

En utilisant bash, comment puis-je faire bip du haut-parleur du PC?

Quelque chose comme echo 'beepsound' > /dev/pcspkr serait bien.

185
Stefan

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

Il existe 3 façons de créer un son à partir de la page de manuel beep:

  1. La méthode traditionnelle de production d'un bip dans un script Shell consiste à écrire un ASCII BEL (\007) vers 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 périphérique terminal quelconque; Sinon, le bip ne produira aucun son et pourrait même provoquer une corruption indésirable dans le fichier vers lequel la sortie est dirigée.

  2. Il existe d'autres façons de provoquer un bip sonore. Une méthode légèrement plus fiable consiste à ouvrir /dev/tty et envoyez votre personnage BEL là-bas. Ceci est robuste contre la redirection d'E/S, mais échoue toujours 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 à se connecter à votre écran X et à lui envoyer une commande de sonnerie. Cela ne dépend pas d'un périphérique terminal Unix, mais nécessite (bien sûr) un affichage X.

beep essaiera simplement ces 3 méthodes.

133
echox

Tout simplement en écho \a ou \07 travaille pour moi.

$ echo -e "\a"

Cela nécessitera probablement le chargement du module du noyau pcspkr. 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 lors d'une connexion à distance via SSH. Une solution rapide serait de rediriger la sortie vers l'un des appareils TTY (idéalement, celui qui n'est pas utilisé). Par exemple.:

$ echo -en "\a" > /dev/tty5
78
Shawn Chin

REMARQUE: Cette solution émet des bips des haut-parleurs , pas de la carte mère .

ALSA est livré avec 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 de discussion Arch 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 est appelé avec des arguments de fréquence et de durée:

$ _alarm 400 200

Dans cette optique, il est possible de créer de la musique simple avec speaker-test. Voir ce script Shell .

76
Ryne Everett
tput bel

car terminfo définit bel comme

           Variable                       Cap-               TCap                  Description
            String                        name               Code

   bell                                   bel                bl                audible signal
                                                                               (bell) (P)
32
Winston Smith

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

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

sox est disponible pour la plupart des distributions.

19
Alexander

Certaines distributions ont des utilitaires en ligne de commande pour y parvenir. Vous pourriez peut-être nous dire sur quelle distribution vous vous trouvez ou effectuer une recherche (par exemple emerge -s beep in gentoo).

Au-delà des utilitaires "disponibles", vous pouvez également créer un script Perl qui émet le bip, tout ce que vous devez faire est d'inclure:

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

Si vous finissez par recevoir 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
13
wormintrude

" Le bip ne fonctionne que si votre PC est équipé d'un" haut-parleur ". De nombreux ordinateurs portables/petits appareils modernes n'en ont pas." - tredegar .

Essayez plutôt de jouer un son:

$ play xxxxx.wav

A fonctionné pour moi, quand tout le reste a échoué.

Références

4
Elliptical view

Essayer

echo -n Ctrl+VCtrl+G

L'inconvénient est que cela ne fonctionnera que lorsque le périphérique de sortie est un terminal, il peut donc ne pas fonctionner dans une tâche cron, par exemple. (Mais si vous êtes root, vous pourrez peut-être rediriger vers /dev/console pour un bip immédiat.)

2
codehead

Sous Linux, des outils comme beep peuvent utiliser un ioctl sur la console pour émettre un son donné. Pour être plus précis, beep utilisera l'ioctl KIOCSOUND, mais il existe également un KDMKTONE ioctl qui peut être utilisé pour générer du son.

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

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

2
MvG

Dans un terminal, appuyez sur Ctrl+G et alors Enter

0
Hitesh Chechani