En utilisant bash, comment puis-je faire bip du haut-parleur du PC?
Quelque chose comme echo 'beepsound' > /dev/pcspkr
serait bien.
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
:
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.
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.
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.
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.
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
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 .
tput bel
car terminfo définit bel
comme
Variable Cap- TCap Description
String name Code
bell bel bl audible signal
(bell) (P)
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.
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
" 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é.
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.)
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.
Dans un terminal, appuyez sur Ctrl+G et alors Enter