it-swarm-es.tech

¿Cómo hago que el altavoz de mi PC emita un pitido?

Usando bash, ¿cómo puedo hacer que el altavoz de la PC emita un pitido?

Algo como echo 'beepsound' > /dev/pcspkr sería bueno.

185
Stefan

Usualmente uso la pequeña utilidad beep instalada en muchos sistemas. Este comando intentará diferentes enfoques para crear un sonido de sistema.

Hay 3 formas de crear un sonido desde la página de manual beep:

  1. El método tradicional de producir un pitido en un script de Shell es escribir un ASCII BEL (\007) carácter a salida estándar, mediante un comando de Shell como

    echo -ne '\007'
    

    Esto solo funciona si la salida estándar del Shell que realiza la llamada se dirige actualmente a un dispositivo terminal de algún tipo; de lo contrario, el pitido no producirá ningún sonido e incluso podría causar daños no deseados en cualquier archivo al que se dirija la salida.

  2. Hay otras formas de provocar un pitido. Un método un poco más confiable es abrir /dev/tty y envía tu personaje BEL allí. Esto es robusto contra la redirección de E/S, pero aún falla en el caso en que el script de Shell que desea generar un pitido no tiene un terminal de control, por ejemplo, porque se ejecuta desde un administrador de ventanas X.

  3. Un tercer enfoque es conectarse a su pantalla X y enviarle un comando de campana. Esto no depende de un dispositivo terminal Unix, pero sí (por supuesto) requiere una pantalla X.

beep simplemente probará estos 3 métodos.

133
echox

Simplemente haciendo eco de \a o \07 funciona para mi.

$ echo -e "\a"

Esto probablemente requerirá que se cargue el módulo del kernel pcspkr. Solo he probado esto en RHEL, así que YMMV.

ACTUALIZAR

Como Warren señaló en los comentarios, esto puede no funcionar cuando se inicia sesión remotamente a través de SSH. Una solución rápida sería redirigir la salida a cualquiera de los dispositivos TTY (idealmente uno que no se use). P.ej.:

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

NOTA: Esta solución emite pitidos desde los altavoces , no desde la placa base .

ALSA viene con prueba de altavoz , un generador de tonos de prueba de altavoz de línea de comandos, que se puede utilizar para generar un pitido:

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

Ver este hilo del foro de Arch Linux .

Sin embargo, la duración del pitido será arbitraria, pero se puede controlar de la siguiente manera:

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

Podemos ir un paso más allá y emitir un pitido con esta función:

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

que se llama con argumentos de frecuencia y duración:

$ _alarm 400 200

Con esto en mente, es posible crear música simple con speaker-test. Ver este script de Shell .

76
Ryne Everett
tput bel

porque terminfo define bel como

           Variable                       Cap-               TCap                  Description
            String                        name               Code

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

Para usar la tarjeta de sonido si sox está instalado y el altavoz de la PC si no:

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

sox está disponible para la mayoría de las distribuciones.

19
Alexander

Algunas distribuciones tienen utilidades de línea de comandos para lograr esto. Tal vez podrías decirnos en qué distribución estás o buscar (por ejemplo, emerge -s beep en gentoo).

Yendo más allá de las utilidades "disponibles", también puede hacer un script de Perl que emita un pitido, todo lo que necesita hacer es incluir:

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

Si terminas recibiendo un "pitido", prueba lo siguiente:

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

" Beep solo funciona si su PC tiene un" altavoz ". Muchas computadoras portátiles modernas/dispositivos pequeños no tienen uno". - tredegar .

Intenta reproducir un sonido en su lugar:

$ play xxxxx.wav

Funcionó para mí, cuando todo lo demás falló.

Referencias

4
Elliptical view

Tratar

echo -n Ctrl+VCtrl+G

La desventaja es que esto solo funcionará cuando el dispositivo de salida sea un terminal, por lo que puede no funcionar dentro de un trabajo cron, por ejemplo. (Pero si es root, puede redirigir a /dev/console para pitidos inmediatos)

2
codehead

En Linux, herramientas como beep pueden usar un ioctl en el dispositivo de la consola para emitir un sonido dado. Para ser más específico, beep usará el KIOCSOUND ioctl, pero también hay un KDMKTONE ioctl que puede usarse para generar sonido.

Según tengo entendido, el primero emite un sonido que dura hasta que se cancela explícitamente, mientras que el segundo crea un pitido de duración predeterminada. Ver el console_ioctl (4) página de manual para más detalles.

Entonces, si no está satisfecho con lo que hace beep, podría escribir algunas líneas de código para acceder a estos ioctls directamente. Suponiendo que tiene acceso completo a /dev/console, que bien podría requerir privilegios de root.

2
MvG

En una terminal, presione Ctrl+G y entonces Enter

0
Hitesh Chechani