Usando o bash, como posso emitir um sinal sonoro no alto-falante do pc?
Algo como echo 'beepsound' > /dev/pcspkr
seria bom.
command-line
Stefan
fonte
fonte
Respostas:
Eu costumo usar 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
beep
manual:O método tradicional de produzir um sinal sonoro em um script shell é escrever um caractere
ASCII BEL
(\007
) na saída padrão, por meio de um comando shell, comoIsso funciona apenas se a saída padrão do shell de chamada estiver 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.
Existem outras maneiras de causar um sinal sonoro. Um método um pouco mais confiável é abrir
/dev/tty
e enviar 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.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á esses 3 métodos.fonte
beep
comando é: johnath.com/beep No Ubuntu / Debian, você pode instalá-loapt-get install beep
.pcspkr
módulo, carregue osnd-pcsp
, e agora você tem uma placa de som alsa que usa truques da velha escola para realmente alimentar o som digital ao seu alto-falante interno. Dá resultados ruins com alto-falantes internos piezoelétricos, mas em alto-falantes internos clássicos, a qualidade é boa para o que é. Dessa forma, você pode ser muito mais criativo com os seus bipes;);pcspkr
esnd-pcsp
são módulos, não pacotes. usemodprobe
/modprobe -r
/lsmod
para manipulá-los. Para sua informação, eles estão nolinux-image-something
pacote, que já está instalado (espero que você não tenha o kernel do linux).modprobe snd-pcsp
beep está funcionando!Simplesmente ecoando
\a
ou\07
funciona para mim.Isso provavelmente exigirá que o
pcspkr
módulo do kernel 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:
fonte
sudo modprobe pcspkr
foi suficiente para ativar os bipes sob o VT, viaprintf "\a"
oubeep
utilitário.Ubuntu 16.04.1 LTS
NOTA: Esta solução emite bipes dos alto - falantes , não da placa - mãe .
O ALSA vem com o teste de alto-falante , um gerador de tom de teste de alto-falante da linha de comando, que pode ser usado para gerar um sinal sonoro:
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:
Podemos dar um passo adiante e emitir um sinal sonoro com esta função:
chamado com argumentos de frequência e duração:
Com isso em mente, é possível criar músicas simples
speaker-test
. Veja este script de shell .fonte
timeout ${2} speaker-test --frequency ${1} --test sine
speaker-test -t sine -f 1000 -l 1 & sleep .2 && kill -9 $!
faz a mesma coisa. De qualquer forma, o método do @ user569825 é melhor.porque terminfo define
bel
comofonte
Para usar a placa de som, se
sox
estiver instalada, e o alto-falante do PC, se não:sox
está disponível para a maioria das distros.fonte
then
bloco dentrowatch
para me notificar quando uma determinada condição fosse atendida. Até me permite manter meus fones de ouvido. Isso foi muito útil para mim.sudo -u USER play...
play
usa o pulseaudio como usuário. Eu acho que depende da configuração do sistema.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:
Se você acabar recebendo 'bip', tente o seguinte:
fonte
echo -e "\007"
funcionaria no bash em vez deprint "\007
no perl?printf '\007'
vez deecho
."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:
Trabalhou para mim, quando tudo mais falhou.
Referências
fonte
Experimentar
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
/dev/console
para um sinal sonoro imediato.)fonte
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á oKIOCSOUND
ioctl, mas também há umKDMKTONE
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. Consulte a
console_ioctl
página do manual (4) 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/dev/console
, o que pode exigir privilégios de root.fonte
Em um terminal, pressione Ctrl+ Ge, em seguida,Enter
fonte