Created
January 11, 2013 12:37
-
-
Save peczenyj/4510356 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Piano Gripe 3.0 - The Shell Music # | |
# OBS: Favor nao confundir com axé music ## | |
# Natal-RN ### | |
# Autor: Pablo Fernandes (fernandes_pablo@yahoo.com.br) ---------- #### | |
# ---------------------------------------------- 28.10.2003 ##### | |
# ###### | |
############################################################################# | |
# | |
# --------------- | |
# Agradecimentos: Grupo de Discussão "Shell Script" (Yahoo) | |
# ESPECIAIS Aurélio Marinho Jargas (http://aurelio.net) | |
# --------------- Seu nome (seu e-mail) | |
# | |
# [Caso de bug, melhorias no código, enxudaga, ajuda ou como seja,] | |
# [resultará em seu nome nos agradecimentos especiais. Ajude a man] | |
# [ter esse software propondo melhorias ou corrigindo erros. ] | |
# | |
########################################################################### | |
# Como usar: ##### | |
# $ ./gripe * simplesmente execute-o #### | |
# * Verifique se você possui a permissão x ### | |
# no arquivo. Caso não tenha digite: ## | |
# "chmod +x gripe" com o dono do arquivo # | |
# | |
# Como usar As teclas A, S, D, F, G, H, J, K, L, Z, X, C, V, B, | |
# 1, 2, 3, 4, 5, 6, 7, 8, 9 e 0 são usadas para representar | |
# as teclas de um teclado. Nele virão marcadas essas teclas. | |
# | |
# OBS2: A opção "P" (do quadro de opções), adiciona um espaço sem | |
# música para ajudar em suas composições. | |
# | |
# Opções: W - Toda tecla pressionada é gravada na linha de sequência. | |
# Essa opção toca as notas definidas na "sequência". | |
# | |
# E - Apaga a sequência criada anteriormente, impossibilitando | |
# de tocar músicas até que pelo menos uma nota seja especi | |
# ficada novamente no espaço de sequência. | |
# | |
# T - Salva sequência no diretório $HOME/gripe/ com extensão .shm | |
# (ShellMusic) | |
# | |
# Q - Sai do programa e apaga o espaço sequência. | |
# | |
# P - Pausa na sequência. | |
# | |
# + - Aumenta o tempo entre notas | |
# - - Diminue o tempo entre as notas | |
# | |
# R - Exemplos de músicas (Beatles - Day Tripper | |
# e Black Sabbath - Iron Man) | |
# | |
########################################################################### | |
# | |
# ATENÇÃO1: O PIANO GRIPE 3.0 FOI TESTADO APENAS NO CONECTIVA "8++" E "9" | |
# E FEDORA CORE 1 e 2. | |
# SE VOCÊ OBTEU ÊXITO TOTAL EM OUTRA DISTRIBUIÇÃO, ENVIE UM E-MAIL | |
# AVISANDO A SUA DISTRO. CASO VOCÊ NÃO TENHA CONSEGUIDO EXECUTÁ-LO | |
# AVISE TAMBÉM POR E-MAIL A DISTRO. OBRIGADO | |
# ---------------------------------------------------------------- | |
# | |
# ATENÇÃO2: Execute o programa em MODO TEXTO (não execute-o em um terminal | |
# do modo gráfico). | |
# | |
# AVISO: Na versão 4.0 do Piano Gripe, será adicionado um backspace de | |
# notas musicais para o teclado. | |
# | |
########################################################################### | |
# #### | |
# REGISTRO DE MUDANÇAS E ATUALIZAÇÕES: Changelog ### | |
# ------------------------------------ ## | |
# # | |
# 28.10.2003: Iniciada e concluída a primeira versão (0.10) | |
# 01.11.2003: Corrigido BUG (um ponto desconhecido flutuando | |
# no código (detectado por Aurélio Marinho Jargas) | |
# 01.11.2003: Corrigido BUG (quem usava LANG=en_US não executava | |
# as músicas por causa do comando sleep ,número) | |
# 01.11.2003: Adiciona o comando "T" possibilitando gravar as músicas | |
# 01.11.2003: Corrigido BUG (quem tinha o diretório home com espaços | |
# no nome, dava uma série de erros. Solução: Aspear | |
# duplamente todas as variáveis) | |
# 20.11.2003: Restringe em 91 notas máximas por música. Se no prompt | |
# SEQUÊNCIA aparecessem mais de 100 "+Sol#"s o programa | |
# dava txiutxi nos gráficos, pq só de notas, iria passar | |
# de uma tela. Mas se alguém insistir muito (que acho muito | |
# difícil, procurarei outra solução para o problema. | |
# 30.11.2003: Pequenos tutoriais sobre caracteres de controle espalhados | |
# pelo código. | |
# 13.12.2003: Um bug resolvido. Descrição: Se você salvasse o arquivo | |
# "gripe" no diretório $HOME, ele dava erros na hora de salvar | |
# uma sequência. | |
# 18.02.2004: Depois de muito tempo jogado, sem receber nenhuma atualização, | |
# resolvi baixá-lo do site (que nem tinha mais ele no meu comp.) | |
# surgiu um bug no sleep. Antigamente via que para shells com a | |
# variável de ambiente $LANG estava para en_US, a sintaxe do | |
# sleep era "sleep .10" por exemplo, e pra $LANG=pt_BR a sintaxe | |
# mudava para "sleep ,10". E agora fiz o teste para ambas | |
# configurações e vi que funcionou com "sleep .n" | |
# 03.06.2004: "Bom, fazia tempo que o programa nao tinha nenhuma mudança | |
# pois havia perdido a versao completa e mais atualizada que | |
# eu tinha feito na epoca. As novidades sao:" | |
# 02.06.2004: Mudei de distribuiçao (do Conectiva para a Fedora Core) e | |
# percebi algumas mudanças. Agora retirei os acentos de todo | |
# o programa (aceto os que ficam dentro de arquivos, como este), | |
# pois o fedora tem problemas com acentos para visualizaçao | |
# no console. Ainda nao sei pq, dentro do vi consigo ver os | |
# acentos (apesar de nao conseguir digita-los) mas se fosse | |
# um e-mail ou mesmo no Piano Gripe, eles nao aparecem. Pois | |
# e, a atualizaçao foi retirada de acentos. | |
# 02.06.2004: Tambem tive problemas com a variavel $LANG (novamente) e a | |
# sintaxe do programa sleep. Agora todo o programa roda com | |
# LANG=en_US e na finalizaçao do Piano, ela e recuperada para o | |
# normal do usuario. | |
# 02.06.2004: Mudança nos Leds, agora quando estamos tocando, os leds Num | |
# Lock e Caps Lock ficam acendendo e apagando :) . Quis fazer | |
# com o Scroll Lock tambem, mas no conectiva nao liga nem a pau | |
# usando setleds +scroll. No Fedora ele liga, no slack, debian | |
# tambem deve ligar. Mas para nao causar problemas, deixei so | |
# os dois mesmo. | |
# 02.06.2004: Marcacoes nas notas tocadas. Toda nota tocada fica marcada | |
# de vermelha. | |
# 02.06.2004: Ah, as teclas agora podem ser tocadas em tempo real. Nao | |
# precisa de teclar mais enter para sair o som da nota. | |
# 03.06.2004: Algumas mudanças no codigo, na parte de salvar arquivos. | |
# Criei uma funçao para fazer tudo, diminuindo o codigo. | |
# GNU | |
## #### ## ## ## ## ### #### | |
## ## ### ## ## ## ## ## | |
## ## #### ## ## ## ## ## | |
## ## ## ## ## ## ## ### | |
## ## ## ## ## ## ## ## ## | |
## ## ## #### ## ## ## ## | |
######## #### ## ### ###### ##### #### | |
# | |
# [FAÇA TAMBÉM UM SOFTWARE LIVRE] | |
# ------------------------------------------------------------------------ | |
# Futuros Planos: Organizar código, e deixá-lo auto explicativo | |
# para estudantes (como eu) de shell Script. | |
# | |
# Adicionar exemplos de músicas conhecidas arqu | |
# ivada no prórpio código | |
# | |
# Testar em várias distribuições do linux. | |
# Até agora o Piano Gripe só foi testado no Con | |
# ectiva Linux 8++, 9, Fedora Core 1 e 2. | |
# | |
# Encontrar uma forma do Piano Gripe rodar no m | |
# odo gráfico (terminal do modo gráfico). | |
# | |
# Fazer um backspace de notas para apagar a últ | |
# ima nota tocada. | |
# | |
# Gringorizar passando para inglês todos os comentários | |
# e textos do programa (mas sem deixar a português obviamente) | |
# fazendo duas versões. ptBR and enUS | |
# | |
########################################################################### | |
# | |
# Pq Piano Gripe? | |
# --------------- | |
# | |
# Simplesmente pelo timbre gerado pelo auto-falante do micro. | |
# Parece um timbre rouco e gripado. | |
# | |
# Interesses do Piano Gripe: | |
# -------------------------- | |
# | |
# Estudo, diversão e divulgação :) | |
# Envie um e-mail para fernandes_pablo@yahoo.com.br | |
# se você gostou, ou se seu filho mais novo gostou :D | |
# | |
########################################################################### | |
# Organização do código : | |
# ----------------------- | |
# O código do Piano Gripe encontra-se dividido em sessões. Cada sessão | |
# possui seus comentários e algumas dicas sobre algum assunto predominante | |
# no código fonte da sessão. Entre cada sessão, existe uma barra horizontal | |
# de 76 caracteres e duas quebras de linhas. | |
# | |
########################################################################### | |
# | |
# Os Comentarios do Codigo so serao atualizados nas versoes x.50 | |
# No caso, na versao 3.50. Sempre vou fazer assim, pq exige muito | |
# tempo para comentar todo o codigo, e ainda mais quando e uma versao | |
# nova (que ainda vai ter correçoes). | |
# | |
########################################################################### | |
## COMEÇA O CÓDIGO ### | |
##################### | |
## Sessão: | |
######################### | |
## MODULOS NECESSARIOS ## | |
######################### | |
# Esta sessao tem os comandos necessarios para | |
# levantar os modulos. | |
# Este modulo pensei basicamente para o Fedora Core 2 que por | |
# padrao nao tem mais os beeps :( Aposto que fizeram isso para | |
# boicotar o Piano Gripe do mercado. hehehe | |
modprobe pcspkr 2> /dev/null > /dev/null | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
####################### | |
## MAPA DE VARIÁVEIS ## | |
####################### | |
# Nesta sessão estão definidas todas as variáveis | |
# com seus valores iniciais. | |
SALVALANG=$LANG | |
LANG=en_US | |
CONTASHM=1 #Contagem de notas. Cada nota tocada, adiciona uma unidade | |
#desse valor. Máximo de notas permitidas:90 (CONTSHM=91 já | |
#o valor inicial é 1) | |
SHMLEDDY=1 | |
EXEMPLOSHM=1 | |
SLEEPSHMLANG="sleep .4;" | |
BARRA40SHM="PIANOGRIPEPABLOGRIPEPIANOGRIPEPABLOGRIPE" | |
## NOTAS MUSICAIS E SUAS RESPECTIVAS FREQÜÊNCIAS ## | |
DO='echo -ne \'\033[10\;132]\\a'' | |
RE='echo -ne \'\033[10\;148]\\a'' | |
MI='echo -ne \'\033[10\;165]\\a'' | |
FA='echo -ne \'\033[10\;176]\\a'' | |
SOL='echo -ne \'\033[10\;198]\\a'' | |
LA='echo -ne \'\033[10\;220]\\a'' | |
SI='echo -ne \'\033[10\;247]\\a'' | |
DO1='echo -ne \'\033[10\;264]\\a'' | |
RE1='echo -ne \'\033[10\;296]\\a'' | |
MI1='echo -ne \'\033[10\;330]\\a'' | |
FA1='echo -ne \'\033[10\;352]\\a'' | |
SOL1='echo -ne \'\033[10\;396]\\a'' | |
LA1='echo -ne \'\033[10\;440]\\a'' | |
SI1='echo -ne \'\033[10\;494]\\a'' | |
DOS='echo -ne \'\033[10\;143]\\a'' #DOS? AAAAAAAAAH NÃO...! | |
RES='echo -ne \'\033[10\;157]\\a'' | |
FAS='echo -ne \'\033[10\;187]\\a'' | |
SOLS='echo -ne \'\033[10\;209]\\a'' | |
LAS='echo -ne \'\033[10\;233]\\a'' | |
DOS1='echo -ne \'\033[10\;286]\\a'' | |
RES1='echo -ne \'\033[10\;314]\\a'' | |
FAS1='echo -ne \'\033[10\;374]\\a'' | |
SOLS1='echo -ne \'\033[10\;418]\\a'' | |
LAS1='echo -ne \'\033[10\;466]\\a'' | |
######### CONSEGUINDO TIRAR SONS DO BEEP PELO COMANDO ECHO ################# | |
# | |
# Para conseguir um som do speaker do seu computador, basta utilizar o | |
# caractere barra-letra \a (ALERTA). Se você digitar echo -ne '\a', vai | |
# ver que um beep soará. Basta agora você definir o tom e duração | |
# do beep. Para isso, use: | |
# | |
# echo -ne '\033[10;N1]\a' -> onde N1 é a frequência. Quanto maior o | |
# valor da frequência (Hz), mais agudo a nota | |
# sairá. Quanto menor for o valor, mais grave. | |
# echo -ne '\033[11;N1]\a' -> onde N1 é a duração do som. | |
# __________________________________________ | |
# ---> O normal é \033[10;750] e \033[11;100] <--- | |
# | |
# OBS1: Depois de brincar com o seu beep, não esqueça de voltar para os | |
# valores normais do beep. | |
# | |
# DICA: Defina a duração antes de definir o tom. | |
# ex: echo -ne '\033[11;500]\033[10;1000]\a' | |
# (Defina duração 500, defina tom 1000, toque um beep com \a) | |
# | |
# OBS2: Esse caractere de controle do beep, não toca um beep, ele apenas | |
# define o tom e duração. Quem toca o beep é o "\a", entre outras | |
# formas. | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
################# | |
## FERRAMENTAS ## | |
################# | |
# Ferramentas escritas em funções feitas | |
# para auxiliar o desenvolvimento e limpeza | |
# do código. Elas ficarão aqui! | |
##### APREDENDO A MODIFICAR A POSIÇÃO DO CURSOR ############################ | |
# | |
# 1) Sempre que você ver um "VAIPARA N1 N2", quer dizer que o cursor muda | |
# da linha atual, para a linha N1 e coluna N2. Exemplo: VAIPARA 1 1 -> | |
# Nesse caso o cursos vai para a linha 1 e coluna 1. Todo "echo" (ou o | |
# que seja) abaixo desse VAIPARA será inserido na linha 1, coluna 1. | |
# Aquele aviso inicial do programa, bem centralizado, pq está em uma das | |
# linhas centrais do monitor, e em uma das colunas centrais também. | |
# São 25 linhas e 80 colunas. Faça o teste, digite | |
# echo -e '\033[N1;N2Htexto aqui!' substituindo N1 pela linha e N2 | |
# pela coluna. Existem outros caracteres de controle para indicar a | |
# direção do cursor, mas o H é o que eu mais gosto :) | |
function VAIPARA() { echo -ne "\033[$1;$2H" ;} #1 | |
# Deixa marcada com cores a nota tocada | |
function MARKNOTAUP() { | |
case "$MARKNOTASHM" in | |
DO) VAIPARA 12 4 | |
echo -e '\033[37;41;1mA\033[m' ;; | |
RE) VAIPARA 12 8 | |
echo -e '\033[37;41;1mS\033[m' ;; | |
MI) VAIPARA 12 12 | |
echo -e '\033[37;41;1mD\033[m' ;; | |
FA) VAIPARA 12 16 | |
echo -e '\033[37;41;1mF\033[m' ;; | |
SOL) VAIPARA 12 20 | |
echo -e '\033[37;41;1mG\033[m' ;; | |
LA) VAIPARA 12 24 | |
echo -e '\033[37;41;1mH\033[m' ;; | |
SI) VAIPARA 12 28 | |
echo -e '\033[37;41;1mJ\033[m' ;; | |
DO1) VAIPARA 12 32 | |
echo -e '\033[37;41;1mK\033[m' ;; | |
RE1) VAIPARA 12 36 | |
echo -e '\033[37;41;1mL\033[m' ;; | |
MI1) VAIPARA 12 40 | |
echo -e '\033[37;41;1mZ\033[m' ;; | |
FA1) VAIPARA 12 44 | |
echo -e '\033[37;41;1mX\033[m' ;; | |
SOL1) VAIPARA 12 48 | |
echo -e '\033[37;41;1mC\033[m' ;; | |
LA1) VAIPARA 12 52 | |
echo -e '\033[37;41;1mV\033[m' ;; | |
SI1) VAIPARA 12 56 | |
echo -e '\033[37;41;1mB\033[m' ;; | |
DOS) VAIPARA 7 6 | |
echo -e '\033[37;41;1m1\033[m' ;; | |
RES) VAIPARA 7 10 | |
echo -e '\033[37;41;1m2\033[m' ;; | |
FAS) VAIPARA 7 18 | |
echo -e '\033[37;41;1m3\033[m' ;; | |
SOLS) VAIPARA 7 22 | |
echo -e '\033[37;41;1m4\033[m' ;; | |
LAS) VAIPARA 7 26 | |
echo -e '\033[37;41;1m5\033[m' ;; | |
DO1S) VAIPARA 7 34 | |
echo -e '\033[37;41;1m6\033[m' ;; | |
RE1S) VAIPARA 7 38 | |
echo -e '\033[37;41;1m7\033[m' ;; | |
FA1S) VAIPARA 7 46 | |
echo -e '\033[37;41;1m8\033[m' ;; | |
SOL1S) VAIPARA 7 50 | |
echo -e '\033[37;41;1m9\033[m' ;; | |
LA1S) VAIPARA 7 54 | |
echo -e '\033[37;41;1m0\033[m' ;; | |
esac | |
} | |
# Desmarca a nota tocada | |
function MARKNOTADOWN() { | |
case "$MARKNOTASHM" in | |
DO) VAIPARA 12 4 | |
echo -e '\033[30;47mA\033[m' ;; | |
RE) VAIPARA 12 8 | |
echo -e '\033[30;47mS\033[m' ;; | |
MI) VAIPARA 12 12 | |
echo -e '\033[30;47mD\033[m' ;; | |
FA) VAIPARA 12 16 | |
echo -e '\033[30;47mF\033[m' ;; | |
SOL) VAIPARA 12 20 | |
echo -e '\033[30;47mG\033[m' ;; | |
LA) VAIPARA 12 24 | |
echo -e '\033[30;47mH\033[m' ;; | |
SI) VAIPARA 12 28 | |
echo -e '\033[30;47mJ\033[m' ;; | |
DO1) VAIPARA 12 32 | |
echo -e '\033[30;47mK\033[m' ;; | |
RE1) VAIPARA 12 36 | |
echo -e '\033[30;47mL\033[m' ;; | |
MI1) VAIPARA 12 40 | |
echo -e '\033[30;47mZ\033[m' ;; | |
FA1) VAIPARA 12 44 | |
echo -e '\033[30;47mX\033[m' ;; | |
SOL1) VAIPARA 12 48 | |
echo -e '\033[30;47mC\033[m' ;; | |
LA1) VAIPARA 12 52 | |
echo -e '\033[30;47mV\033[m' ;; | |
SI1) VAIPARA 12 56 | |
echo -e '\033[30;47mB\033[m' ;; | |
DOS) VAIPARA 7 6 | |
echo -e '\033[37;40m1\033[m' ;; | |
RES) VAIPARA 7 10 | |
echo -e '\033[37;40m2\033[m' ;; | |
FAS) VAIPARA 7 18 | |
echo -e '\033[37;40m3\033[m' ;; | |
SOLS) VAIPARA 7 22 | |
echo -e '\033[37;40m4\033[m' ;; | |
LAS) VAIPARA 7 26 | |
echo -e '\033[37;40m5\033[m' ;; | |
DO1S) VAIPARA 7 34 | |
echo -e '\033[37;40m6\033[m' ;; | |
RE1S) VAIPARA 7 38 | |
echo -e '\033[37;40m7\033[m' ;; | |
FA1S) VAIPARA 7 46 | |
echo -e '\033[37;40m8\033[m' ;; | |
SOL1S) VAIPARA 7 50 | |
echo -e '\033[37;40m9\033[m' ;; | |
LA1S) VAIPARA 7 54 | |
echo -e '\033[37;40m0\033[m' ;; | |
esac | |
} | |
# Liga os Leds de acordo com a nota tocada | |
function LEDSETI() { | |
case "$SHMLEDDY" in | |
1) setleds -caps | |
setleds +num | |
LASTL="setleds -caps ; setleds +num" | |
SHMLEDDY=`expr $SHMLEDDY + 1` ;; | |
2) setleds -num | |
setleds +caps | |
LASTL="setleds -num ; setleds +caps" | |
SHMLEDDY=`expr $SHMLEDDY - 1` ;; | |
esac | |
} | |
# Funcao para salvar arquivos .shm | |
function SALVAR_ARQUIVO() { | |
echo "######################################################" > $HOME/musicas-gripe/"$SALVARSHM".shm | |
echo "## Piano Gripe 3.0 - http://cltfc.sites.uol.com.br ##" >> $HOME/musicas-gripe/"$SALVARSHM".shm | |
echo "######################################################" >> $HOME/musicas-gripe/"$SALVARSHM".shm | |
echo "## Envie agora mesmo a sua música e o seu nome para ##" >> $HOME/musicas-gripe/"$SALVARSHM".shm | |
echo "## fernandes_pablo@yahoo.com.br ##" >> $HOME/musicas-gripe/"$SALVARSHM".shm | |
echo "######################################################" >> $HOME/musicas-gripe/"$SALVARSHM".shm | |
echo "##SUA MÚSICA ABAIXO:" >> "$HOME"/musicas-gripe/"$SALVARSHM".shm | |
echo "####################" >> "$HOME"/musicas-gripe/"$SALVARSHM".shm | |
echo "echo -ne '\\033[11;250]'" >> "$HOME"/musicas-gripe/"$SALVARSHM".shm | |
echo "$SEQSHM" >> "$HOME"/musicas-gripe/"$SALVARSHM".shm 2> /dev/null | |
echo "echo -ne '\\033[11;100]\\033[10;750]'" >> "$HOME"/musicas-gripe/"$SALVARSHM".shm | |
chmod +x "$HOME"/musicas-gripe/"$SALVARSHM".shm | |
VAIPARA 17 6 | |
echo -e "\033[31;1mSALVANDO: "$HOME"/musicas-gripe/"$SALVARSHM".shm \033[m" | |
sleep 2 | |
} | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
################### | |
## AVISO INICIAL ## | |
################### | |
# 1) trap "" 2 20 é para proibir que o usuário termine a execução usando | |
# Ctrl+c ou Ctrl+z. Coloquei isso, por causa de comandos como stty -echo. | |
# se o usuário desse um Ctrl+c no meio deste aviso, ele iria voltar para | |
# o prompt sem conseguir ver nada que ele tecla (comando stty -echo), e | |
# esse comando aparece constantemente no código do Piano Gripe. | |
# | |
# 2) Para entender o que faz o comando stty -echo. Lembre no hora do login | |
# (no shell não interativo de login), você digita o nome do usuário (e | |
# consegue ver tudo que está digitando) e depois digita a senha (mas | |
# desta vez, o que você tecla não aparece na tela). O efeito desse comando | |
# é exatamente o mesmo. Coloquei ele, para o usuário não destrua os grá- | |
# ficos do Piano Gripe digitando coisas e aparecendo na tela. O comando | |
# para voltar ao normal é "stty echo". | |
# | |
# 3) Depois de fazer todo o texto do aviso aparecer, espere 4 segundos e | |
# execute o programa "clear" para limpar a tela. Pois, a imagem do | |
# teclado e seus comandos serão os próximos gráficos. | |
trap "" 2 20 #1 | |
clear | |
setleds -num ; setleds -caps | |
stty -echo #2 | |
VAIPARA 10 15 | |
echo -e '\033[46;30m Piano Gripe 3.0 \033[m' | |
VAIPARA 12 15 | |
echo -e '\033[40;31;1m"Nao execute esse programa em um terminal\033[m' | |
VAIPARA 13 15 | |
echo -e '\033[40;31;1mdo modo grafico. Utilize-o no MODO TEXTO."\033[m' | |
VAIPARA 22 33 | |
echo -e '\033[40;33;1mPablo Fernandes\033[m' | |
VAIPARA 23 26 | |
echo -e '\033[40;34;1mfernandes_pablo@yahoo.com.br\033[m' | |
sleep 4 # 3 | |
clear # 3 | |
stty echo | |
echo ; echo | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
####################### | |
## IMAGEM DO TECLADO ## | |
####################### | |
# Vou dar um jeito nas próximas versões de organizar esse código | |
# Ele foi construído a base de espaços com plano de fundo pintado. | |
# Uma idéia que Aurélio (aurelio.net) sugeriu, foi desenhar normalmente | |
# o teclado usando somente caracteres ASCII, usando caracteres do tipo | |
# "#", "@", "%" para representar as cores, e depois mapearia com o sed, | |
# adicionando os caracteres de controle de cores. Se alguém quiser ajudar, | |
# mande um e-mail. | |
##### APRENDENDO A COLORIR TEXTOS ########################################## | |
# | |
# Para colorir um texto usando o comando echo, veja a sintaxe: | |
# echo -e '\033[N1mTexto aqui!\033[m' | |
# | |
# Onde: N1 -> Código da cor ou propriedade. | |
# m -> indica que depois dele começa o texto | |
# \033[m -> no final do comando para que a cor volte ao normal, | |
# caso contrário, a cor será definida para os textos | |
# seguintes. | |
# | |
# Código de cores da letra -> vai de 30 a 37 | |
# Códgio de cores do fundo -> vai de 40 a 47 | |
# Códgio de propriedades -> 5 (pisca-pisca) | |
# 7 (cores invertidas) | |
# 1 (cor brilhante) | |
# 0 (sem cores) | |
# | |
# 1) Para usar um fundo azul com cor da letra vermelho e piscando? | |
# R: echo -e '\033[44;31;5mTexto aqui!\033[m' | |
# | |
# 2) Para usar somente a cor da letra vermelha? | |
# R: echo -ne '\033[31mTexto aqui!\033[m' | |
# | |
# Entendeu? Você vai misturando os números, separando-os com ";". | |
# | |
# DICA1: A propriedade 1 (cor brilhante), deve ser usado junto com a cor | |
# da letra. Em alguns casos, mudam a cor e em outros casos apenas | |
# deixa a cor da letra mais clara. | |
# | |
# DICA2: Teste os códigos das cores e monte uma tabela para consulta :D | |
# ou use o zzcores do funcoeszz (mão na roda para programadores | |
# Shell. Pegue em http://aurelio.net/zz) | |
echo | |
echo -e ' --------------------------------------------------------\' | |
echo -e '||\033[44;39;1m Piano Gripe 3.1 - \033[44;31;5mThe ShellMusic\033[m\033[44;33;1m \033[m||' | |
echo -e '||-------------------------------------------------------||' | |
echo -e '||\033[47;37m \033[m 1 \033[47;37m \033[m 2 \033[47;37m \033[m \033[47;37m \033[m 3 \033[47;37m \033[m 4 \033[47;37m \033[m 5 \033[47;37m \033[m \033[47;37m \033[m 6 \033[47;37m \033[m 7 \033[47;37m \033[m \033[47;37m \033[m 8 \033[47;37m \033[m 9 \033[47;37m \033[m 0 \033[47;37m \033[m||' | |
echo -e '||\033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m||' | |
echo -e '||\033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m||' | |
echo -e '||\033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m||' | |
echo -e '||\033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m \033[47;37m \033[m||' | |
echo -e '||\033[47;30m A \033[m \033[47;30m S \033[m \033[47;30m D \033[m \033[47;30m F \033[m \033[47;30m G \033[m \033[47;30m H \033[m \033[47;30m J \033[m \033[47;30m K \033[m \033[47;30m L \033[m \033[47;30m Z \033[m \033[47;30m X \033[m \033[47;30m C \033[m \033[47;30m V \033[m \033[47;30m B \033[m||' | |
echo -e ' \-------------------------------------------------------||' | |
echo -e '' | |
echo -e ' \033[40;32;1mEscolha Suas Teclas Pelas Etiquetas\033[m' | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
################################## | |
## MENU DE CONTROLES DO USUÁRIO ## | |
################################## | |
# Essas linhas abaixo são apenas os textos que aparecem no lado direito | |
# do teclado. Coloquei dentro de uma função, para que depois ela possa | |
# ser chamada no loop do "controle do teclado". Isso para evitar que mesmo | |
# em qualquer BUG o usuário possa visualizar os controles como a opção | |
# "q", já que Ctrl+c está travado. | |
function _APARENCIAOPCOES { | |
VAIPARA 1 1 | |
echo -e "\\033[31;41m$BARRA40SHM$BARRA40SHM\\033[m" | |
VAIPARA 2 24 | |
echo -e '\033[40;34;1mhttp://cltfc.sites.uol.com.br\033[m' | |
VAIPARA 1 77 | |
echo -e '\033[44;39m[Q]\033[m' | |
VAIPARA 1 21 | |
echo -e '\033[41;36m(P) a b l o (F) e r n a n d e s\033[m' | |
VAIPARA 1 1 | |
echo -e '\033[41;38m-> S\033[44;32mH\033[41;38mM <-\033[m' | |
echo -e '\033[11;250]' #Coloca o tempo da nota mais longo (normal é 100) | |
VAIPARA 4 62 | |
echo -e '\033[46;30;1m W \033[40;31;1m Toca Sequencia\033[m' | |
VAIPARA 5 62 | |
echo -e '\033[46;30;1m E \033[40;31;1m Limpa Sequencia\033[m' | |
VAIPARA 6 62 | |
echo -e '\033[46;30;1m T \033[40;31;1m Salva Sequencia\033[m' | |
VAIPARA 7 62 | |
echo -e '\033[46;30;1m P \033[40;31;1m Pausa na Musica' | |
VAIPARA 9 62 | |
echo -e '\033[40;33;1m TEMPO\033[m' | |
VAIPARA 10 62 | |
echo -e '\033[46;30;1m + \033[40;31;1m Aumentar' | |
VAIPARA 11 62 | |
echo -e '\033[46;30;1m - \033[40;31;1m Diminuir' | |
VAIPARA 13 62 | |
echo -e '\033[46;30;1m R \033[40;31;1m Exemplos (2)' | |
VAIPARA 14 62 | |
echo -e '\033[46;30;1m Q \033[40;31;1m Sair\033[m' | |
} | |
_APARENCIAOPCOES | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
######################### | |
## EXEMPLOS DE MÚSICAS ## | |
######################### | |
# Música 2: Day Tripper dos Beatles (riffzinho do início), | |
# Música 1: Iron Man do Black Sabbath (todo mundo conhece). | |
# Ao pressionar a tecla R (ou r) o "case" chama essa fun | |
# ção. Não usei a variável de espaço pq essa música fica | |
# legal com "sleep ,3", e a variável de espaço poderia | |
# está diferente (já que os comandos + e - alteram seu | |
# conteúdo. Por esse motivo, escrevi o códgio da música | |
# completo e para cada um dos dois tipos de $LANG que o | |
# programa suporta. | |
function _EXEMPLOSSHM { | |
if [ "$EXEMPLOSHM" = "1" ]; then | |
echo -ne '\033[10;247]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;296]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;296]\a';sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;396]\a';sleep .3; | |
echo -ne '\033[10;374]\a';sleep .3; | |
echo -ne '\033[10;396]\a';sleep .3; | |
echo -ne '\033[10;374]\a';sleep .3; | |
echo -ne '\033[10;396]\a';sleep .3; | |
echo -ne '\033[10;374]\a';sleep .3; | |
echo -ne '\033[10;396]\a';sleep .3; | |
echo -ne '\033[10;374]\a';sleep .3; | |
echo -ne '\033[10;296]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3; | |
elif [ "$EXEMPLOSHM" = "2" ]; then | |
echo -ne '\033[10;165]\a';sleep .3;sleep .3; #dois sleeps seguidos,é o mesmo | |
echo -ne '\033[10;198]\a';sleep .3; #que o espaço "P" do Piano Gripe | |
echo -ne '\033[10;209]\a';sleep .3; #pq entre uma nota e outra, tem | |
echo -ne '\033[10;247]\a';sleep .3; #que ter um sleep, senão fica | |
echo -ne '\033[10;330]\a';sleep .3; #inaudível a música. Por isso | |
echo -ne '\033[10;296]\a';sleep .3;sleep .3; #também,o mínimo de sleep,é ,1. | |
echo -ne '\033[10;247]\a';sleep .3; | |
echo -ne '\033[10;374]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;247]\a';sleep .3; | |
echo -ne '\033[10;296]\a';sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3; | |
echo -ne '\033[10;165]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;198]\a';sleep .3; | |
echo -ne '\033[10;209]\a';sleep .3; | |
echo -ne '\033[10;247]\a';sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3; | |
echo -ne '\033[10;296]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;247]\a';sleep .3; | |
echo -ne '\033[10;374]\a';sleep .3;sleep .3; | |
echo -ne '\033[10;247]\a';sleep .3; | |
echo -ne '\033[10;296]\a';sleep .3; | |
echo -ne '\033[10;330]\a';sleep .3; | |
echo -ne '\033[10;165]\a';sleep .3;sleep .3; | |
fi | |
case "$EXEMPLOSHM" in | |
1) EXEMPLOSHM=`expr "$EXEMPLOSHM" + 1` ;; | |
2) EXEMPLOSHM=`expr "$EXEMPLOSHM" - 1` ;; | |
esac | |
} | |
#--------------------------------------------------------------------------# | |
## Sessão: | |
######################### | |
## CONTROLE DO TECLADO ##################### | |
######################### GUIA DO CURIOSO ## | |
# ##################### | |
# | |
############################################################################ | |
# | |
# OS COMENTÁRIOS DESSA SESSÃO ESTÃO DESATUALIZADOS :( | |
# NA VERSÃO 2.50 DO PIANO GRIPE, ALGUNS CÓDIGOS PROVAVELMENTE SERÃO | |
# REFEITOS, E ESTA SESSÃO ESTARÁ TOTALMENTE ATUALIZADA. | |
# | |
# NÃO ADIANTARIA COMENTAR ESSA PARTE AGORA, POIS QUASE NINGUÉM | |
# ATÉ O DIA 30.11.2003 (DATA DE ATUALIZAÇÃO DESSE CÓDIGO) TESTOU O | |
# PIANO GRIPE. VOU DIVULGÁ-LO PARA QUE MAIS PESSOAS TESTEM E RELATEM | |
# ERROS PARA MEU E-MAIL, PARA QUE EU POSSA FAZER UMA VERSÃO ESTÁVEL | |
# E ENTÃO, COMENTAR PASSO-A-PASSO AQUI. | |
# | |
# OBRIGADO! | |
# | |
############################################################################ | |
# | |
# Aí começa a loucura. Algumas coisas eu ainda não consegui fazer | |
# para enxugar o código. Mas como ficou estável mesmo assim, decidi | |
# versionar como pronta deixando tais limpezas para próximas ver | |
# sões. Comentar essa parte será difícil por falta de espaço, mas | |
# resolvi criar uma legenda da documentação que aqui segue: | |
# | |
# 1) Remove o arquivo temporário criado para executar a música. mais | |
# a frente você verá que eu ainda não consegui executar a música a | |
# partir de uma variável (como eu queria). | |
# | |
# 2) Quando o usuário digita alguma, depois do enter, o texto some. | |
# a grande mágica é essa, um caractere de controle dizendo que tudo | |
# a partir do prompt TECLADO: seja apagado sempre que o loop voltar. | |
# E fica assim, você digita, da enter, procura (com o case) o que você | |
# digitou e executa os comandos, e depois volta para o começo, apagando | |
# o que você tinha digitado. Coloquei muitos espaços, para apagar al | |
# guma cagada que o usuário possa fazer (como digitar um monte de letras | |
# mesmo sabendo que o Piano Gripe só aceita uma tecla de cada vez). | |
# | |
# 3) Tudo que é teclado (ver case) vai para, entre outros lugares, para | |
# a variável $SEQUENCIA1SHM onde sempre vai mostrar a nota que você | |
# digitou na tela (sempre que o loop reinicia como falado na sessão 1). | |
# | |
# 4) O tempo também é mostrado em tempo real :) como a SEQUÊNCIA. Esse | |
# tempo, é a variável $SLEEPSHM, que existe entre cada nota, e na opção | |
# "P" também são dois $SLEEPSHM. O conteúdo dessa variável eh o programa | |
# sleep ,4 (por padrão). Mas o usuário pode modificá-la com + e -. | |
# | |
# 5) Explicando um, o resto das notas são o mesmo funcionamento: Quando | |
# o usuário toca uma tecla, o "read NOTAS" lê jogando na variável NOTAS. | |
# O case sai comparando para saber o que foi que digitou, nesse caso, foi | |
# a letra A (ou a), que é o Dó. Primeiro ele executa o conteúdo da variável | |
# $DO, isso é, primeiro sai o som (ver variável $DO mais acima). | |
# Depois tem SEQSHM=... Nessa etapa, ele grava nessa variável: | |
# ${SEQSHM} (isso é, conserve o que já existe) | |
# ${SEQSHM}echo -ne '\\033[10;132]\\a'; (grave a nota Dó e um ; literal) | |
# ${SEQSHM}echo -ne '\\033[10;132]\\a';$SLEEPSHM (adicione um espaço e ; | |
# que é o conteúdo dessa | |
# variável) | |
# Agora se eu teclasse depois do A (Dó) a letra "S" (Ré) ficaria assim | |
# o conteúdo da variável: | |
# echo -ne '\033[10;132]\a';sleep ,4;echo -ne '\033[10;147]\a';sleep 4, | |
# e assim iria até formar a música. Essa variável depois é jogada dentro | |
# de um arquivo cujo é atribuído permissão x e executado. | |
# | |
# OBS1: Note que em vez de usar "echo -ne \033[10..." para cada nota, | |
# eu poderia chamar a variável referente a nota, mas não consegui | |
# fazê-lo (ainda). | |
# | |
# OBS2: Também não precisava jogar dentro de um arquivo para ser | |
# executado. Bastava executar a variável, que nela já estariam | |
# os comandos da música. Mas também ainda não consegui fazê-lo. | |
# Bem, continuando...: | |
# | |
# A próxima linha é facil: SEQUENCIA1SHM=${SEQUENCIA1SHM}+Dó | |
# Essa variável é pada identificar no prompt SEQUÊNCIA cada nota que | |
# você tecla (até que a mesma seja apagada com o comando "E"). Ela | |
# sempre conserva o que existe e adiciona um +NOTA, ficando: | |
# +Dó+Dó#+Ré+Sol# sempre conservando a adicionando no final a nova nota. | |
# | |
# Recapitulando: Quando cada nota é tocada: | |
# 1o) Toca a Nota (variáveis notas) | |
# 2o) Adiciona a nota na sequência para execução posterior (w) | |
# 3o) Adiciona a nota no prompt SEQUÊNCIA | |
# | |
# 6) - Manda o conteúdo de $SEQSHM para o arquivo $HOME/tmp/shmusic.tmp | |
# - Da permissão de execução | |
# - Executa o arquivo, expelindo a música | |
# (Lembra que o conteúdo de $SEQSHM são todos os comandos gerados | |
# quando cada nota é tocada (adiciona-se ao final da variável)?) | |
# | |
# 7) - Esvazia o conteúdo das variáveis $SEQUENCIA1SHM e $SEQSHM | |
# - Apaga o arquivo $HOME/tmp/shmusic.tmp | |
# - Apaga tudo o que tiver do prompt SEQUÊNCIA: a diante. | |
# | |
# 8) - Adiciona ao final de $SEQSHM mais um $SLEEPSHM | |
# - Adiciona ao final de $SEQUENCIA1SHM um - (simbolizando um espaço | |
# na sequência gerada pelo | |
# prompt SEQUÊNCIA: ) | |
# | |
# 9) - Soa o exemplo contido na função _EXEMPLOSSHM | |
# | |
# - e +) - Essa opção está com o código muito sujo | |
# Vou preferir comentar na próxima versão quando retirar | |
# a metade desse código (mais da metade é sem necessidade) | |
# Esse software foi fruto de um estudo sobre caracteres de | |
# controle de cores, direção, som e a forma simples do while | |
# e case, por isso a despreocupação inicial de um código limpo. | |
# Ah, e o resultado foi que não consegui priorizar ALGUNS comandos | |
# concatenados dentro do próprio if, e para deixar funcionando | |
# bem, tive que dar pulos e voltas (resultado de código sujo e | |
# inseguro na estabilidade do Piano Gripe). | |
# Mas resumindo a cagada, ele soma ou diminui o valor numeral | |
# encontrada na variável de espaço ($SLEEPSHM) deixando no | |
# mínimo sleep ,1 e no máximo sleep ,9. | |
# | |
# q) - Define "sim" a variável $PARASHM (cuja será utilizada no final) | |
# - Apaga o arquivo shmusic.tmp | |
# - Deixa o beep da máquina em seu estado normal | |
# - Sai do Piano Gripe com o cursor na linha 55 coluna 1 | |
# | |
# *) Caso o usuário digite qualquer coisa que não esteja entre as opções | |
# dadas pelo Piano Gripe, as opções cotidas na função _APARENCIAOPCOES | |
# são redefinidas, e continue :) | |
# | |
# 10) Se a variável $PARASHM for igual a sim, pare o programa e saia do | |
# loop. Senão, continue a loopar :D | |
rm -f "$HOME"/tmp/shmusic.tmp > /dev/null 2> /dev/null | |
[ ! -d "$HOME"/tmp ] && mkdir "$HOME"/tmp | |
while true | |
do | |
VAIPARA 17 15 | |
echo -e '\033[0K' | |
VAIPARA 19 6 | |
echo -e "\\033[40;36mSEQUENCIA:\\033[m "$SEQUENCIA1SHM"" | |
VAIPARA 18 6 | |
echo -e "\\033[40;36mTEMPO: "$SLEEPSHMLANG"" | |
VAIPARA 17 6 | |
echo -e '\033[40;36mTECLADO:\033[m \c' | |
read -n1 NOTAS | |
case "$NOTAS" in | |
[aA]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=DO ; MARKNOTAUP | |
$DO ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Do ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;132]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Ss]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=RE ; MARKNOTAUP | |
$RE ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Re ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;148]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Dd]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=MI ; MARKNOTAUP | |
$MI ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Mi ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;165]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Ff]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=FA ; MARKNOTAUP | |
$FA ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Fa ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;176]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Gg]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=SOL ; MARKNOTAUP | |
$SOL ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Sol ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;198]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Hh]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=LA ; MARKNOTAUP | |
$LA ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+La ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;220]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Jj]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=SI ; MARKNOTAUP | |
$SI ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Si ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;247]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Kk]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=DO1 ; MARKNOTAUP | |
$DO1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Do ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;264]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Ll]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=RE1 ; MARKNOTAUP | |
$RE1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Re ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;296]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Zz]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=MI1 ; MARKNOTAUP | |
$MI1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Mi ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;330]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Xx]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=FA1 ; MARKNOTAUP | |
$FA1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Fa ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;352]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Cc]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=SOL1 ; MARKNOTAUP | |
$SOL1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Sol ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;396]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Vv]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=LA1 ; MARKNOTAUP | |
$LA1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+La ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;440]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
[Bb]) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=SI1 ; MARKNOTAUP | |
$SI1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Si ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;494]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
1) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=DOS ; MARKNOTAUP | |
$DOS ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Do\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;143]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
2) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=RES ; MARKNOTAUP | |
$RES ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Re\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;157]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
3) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=FAS ; MARKNOTAUP | |
$FAS ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Fa\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;187]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
4) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=SOLS ; MARKNOTAUP | |
$SOLS ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Sol\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;209]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
5) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=LAS ; MARKNOTAUP | |
$LAS ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+La\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;233]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
6) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=DO1S ; MARKNOTAUP | |
$DOS1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Do\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;286]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
7) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=RE1S ; MARKNOTAUP | |
$RES1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Re\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;314]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
8) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=FA1S ; MARKNOTAUP | |
$FAS1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Fa\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;374]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
9) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=SOL1S ; MARKNOTAUP | |
$SOLS1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+Sol\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;418]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
0) [ "$CONTASHM" -lt "92" ] && { | |
CONTASHM=`expr $CONTASHM + 1` | |
MARKNOTADOWN ; MARKNOTASHM=LA1S ; MARKNOTAUP | |
$LAS1 ; SEQUENCIA1SHM=${SEQUENCIA1SHM}+La\# ; LEDSETI | |
SEQSHM="${SEQSHM}echo -ne '\\033[10;466]\\a';$LASTL;$SLEEPSHMLANG" | |
} ;; | |
#################### | |
# TOCA A SEQUÊNCIA # | |
#################### | |
[wW]) stty -echo | |
setleds -num ; setleds -caps | |
echo "$SEQSHM" > "$HOME"/tmp/shmusic.tmp | |
chmod +x "$HOME"/tmp/shmusic.tmp | |
"$HOME"/tmp/shmusic.tmp | |
stty echo ;; | |
##################### | |
# APAGA A SEQUÊNCIA # | |
##################### | |
[Ee]) SEQUENCIA1SHM="" ; SEQSHM="" ; CONTASHM=1 | |
setleds -num ; setleds -caps | |
rm -f "$HOME"/tmp/shmusic.tmp | |
VAIPARA 19 15 | |
echo -e '\033[0J' ;; | |
###################### | |
# ADICIONA UMA PAUSA # | |
###################### | |
[pP]) SEQSHM="${SEQSHM}$SLEEPSHMLANG" | |
SEQUENCIA1SHM=${SEQUENCIA1SHM}\- ;; | |
################### | |
# TOCA UM EXEMPLO # | |
################### | |
[Rr]) stty -echo | |
_EXEMPLOSSHM | |
stty echo ;; | |
############################### | |
# DIMINUI O TEMPO ENTRE NOTAS # | |
############################### | |
-) echo $SLEEPSHMLANG | tr "sleep ." " " | sed 's/^[ ]*//'| \ | |
sed 's/;$//' > "$HOME"/tmp/gripeshm.tmp | |
if [ `cat "$HOME"/tmp/gripeshm.tmp` -gt 1 ]; then | |
expr `echo $SLEEPSHMLANG | tr "sleep ." " " | \ | |
sed 's/^[ ]*//' | sed 's/;$//'` - 1 > "$HOME"/tmp/gripeshm.tmp | |
SLEEPSHMLANG="sleep .`cat "$HOME"/tmp/gripeshm.tmp`;" | |
rm -f "$HOME"/tmp/gripeshm.tmp | |
continue | |
fi | |
;; | |
############################### | |
# AUMENTA O TEMPO ENTRE NOTAS # | |
############################### | |
+) echo $SLEEPSHMLANG | tr "sleep ." " " | sed 's/^[ ]*//'| \ | |
sed 's/;$//' > "$HOME"/tmp/gripeshm.tmp | |
if [ `cat "$HOME"/tmp/gripeshm.tmp` -lt 9 ]; then | |
expr `echo $SLEEPSHMLANG | tr "sleep ." " " | \ | |
sed 's/^[ ]*//' | sed 's/;$//'` + 1 > "$HOME"/tmp/gripeshm.tmp | |
SLEEPSHMLANG="sleep .`cat "$HOME"/tmp/gripeshm.tmp`;" | |
rm -f "$HOME"/tmp/gripeshm.tmp | |
continue | |
fi | |
;; | |
################### | |
# SALVA SEQUÊNCIA # | |
################### | |
[Tt]) [ ! -d "$HOME"/musicas-gripe ] && mkdir "$HOME"/musicas-gripe | |
[ ! -w "$HOME"/musicas-gripe ] && chmod +w "$HOME"/musicas-gripe | |
VAIPARA 17 6 | |
echo -e '\033[40;36mNOME ("cancelar" p/ abortar):\033[m \c' | |
read SALVARSHM | |
stty -echo | |
if [ "$SALVARSHM" = "cancelar" -o "$SALVARSHM" = "CANCELAR" ];then | |
stty echo | |
continue | |
elif [ -f "$HOME"/musicas-gripe/"$SALVARSHM".shm ];then | |
while true | |
do | |
VAIPARA 17 41 | |
echo -e '\033[0K' | |
VAIPARA 17 6 | |
echo -e '\033[40;36mSUBSTITUIR ARQUIVO EXISTENTE? (s/n)\033[m \c' | |
stty echo | |
read SALVARSIMOUNAO | |
stty -echo | |
case "$SALVARSIMOUNAO" in | |
[sS]) SALVAR_ARQUIVO | |
stty echo | |
break | |
;; | |
[Nn]) stty echo | |
break ;; | |
*) continue ;; | |
esac | |
done | |
else | |
SALVAR_ARQUIVO | |
stty echo | |
continue | |
fi | |
;; | |
###################### | |
# SAI DO PIANO GRIPE # | |
###################### | |
[Qq]) PARASHM=1 | |
setleds -num ; setleds -caps | |
rm -f "$HOME"/tmp/shmusic.tmp | |
echo -e '\033[10;750]' | |
echo -e '\033[11;100]' | |
LANG=$SALVALANG | |
VAIPARA 55 1 | |
stty echo | |
;; | |
*) _APARENCIAOPCOES ; continue | |
;; | |
esac | |
[ "$PARASHM" = "1" ] && break | |
done # :) | |
# Proposta de Emprego: Pablo Fernandes (fernandes_pablo@yahoo.com.br) hehehe | |
# http://cltfc.sites.uol.com.br | |
# Abraços e "Vida Longa ao Shell Script" | |
# Fui |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment