Voltar ao Sumário
Songbook - Parte 3
Músicas com Cifras para Violão.
Nesta terceira parte do projeto, vai ser apresentado o código da tela de Acordes.Um Problema Gráfico
Na tela de Música, as linhas com marcadores de diagrama de cifras foram copiadas para uma lista, que foi repassada à tela de Acordes quando o botão de mesmo nome foi acionado. Na tela de Acordes, estes registros devem ser apresentados como diagramas que ilustram a digitação, no braço do violão. Esses diagramas são bem conhecidos por músicos, apresentando pequenas variações.A notação proposta é que cada registro tenha a cifra seguida por um sinal de igual e uma sequência de até 6 dígitos representando o trasto em que cada corda deve ser pressionada (X em cordas mudas).
Veja abaixo um exemplo, com a lista de acordes e os diagramas que devem ser mostrados:
G = 320003
C = X32010
D = XX0232
Analisando os diagramas, você vai perceber que cada um tem o nome da cifra no topo e um retângulo reticulado, com 5 linhas horizontais e seis linhas verticais (seriam 4, para o caso de um cavaquinho ou ukulele). Em cada linha vertical (que representa uma corda do instrumento) que contribui com um som para o acorde, é desenhado um círculo acima do trasto em que o braço do violão deve ser pressionado com um dedo.
Para simplificar a implementação, não será desenhado o X nas cordas onde não há som, e os círculos serão todos cheios. Diagramas com cinco linhas servem para representar as cifras em que as cordas são pressionadas do trasto 0 ao IV. Se o acorde está mais além no braço, utiliza-se um número romano para indicar a posição do primeiro trasto do diagrama.
O problema a resolver é dividir a tela gráfica em retângulos que serão utilizados para representar cada cifra (é necessário quantas cifras vão caber na horizontal e na vertical), e, dadas as coordenadas desses retângulos, desenhar em cada um um diagrama conforme a lista recebida.
Se na tela não cabem todos os diagramas da lista, botões de Próxima e Anterior devem permitir navegar por todas as telas necessárias.
Para resolver o compromisso entre legibilidade e quantidade de acordes a mostrar por tela, pode ser utilizado algum critério, como o número de pixels na tela gráfica, para determinar o tamanho de cada diagrama.
A partir daí, deve ser criado um procedimento que, dadas as coordenadas x, y do canto da área a utilizar, a cifra e os números associados às cordas, desenhe o diagrama.
Componentes da Tela de Acordes
Com os principais detalhes resolvidos, você tem que projetar a arrumação da tela. Veja abaixo:
Segue a lista de componentes nesta tela:
- btAnterior - O botão que volta uma tela na apresentação dos acordes.
- btProxima - O botão que avança uma tela (se houver), na apresentação dos acordes.
- Pintura1 - Área gráfica, onde serão desenhados os diagramas dos acordes.
Blocos da Tela de Acordes
Definida a arrumação dos componentes, você pode passar à lógica que trata os diversos eventos.Veja os dados globais:
As variáveis largura_corda e largura_linha controlam a aparência dos diagramas. Foi escolhido um valor para a primeira dez vezes maior que o da segunda. Para telas pequenas, pode-se usar metade do valor (10 e 1), para aumentar o número de diagramas na tela.
lista_acordes guarda a cópia dos dados recebidos pela tela, com os registros de cifras.
primeiro_acorde guarda o ponto na lista onde está o primeiro diagrama a apresentar na tela. Este valor muda conforme se usem os botões btAnterior e btProxima.
acordes_por_tela é um valor calculado a cada vez que a geometria da tela é alterada (no início, e quando a tela é girada).
O primeiro evento ativado quando TelaAcordes é aberta a é quando TelaAcordes.Iniciar. Se a tela for girada, é ativado o evento quando TelaAcordes.OrientaçãoDeTelaMudou.
No início, lista_acordes recebe uma cópia dos dados passados à tela. O primeiro_acorde volta ao início da lista, e um teste determina se a largura da linha e da corda devem ser alteradas (quando a tela é pequena).
A partir daí, o tratamento da iniciação e da rolagem de tela são iguais. A tela tem que ser atualizada. O código foi criado em um procedimento, para ser reutilizado em outros eventos.
Segue a parte truncada, na ativação de desenhar_acorde.
Em AtualizarTela, a partir de largura_da_corda e da geometria dos diagramas a desenhar, são calculadas a largura e a altura de cada diagrama. Daí, usando a largura e altura da tela, são calculados quantos diagramas cabem na linha (gerando num_colunas), e quantas linhas de diagramas cabem na tela (num_linhas). Multiplicando esses dois valores, se obtém quantos acordes podem ser desenhados na tela (acordes_por_tela).
A partir desse número de acordes a desenhar, é ativado o procedimento desenhar_acorde para desenhar cada um dos diagramas, iniciando em primeiro_acorde, e terminando no fim da lista, ou quando a tela ficar cheia.
Você pode ter notado que o procedimento desenhar_acorde viola a convenção que tem sido utilizada para dar nome a procedimentos. Isto foi uma falha durante o desenvolvimento, que pode ser facilmente corrigida, alterando o nome do procedimento. O melhor seria: DesenharAcorde. Este procedimento é longo, e será apresentado por partes.
Na primeira parte do procedimento, o registro é analisado, para separar o nome da cifra da sequência de números da digitação. Em seguida, para cada corda, é desenhada uma linha vertical, e, se a mesma recebeu um número, este é utilizado para calcular em que pestana (ou trasto) começa o diagrama. Ao final desta primeira repetição, já é conhecida a posição da pestana. Daí, se necessário, é acrescentado ao nome da cifra um número em algarismos romanos entre parêntesis, para indicar em que trasto começa o diagrama.
Uma nova repetição é executada para cada corda, desenhando um círculo em cada corda que deve gerar um som no acorde. O círculo fica um pouco abaixo do trasto indicado no registro. Se a corda não é pressionada, isto é indicado por um caractere não numérico (por exemplo, X), e nada é desenhado para a corda correspondente.
Veja abaixo o detalhe dos cálculos para determinar a posição do círculo, que ficaram truncados na imagem do procedimento:
Por fim, resta o tratamento dos botões btAnterior e btProxima.
Os testes em cada bloco determinam se ainda há mais uma tela adiante ou antes da atual. Se há uma tela, a posição do primeiro_acorde é ajustada, e o procedimento AtualizarTela é ativado para repintar a tela com o novo grupo de diagramas.
Dicionários de Cifras
O foco deste projeto é a programação do aplicativo, mas, para gerar material para o teste da tela de acordes, e para ilustrar os diversos diagramas que podem ser apresentados, seguem tabelas de cifras para violão e para ukulele, que podem ser acrescentadas como as páginas finais do arquivo de música, na forma de dicionários de acordes.#Dicionário de Cifras para Violão
Para visualizar a digitação dos acordes, utilize o botão Adordes.
Observações:
Cordas marcadas com X não devem ser tocadas.
As notas abaixo são equivalentes:
C# = Db, D# = Eb, F# = Gb, G# = Ab, A# = Bb
Para efeito de notação de cifras, os símbolos abaixo são equivalentes:
2 = 9, 4 = 11, 5- = 11+, 5+ = 13-, 6 = 13, sus = 4
Uma cifra que vem seguida de / e uma letra maiúscula indica que
este é o baixo a utilizar no acorde (normalmente, o 3º ou 5º grau do acorde).
Cifras com quinta (e.g.: C5) indicam a supressão do terceiro grau no acorde.
@A6 = X02222
@A7/4 = X02030
@A7/9- = X02323
@A7/13 = X02022
@A7/13- = X02021
@A7M = X0212X
@A9 = X02200
@Am6 = X02212
@Am6 = 5X455X
@Am7 = X02010
@Am7 = 5X555X
@Am7/5- = 5X554X
@Am7/11 = 5X553X
@Bb = X1333X
@Bb/Ab = 4X333X
@Bb/C = X33331
@Bb6 = X1X333
@Bb6 = X1X031
@Bb7/9 = X1011X
@Bb7M = X1323X
@Bbm6 = 6X566X
@Bbm6 = X1X021
@Bb° = X1202X
@Bm7/5- = X2323X
@Bm7/11 = X22232
@Bm11 = X2243X
@B° = X2313X
@C/Bb = X1201X
@C/D = XXX558
@C7/9 = X3233X
@C7M = X32000
@C7M/9 = X3243X
@C7M/E = XX2003
@D/F# = 200232
@D/G = XX0032
@D5+ = XX0332
@D6 = XX0202
@D6 = XX0432
@D6/F# = 2X020X
@D7/9 = XX0210
@D7/9 = X5455X
@D7/9- = X5454X
@D7M = XX0222
@Dm7 = XX0211
@Eb7M = XX1333
@Eb° = XX1212
@Eb7/9 = XX1021
@E = 022100
@E = XXX454
@E/G# = 4XX454
@E4 = 022200
@E4 = XXX455
@E7/9 = 0XX132
@E7/9- = 0X2131
@E7/9- = 0X3130
@Em5+ = 0X2010
@Em6 = 0X2020
@Em7 = 022030
@Em7/5- = XX2333
@F6 = 1X021X
@F7M = 1X221X
@F7M = XX3210
@F° = 1X0101
@F#7 = 242322
@F#m/B = X2422X
@F#m7/11 = 2X4200
@F#° = 2X121X
@G/B = X20033
@G/D = XX0003
@G/D = XXX787
@G6 = 320000
@G7/4/9 = 3X321X
@G7/9- = 3x310X
@G7/11 = 3XX011
@G7/13- = 3X3443
@G7/13 = 3X3453
@G7M = 3x443X
@Gm/A = 5X533X
@Gm6 = 3X233X
@Gm7 = 3X333X
@Gsus = 355533
@G° = 3x232X
@G#7M/4 = 4X542X
@G#°/13- = 4X345X
#Dicionário de Cifras para Ukulele
Para visualizar a digitação dos acordes, utilize o botão Adordes.
Observações:
Cordas marcadas com X não devem ser tocadas.
As notas abaixo são equivalentes:
C# = Db, D# = Eb, F# = Gb, G# = Ab, A# = Bb
@A = 2100
@B = 4322
@C = 0003
@D = 2220
@D = 2225
@E = 4447
@F = 2013
@G = 0232
@Am = 2000
@Bm = 4222
@Cm = 0333
@Cm = 5333
@Dm = 2210
@Em = 4432
@Fm = 1013
@Gm = 0231
@A7 = 0100
@B7 = 2322
@C7 = 0001
@D7 = 2223
@E7 = 1202
@F7 = 2313
@G7 = 0212
@A7M = 1100
@B7M = 4322
@C7M = 0002
@D7M = 2224
@E7M = 1302
@F7M = 2413
@G7M = 0222
@A° = 2323
@B° = 1212
@C° = 2323
@D° = 1212
@E° = 0101
@Fº = 1212
@G° = 0101
Note que você pode acrescentar ao arquivo de músicas páginas com texto explicativo, desde que utilize apenas o marcador de início de página, e não tenha linhas iniciadas pelos demais símbolos (@ e &). Estas páginas poderiam ter explicações sobre teoria musical, ou informações sobre as músicas no repertório, e seus compositores.
Sugestões de Melhorias
Este aplicativo já tem utilidade como está, mas algumas simplificações foram feitas para facilitar a implementação. Se você está disposto a enfrentar alguns desafios, sua imaginação é o limite. Como ponto de partida, seguem algumas sugestões:- Modificar a interpretação das linhas e a máquina de estados para aceitar arquivos do tipo ChordPro. Este é um formato bem popular para compartilhamento de arranjos para músicas.
- Apresentar na tela de Acordes os acordes transpostos, de acordo com um dicionário de cifras. Na tela de Acordes, não foi tratada a transposição de acordes. O problema a resolver é a forma de passar o dicionário de cifras juntamente com as linhas de música, para a tela de Música. Isto porque a forma padrão de passar um valor para uma tela só permite a passagem de uma estrutura de dados. Uma possível solução é criar uma lista cujo primeiro ítem é a lista de linhas, o segundo, o dicionário de cifras para violão, ....
- Melhorar a forma de determinar a raiz do sistema de arquivos em qualquer dispositivo.
- Acrescentar funcionalidade para tocar a música junto com a apresentação da mesma, a partir de uma pasta que contenha os arquivos de músicas, ou de links para a execução das músicas na Internet.
Além das funções adicionais, também é uma boa hora para revisar o código, acrescentar comentários para as partes mais complexas, refatorar ou rearrumar as telas, se necessário.
Se você deseja baixar o projeto de um aplicativo com algumas dessas soluções implementadas, veja em: ai2.appinventor.mit.edu/?galleryId=5679031463051264
Como o nome Songbook é bem comum, em uma pesquisa por aplicativos, foi encontrado um com esse nome que já tem tradição. Para evitar confusão com o nome, o aplicativo revisado foi rebatizado para seresta.
Segue o exemplo de um arquivo completo com cantigas de roda em domínio público. Se você copiar essas linhas de texto para um arquivo com nome musicas.txt, pode usá-lo para testar o aplicativo. Depois, divirta-se criando seus próprios arranjos, ou procurando arranjos para suas músicas preferidas na Internet.
Note que a primeira página marcada com # é na verdade um guia de instalação, configuração e uso do aplicativo. No final, há um dicionário de cifras para Ukulele.
Livro de Músicas com Cifras para Violão
#Instalação, Configuração e Operação
Para instalar o aplicativo de forma simples, use um cabo USB, ligue o
dispositivo Android, faça login e copie o arquivo .apk (seresta.apk) e
este arquivo (musicas.txt) para a pasta /Download do mesmo.
Usando um gerenciador de arquivos no dispositivo, ative o arquivo .apk
(seresta.apk), e siga as instruções de instalação. Como este arquivo
não vem da PlayStore do Google, uma mensagem deve lhe informar que há
possíveis riscos, e você vai precisar alterar a configuração do dispositivo,
na guia de Segurança, para permitir a instalação de aplicativos de fontes
desconhecidas.
Configuração Inicial
Uma vez instalado o aplicativo, na primeira ativação, será apresentada
automaticamente a tela de Configuração. Se o arquivo musicas.txt está
na pasta indicada acima, basta ativar o botão "Restaurar Configuração Padrão"
e voltar para a tela principal. Após alguns segundos, surge a lista de músicas.
Principais Funções
Escolha uma música e a mesma surge na tela.
Os botões A+ e A- na tela de Música servem para alterar o tamanho da fonte.
A lista Transpor permite alterar o tom do arranjo, dado o número de semi-tons.
O botão Acordes mostra os acordes na música. Sobre este botão, veja abaixo mais
detalhes de configuração.
Na tela principal, existem botões para procurar texto nos Títulos de Música,
nas linhas de Autores da música (a primeira após o título) e também
no texto completo.
Há também botões de navegação. O botão ||< retorna a lista ao início, e
o botão >|| avança a lista até o final. O botão Posicionar posiciona a lista
de forma que a primeira música é a que foi apresentada mais recentemente.
Configuração Avançada:
Na tela de Configuração, ativada através do botão de mesmo nome na tela
principal, existem mais opções.
A chave "Mostrar acordes para todas as cifras" alterna o modo de exibição
das cifras.
Se desligada, apenas cifras especiais com diagramas presentes na própria
música são apresentadas. Nesse caso, os diagramas são fixos, e não mudam
se a música é transposta. Esse modo serve para quem deseja tocar as músicas
no arranjo original, com os acordes mais apropriados.
Se a chave for ligada, são mostradas todas as cifras utilizadas em cada música,
que constem no dicionário de cifras (encontrado no final da lista de músicas).
Neste caso, se a música for transposta, as cifras exibidas acompanham
a transposição. Este modo é útil para músicos iniciantes, que ainda estão
aprendendo a digitação dos acordes.
O aplicativo é capaz de ler arquivos no formado ChordPro, muito popular
para compartilhamento de músicas com cifras. O campo "Sufixos de arquivos
ChordPro" indica que sufixos vão causar a conversão de formato para o
formato nativo. Qualquer arquivo com sufixo diferente será lido no formato
nativo (o mesmo do arquivo músicas.txt).
Outro campo configurável é a Rota da Raiz, Que funciona em conjunto com o
botão Escolher Arquivo. Este campo está presente para
o caso de se desejar instalar músicas de outra pasta no dispositivo, e
de se desejar escolher outros arquivos de músicas.
Acontece que, conforme a versão de Android instalada e o Gerenciador de
Arquivos utilizado, ao escolher um arquivo, o resultado copiado para a
caixa Nome do Arquivo vem com um preâmbulo longo, que precisa ser removido
para que o aplicativo encontre o arquivo. Apenas arquivos em pastas
internas podem ser lidos. Arquivos no cartão SD geram erro de leitura.
Se você recortar o preâmbulo que aparece na caixa Nome do Arquivo até
o ponto onde começa a raiz das rotas de arquivos contidas na memória interna
e colar este texto na caixa Rota da Raiz, nas próximas vezes em que escolher
um arquivo, o preâmbulo será removido automaticamente.
#A Canoa Virou
Cantiga de Roda
& E A
A canoa virou
& A7 D
Pois deixaram ela virar
& Bm E
Foi por causa de Maria
& E7 A
Que não soube remar
& E A
Se eu fosse um peixinho
& A7 D
E soubesse nadar
& Bm E
Eu tirava Maria
& E7 A
Do fundo do mar
& Bm
Siri pra cá
Siri pra lá
& E
Maria é bela
& A
E quer casar
(repete estrofe)
#Alecrim
Cantiga de Roda
& C Dm
Alecrim, alecrim dourado
& G
Que nasceu no campo
& C G
Sem ser semeado
& C Dm
Alecrim, alecrim dourado
& G
Que nasceu no campo
& C
Sem ser semeado
&C7 F
Foi meu amor
& C
Que me disse assim
& G C
Que a flor do campo é o alecrim
&C7 F
Foi meu amor
& C
Que me disse assim
& G C
Que a flor do campo é o alecrim
(repete)
#Cai Cai Balão
Cantiga de Roda
& C
Cai cai balão
& C
Cai cai balão
& F G7
Aqui na minha mão
& Dm
Não vou lá, não vou lá, não vou lá!
& G C
Tenho medo de apanhar!
#Marcha Soldado
Cantiga de Roda
&C
Marcha soldado
& G
Cabeça de papel
Quem não marchar direito
& C
Vai preso no quartel
O quartel pegou fogo
& G
A polícia deu sinal
Acode, acode, acode
& C
A bandeira nacional
#Parabéns Pra Você
Mildred J Hill/Patty Hill/Bertha Celeste
& A E
Parabéns pra você
& A
Nesta data querida
& A7 D
Muitas felicidades
& A E A
Muitos anos de vida
(repete)
#Dicionário de Cifras para Ukulele
Para visualizar a digitação dos acordes, utilize o botão Adordes.
Observações:
Cordas marcadas com X não devem ser tocadas.
As notas abaixo são equivalentes:
C# = Db, D# = Eb, F# = Gb, G# = Ab, A# = Bb
@A = 2100
@B = 4322
@C = 0003
@D = 2220
@D = 2225
@E = 4447
@F = 2013
@G = 0232
@Am = 2000
@Bm = 4222
@Cm = 0333
@Cm = 5333
@Dm = 2210
@Em = 4432
@Fm = 1013
@Gm = 0231
@A7 = 0100
@B7 = 2322
@C7 = 0001
@D7 = 2223
@E7 = 1202
@F7 = 2313
@G7 = 0212
@A7M = 1100
@B7M = 4322
@C7M = 0002
@D7M = 2224
@E7M = 1302
@F7M = 2413
@G7M = 0222
@A° = 2323
@B° = 1212
@C° = 2323
@D° = 1212
@E° = 0101
@Fº = 1212
@G° = 0101
@C6 = 0000
@D6 = 2222
@G6 = 0202
@C7/4 = 0011
@D7/4 = 2233
@G7/4 = 0213
@Am7 = 0000
@Bm7 = 2222
@Cm7 = 3333
@Dm7 = 5555
Distribuído sob a licença: Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) : https://creativecommons.org/licenses/by-sa/3.0/deed.pt_BR











Nenhum comentário:
Postar um comentário