Ao escutar músicas, gravações e som dos vídeos, é comum propagar o som através de alto-falantes ou fones de ouvido. Eles basicamente convertem um sinal elétrico em ondas sonoras através da vibração de uma membrana.
Ao longo do desenvolvimento da informática, quando ainda não estava nas funções de um computador tocar música, o único som que saía dessas máquinas era através de um alto-falante dentro do gabinete, ligado diretamente à placa mãe. Implementado inicial em 1981 nos PCs da IBM, ainda era do tipo mecânico (os mais recentes são piezoelétricos).
Chamado de “PC speaker”, sua função principal é a de dar um retorno ao usuário quanto ao funcionamento correto ou não de dispositivos de hardware ou software. Muito comum de ser usado durante o início de funcionamento de um PC, existem até tabelas de beeps emitidos e erros conforme cada fabricante de placa mãe.
No início do desenvolvimento de jogos eletrônicos para computadores, muitas empresas usavam esse alto-falante para emitir efeitos sonoros ou mesmo simular sons polifônicos. A LucasArts fez uso da técnica nos anos 1990 em vários de seus games. Esse uso do alto-falante do PC para saída de áudio complexo tornou-se menos comum com a introdução da Sound Blaster e outras placas de som, assim como os arquivos do tipo MIDI, WAV e MP3.
Beep Music
Pode-se incluir a emissão de um beep dentro de um programa, para alertá-lo de algum erro, por exemplo. Mas também é possível emitir um beep em diferentes frequências, assim como controlar sua duração. Combinando-se vários sons e ritmos, seguindo uma organização ao longo do tempo, obtém-se música!
Para fazer o seu computador tocar essa música de beeps, primeiramente ele deve possuir o alto-falante. Você pode abrir o gabinete e procurar na placa mãe algo com essa aparência:
Verifique se o módulo “pcspkr” está rodando (o comando “lsmod | grep pcspkr” deve retornar alguma coisa), se ele não está no arquivo “/etc/modprobe.d/blacklist.conf” (se estiver, comentar a linha que contém “pcspkr”) ou se teve algum erro em seu carregamento (“sudo grep pcspkr /var/log/dmesg”).
No Linux, pode-se instalar o programa que controla os beeps através do comando “apt-get install beep”. Os parâmetros basicamente são esses:
- -f N, onde N entre 0 e 20000 é a frequência, em Hz (se não informado, o padrão é 750 Hz)
- -l N, onde N é a duração do beep, em milissegundos
Mais detalhes estão no manual do comando beep. O comando também possui parâmetros para especificar um atraso (delay), mas nos exemplos a seguir será utilizado o comando “wait” seguido do número de segundos.
Nota musical é um termo empregado para designar o elemento mínimo de um som, formado por um único modo de vibração do ar, geralmente dada em Hertz (Hz). A correspondência entre o nome da nota musical (com a respectiva letra definida pelo sistema de notação alfabética) e a frequência segue na tabela abaixo:
Nota | Cifra | Freq. |
---|---|---|
Dó | C | 261 |
Ré | D | 293 |
Mi | E | 330 |
Fá | F | 349 |
Sol | G | 392 |
Lá | A | 440 |
Si | B | 493 |
As frequências dessas notas foram obtidas a partir da Tabela de Frequências, Períodos e Comprimentos de Onda da ECA/USP, que serve de referência para incrementar a lista com sustenidos, bemóis e outras oitavas (acima ou abaixo).
É possível executar uma música inteira com apenas um comando, mas isso funciona bem para trechos curtos. Para facilitar a introdução das frequências, tempos de duração das notas e pausas, esses valores escritos em um arquivo a parte. Esse arquivo tem o nome informado como parâmetro de entrada no script principal, que vem a seguir:
#!/bin/bash # Script que toca musicas usando o beep conforme a frequência arquivo=$1 echo "Tocando" $arquivo # Ler arquivo e guardar informações em vetores notas=( $(cut -d ',' -f1 $arquivo ) ) duracao=( $(cut -d ',' -f2 $arquivo ) ) pausas=( $(cut -d ',' -f3 $arquivo ) ) # Frequências das notas musicais c3=261 c_sus3=277 d3=293 d_sus3=311 e3=329 f3=349 f_sus3=369 g3=392 g_sus3=415 a3=440 a_sus3=466 b3=494 c4=523 c_sus4=554 d4=587 # Tempos #um=1000 #meio=$(expr $um / 2) #quarto=$(expr $um / 4) # Verifica se está usando frequência ou nota musical char1=$(head -1 $arquivo | awk '{print$1}' | cut -c1) # Loop para tocar todas as frequências do vetor notas, com respectivas duração e pausa i=0 if [ `echo $char1 | grep [a-zA-Z]` ]; then #Cifra for nota in "${notas[@]}"; do echo $nota beep -f ${!nota} -l ${duracao[$i]} sleep ${pausas[$i]} i=$((i+1)) done elif [ $char1 -le 9 ]; then #Frequência for nota in "${notas[@]}"; do echo $nota beep -f $nota -l ${duracao[$i]} sleep ${pausas[$i]} i=$((i+1)) done fi
O arquivo com a música deve seguir uma “partitura” de três linhas: a primeira contém as cifras (conforme valores informados no script), a segunda tem a duração de cada nota (em milissegundos) e a terceira são as pausas após cada nota (em segundos; se não tiver pausa, usar zero). Por exemplo, um trecho de “Seven Nation Army – White Stripes” foi codificada conforme segue (contribuição de Ricardo Vilela):
b3,500,0.25 b3,250,0 d4,250,0 b3,250,0 a3,500,0 g3,1000,0 f_sus3,500,0.5 b3,500,0.25 b3,250,0 d4,250,0 b3,350,0 a3,500,0 g3,1000,0 f_sus3,500,0.5
Copie o script principal, salve como “musica.sh” e permita sua execução (comando “chmod +x musica.sh”). Copie também as linhas com a “partitura” e salve no arquivo “seven_nation_army-white_stripes.csv” na mesma pasta. Finalmente, execute como:
./musica.sh seven_nation_army-white_stripes.csv
O resultado foi gravado usando um celular e segue abaixo:
Note que o script também funciona se a primeira coluna já tiver os valores de frequência (em Hz) em vez da cifra – o primeiro caractere do arquivo é verificado para saber se é uma letra (cifra) ou número (frequência). Nessa outra música, o arquivo de entrada ficaria assim:
392,350,0.1 392,350,0.1 392,350,0.1 311.1,250,0.1 466.2,25,0.1 392,350,0.1 311.1,250,0.1 466.2,25,0.1 392,700,0.1 587.32,350,0.1 587.32,350,0.1 587.32,350,0.1 622.26,250,0.1 466.2,25,0.1 369.99,350,0.1 311.1,250,0.1 466.2,25,0.1 392,700,0.1 784,350,0.1 392,250,0.1 392,25,0.1 784,350,0.1 739.98,250,0.1 698.46,25,0.1 659.26,25,0.1 622.26,25,0.1 659.26,50,0.4 415.3,25,0.2 554.36,350,0.1 523.25,250,0.1 493.88,25,0.1 466.16,25,0.1 440,25,0.1 466.16,50,0.4 311.13,25,0.4 369.99,350,0.1 311.13,250,0.1 392,25,0.1 466.16,350,0.1 392,250,0.1 466.16,25,0.1 587.32,700,0.1 784,350,0.1 392,250,0.1 392,25,0.1 784,350,0.1 739.98,250,0.1 698.46,25,0.1 659.26,25,0.1 622.26,25,0.1 659.26,50,0.4 415.3,25,0.2 554.36,350,0.1 523.25,250,0.1 493.88,25,0.1 466.16,25,0.1 440,25,0.1 466.16,50,0.4 311.13,25,0.2 392,350,0.1 311.13,250,0.1 466.16,25,0.1 392.00,300,0.15 311.13,250,0.1
Segue o exemplo acima, da música “Imperial March” de Star Wars:
Segue também o link de outra música pronta, do Super Mário Bros., para você treinar:
480,200,0 1568,200,0 1568,200,0 1568,200,0 739.99,200,0 783.99,200,0 783.99,200,0 783.99,200,0 369.99,200,0 392,200,0 369.99,200,0 392,200,0 392,400,0 196,400,0 739.99,200,0 783.99,200,0 783.99,200,0 739.99,200,0 783.99,200,0 783.99,200,0 739.99,200,0 83.99,200,0 880,200,0 830.61,200,0 880,200,0 987.77,400,0 880,200,0 783.99,200,0 698.46,200,0 739.99,200,0 783.99,200,0 783.99,200,0 739.99,200,0 783.99,200,0 783.99,200,0 739.99,200,0 783.99,200,0 880,200,0 830.61,200,0 880,200,0 987.77,400,0.2 1108,10,0 1174.7,200,0 1480,10,0 1568,200,0.2 739.99,200,0 783.99,200,0 783.99,200,0 739.99,200,0 783.99,200,0 783.99,200,0 739.99,200,0 783.99,200,0 880,200,0 830.61,200,0 880,200,0 987.77,400,0 880,200,0 783.99,200,0 698.46,200,0 659.25,200,0 698.46,200,0 784,200,0 880,400,0 784,200,0 698.46,200,0 659.25,200,0 587.33,200,0 659.25,200,0 698.46,200,0 784,400,0 698.46,200,0 659.25,200,0 587.33,200,0 523.25,200,0 587.33,200,0 659.25,200,0 698.46,400,0 659.25,200,0 587.33,200,0 493.88,200,0 523.25,200,0.4 349.23,400,0 392,200,0 329.63,200,0 523.25,200,0 493.88,200,0 466.16,200,0 440,200,0 493.88,200,0 523.25,200,0 880,200,0 493.88,200,0 880,200,0 1760,200,0 440,200,0 392,200,0 440,200,0 493.88,200,0 783.99,200,0 440, 200,0 783.99,200,0 1568,200,0 392,200,0 349.23,200,0 392,200,0 440,200,0 698.46,200,0 415.2,200,0 698.46,200,0 1396.92,200,0 349.23,200,0 329.63,200,0 311.13,200,0 329.63,200,0 659.25,200,0 698.46,400,0 783.99,400,0 440,200,0 493.88,200,0 523.25,200,0 880,200,0 493.88,200,0 880,200,0 1760,200,0 440,200,0 392,200,0 440,200,0 493.88,200,0 783.99,200,0 440,200,0 783.99,200,0 1568,200,0 392,200,0 349.23,200,0 392,200,0 440,00,0 698.46,200,0 659.25,200,0 698.46,200,0 739.99,200,0 783.99,200,0 392,200,0 392,200,0 392,200,0 392,200,0 196,200,0 196,200,0 196,200,0 185,200,0 196,200,0 185,200,0 196,200,0 207.65,200,0 220,200,0 233.08,200,0 246.94,0.4
Compôs alguma música nesse formato? Compartilhe através do espaço de comentários! =)
Obs: caso queira desativar esse “maravilhoso” sinal sonoro de seu computador, edite o arquivo “/etc/inputrc” para descomentar a linha “set bell-style none” e comentar as outras que contenham “bell”. Também use o comando “modprobe -r pcspkr” e depois crie/edite o arquivo “/etc/modprobe.d/blacklist” para incluir a seguinte linha: blacklist pcspkr. Talvez precise usar “snd_pcsp” em vez de “pcspkr”.
Atualização: existe um projeto para python, o Musical Beeps, disponível no GitHub que adota a mesma ideia, e não precisa do alto-falante interno. Usando arquivos com a nota musical e o tempo de execução, é possível emitir os beeps pela caixa de som normal. Para explorar a combinação usando diferentes instrumentos, fica aqui a ideia para usar esses arquivos como entrada para plataformas como o Online Sequencer.
Fontes (e mais músicas)
Muito loucoooooooo!!!
Cara, vc fez todos esses passos pra executar essas musicas? Que trampo!
Eu acertei o script para facilitar o trabalho de composição. Assim só precisa se preocupar com as notas, durações e intervalos, sem pensar em programação – e também acho que ficou mais elegante.
Aproveite seus dotes musicais e faça uma composição em “beep music” rsrs
E parabéns pelo aniversário! []’s
Como faço isso no Prompt de comando no Windows XP?
Dá uma olhada nesse link, tem umas opções interessantes para testar: https://stackoverflow.com/questions/27079534/how-to-start-a-system-beep-from-the-built-in-pc-speaker-using-a-batch-file
Se quiser fazer algo mais elaborado, o prompt de comando do Windows é meio limitado. Nesse caso, talvez o mais interessante fosse usar uma linguagem de programação como o python, que tem a biblioteca winsound que trabalha com isso – veja mais nesse link: https://stackoverflow.com/questions/6537481/python-making-a-beep-noise
Tem como vc fazer com alguma música?
Aha – Take on me ou Despacito por exemplo?
Oi Júlio,
Tem como fazer com outras músicas além dos exemplo. Precisa pegar a cifra da música para o script converter cada nota musical em frequência, além do tempo de execução de cada uma. Só precisa lembrar que a música na cifra é para algum instrumento, e como essas música tem alguém cantando, pode não ficar reconhecível para quem escute só os beeps (já que só vai ouvir a batida).