web-development-kb-pt.site

Como faço para emitir um sinal sonoro no alto-falante do meu PC

Usando o bash, como posso emitir um sinal sonoro no alto-falante do pc?

Algo como echo 'beepsound' > /dev/pcspkr seria bom.

185
Stefan

Eu normalmente uso o pequeno utilitário beep instalado em muitos sistemas. Este comando tentará abordagens diferentes para criar um som do sistema.

Existem três maneiras de criar um som a partir da página de manual beep:

  1. O método tradicional de produzir um sinal sonoro em um script do Shell é escrever um ASCII BEL (\007) caractere para a saída padrão, por meio de um comando do Shell, como

    echo -ne '\007'
    

    Isso funciona apenas se a saída padrão do Shell que está chamando estiver atualmente direcionada para um dispositivo terminal de algum tipo; caso contrário, o sinal sonoro não produzirá som e poderá causar corrupção indesejada em qualquer arquivo para o qual a saída seja direcionada.

  2. Existem outras maneiras de causar um sinal sonoro. Um método um pouco mais confiável é abrir /dev/tty e envie seu personagem BEL para lá. Isso é robusto contra o redirecionamento de E/S, mas ainda falha no caso em que o script do Shell que deseja gerar um sinal sonoro não possui um terminal de controle, por exemplo, porque é executado a partir de um gerenciador de janelas X.

  3. Uma terceira abordagem é conectar-se ao seu monitor X e enviar um comando de campainha. Isso não depende de um dispositivo de terminal Unix, mas (é claro) requer um display X.

beep simplesmente tentará estes 3 métodos.

133
echox

Simplesmente ecoando \a ou \07 funciona para mim.

$ echo -e "\a"

Isso provavelmente exigirá que o módulo do kernel pcspkr seja carregado. Eu só testei isso no RHEL, então YMMV.

ATUALIZAR

Como Warren apontou nos comentários, isso pode não funcionar quando conectado remotamente via SSH. Uma solução rápida seria redirecionar a saída para qualquer um dos dispositivos TTY (de preferência um que não seja usado). Por exemplo.:

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

NOTA: Esta solução emite bipes dos alto-falantes dos alto-falantes , não da placa-mãe .

O ALSA vem com teste do alto-falante , um gerador de tom de teste do alto-falante da linha de comando, que pode ser usado para gerar um sinal sonoro:

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

Veja este tópico do fórum do Arch Linux .

No entanto, a duração do sinal sonoro será arbitrária, mas pode ser controlada da seguinte maneira:

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

Podemos dar um passo adiante e emitir um sinal sonoro com esta função:

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

chamado com argumentos de frequência e duração:

$ _alarm 400 200

Com isso em mente, é possível criar músicas simples com speaker-test. Veja este script do 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 a placa de som se sox estiver instalado e o alto-falante do PC, se não:

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

sox está disponível para a maioria das distribuições.

19
Alexander

Algumas distribuições possuem utilitários de linha de comando para conseguir isso. Talvez você possa nos dizer em que distro está ou pesquisar (por exemplo, emerge -s beep no gentoo).

Indo além dos utilitários "disponíveis", você também pode criar um script Perl que emite um sinal sonoro; tudo o que você precisa fazer é incluir:

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

Se você acabar recebendo 'bip', tente o seguinte:

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

" O sinal sonoro funciona apenas se o seu PC tiver um" alto-falante ". Muitos laptops/dispositivos pequenos modernos não têm um." - tredegar .

Tente reproduzir um som:

$ play xxxxx.wav

Trabalhou para mim, quando tudo mais falhou.

Referências

4
Elliptical view

Tentar

eco -n Ctrl+VCtrl+G

A desvantagem é que isso funcionará apenas quando o dispositivo de saída for um terminal, portanto, pode não funcionar dentro de um trabalho cron, por exemplo. (Mas se você é root, poderá redirecionar para /dev/console para emitir um sinal sonoro imediato.)

2
codehead

No Linux, ferramentas como beep podem usar um ioctl no dispositivo do console para emitir um determinado som. Para ser mais específico, beep usará o KIOCSOUND ioctl, mas também há um KDMKTONE ioctl que pode ser usado para gerar som.

Pelo que entendi, o primeiro inicia um som que dura até ser explicitamente cancelado, enquanto o último cria um sinal sonoro de duração pré-determinada. Veja o console_ioctl (4) página de manual para obter detalhes.

Portanto, se você não estiver satisfeito com o que beep faz, poderá escrever algumas linhas de código para acessar esses ioctls diretamente. Supondo que você tenha acesso completo a /dev/console, o que pode exigir privilégios de root.

2
MvG

Em um terminal, pressione Ctrl+G e depois Enter

0
Hitesh Chechani