it-swarm.it

Come faccio a emettere un segnale acustico per l'altoparlante del mio PC

Utilizzando bash, come posso emettere un segnale acustico per l'altoparlante del PC?

Qualcosa di simile a echo 'beepsound' > /dev/pcspkr sarebbe bello.

185
Stefan

Di solito uso la piccola utility beep installata su molti sistemi. Questo comando proverà approcci diversi per creare un suono di sistema.

Esistono 3 modi per creare un suono dalla manpage beep:

  1. Il metodo tradizionale per produrre un segnale acustico in uno script Shell è scrivere un ASCII BEL (\007) carattere allo standard output, mediante un comando Shell come

    echo -ne '\007'
    

    Funziona solo se l'output standard della Shell chiamante è attualmente diretto a un dispositivo terminale di qualche tipo; in caso contrario, il segnale acustico non produrrà alcun suono e potrebbe persino causare la corruzione indesiderata in qualsiasi file a cui è diretto l'output.

  2. Esistono altri modi per causare un segnale acustico. Un metodo leggermente più affidabile è aprire /dev/tty e invia lì il tuo personaggio BEL. Ciò è efficace contro il reindirizzamento I/O, ma non riesce comunque nel caso in cui lo script Shell che desidera generare un segnale acustico non abbia un terminale di controllo, ad esempio perché viene eseguito da un X Window Manager.

  3. Un terzo approccio è quello di connettersi al display X e inviargli un comando a campana. Ciò non dipende da un dispositivo terminale Unix, ma (ovviamente) richiede un display X.

beep proverà semplicemente questi 3 metodi.

133
echox

Facendo semplicemente eco \a o \07 per me va bene.

$ echo -e "\a"

Ciò richiederà probabilmente il caricamento del modulo kernel pcspkr. L'ho provato solo su RHEL, quindi YMMV.

AGGIORNARE

Come sottolineato da Warren nei commenti, questo potrebbe non funzionare quando si effettua l'accesso in remoto tramite SSH. Una soluzione alternativa sarebbe reindirizzare l'output su uno qualsiasi dei dispositivi TTY (idealmente uno che non viene utilizzato). Per esempio.:

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

NOTA: questa soluzione emette segnali acustici dai altoparlanti, non dai scheda madre.

ALSA viene fornito con speaker-test , un generatore di toni di prova degli altoparlanti della riga di comando, che può essere utilizzato per generare un segnale acustico:

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

Vedi questo thread del forum Arch Linux .

Tuttavia, la durata del segnale acustico sarà arbitraria, ma può essere controllata come segue:

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

Possiamo fare un ulteriore passo avanti ed emettere un segnale acustico con questa funzione:

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

che viene chiamato con argomenti di frequenza e durata:

$ _alarm 400 200

Con questo in mente, è possibile creare musica semplice con speaker-test. Vedi questo script Shell .

76
Ryne Everett
tput bel

perché terminfo definisce bel come

           Variable                       Cap-               TCap                  Description
            String                        name               Code

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

Per utilizzare la scheda audio se sox è installato e l'altoparlante del PC in caso contrario:

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

sox è disponibile per la maggior parte delle distro.

19
Alexander

Alcune distro hanno utilità da riga di comando per raggiungere questo obiettivo. Forse potresti dirci in quale distro ti trovi o cercare (ad es. emerge -s beep in gentoo).

Andando oltre le utility "disponibili", potresti anche creare uno script Perl che emette un segnale acustico, tutto ciò che devi fare è includere:

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

Se si ottiene "bip", provare quanto segue:

#! /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

" Il segnale acustico funziona solo se il tuo PC ha un" altoparlante ". Molti laptop moderni/piccoli dispositivi non ne hanno uno." - tredegar .

Prova invece a riprodurre un suono:

$ play xxxxx.wav

Ha funzionato per me, quando tutto il resto ha fallito.

Riferimenti

4
Elliptical view

Provare

echo -n Ctrl+VCtrl+G

Il rovescio della medaglia è che questo funzionerà solo quando il dispositivo di output è un terminale, quindi potrebbe non funzionare all'interno di un processo cron, ad esempio. (Ma se sei root potresti essere in grado di reindirizzare a /dev/console per segnale acustico immediato.)

2
codehead

Su Linux, strumenti come beep possono utilizzare uno ioctl sul dispositivo console per emettere un determinato suono. Per essere più specifici, beep utilizzerà KIOCSOUND ioctl, ma esiste anche un KDMKTONE ioctl che può essere utilizzato per generare suono.

A quanto ho capito, il primo avvia un suono che dura fino a quando non viene esplicitamente annullato, mentre il secondo crea un segnale acustico di durata predeterminata. Vedi il console_ioctl (4) pagina man per i dettagli.

Quindi, se non sei soddisfatto di ciò che fa beep, potresti scrivere alcune righe di codice per accedere direttamente a questi ioctls. Supponendo che tu abbia pieno accesso a /dev/console, che potrebbe richiedere privilegi di root.

2
MvG

In un terminale, premere Ctrl+G e poi Enter

0
Hitesh Chechani