Anda di halaman 1dari 108

ANNA CATARINA B. TAVELLA e DANILO J. S.

BELLINI
ORFEU - EDITOR E SEQENCIADOR MUSICAL
Projeto de Formatura apresentado Escola
Politcnica da Universidade de So Paulo
para a obteno da graduao emEngenharia
rea de Graduao: Engenharia Eltrica
com nfase em Computao e Sistemas
Digitais
Orientador: Prof. Dr. Joo Jos Neto
So Paulo
2007
ANNA CATARINA B. TAVELLA e DANILO J. S. BELLINI
ORFEU - EDITOR E SEQENCIADOR MUSICAL
Projeto de Formatura apresentado Escola
Politcnica da Universidade de So Paulo
para a obteno da graduao emEngenharia
rea de Graduao: Engenharia Eltrica
com nfase em Computao e Sistemas
Digitais
Orientador: Prof. Dr. Joo Jos Neto
So Paulo
2007
RESUMO
Este trabalho consiste na concepo, especicao e implementao de um software
editor musical que envolve diferentes tipos de notao incluindo a notao em parti-
tura e compatvel com formatos padres de grandes acervos gratuitos. A converso
entre as diversas notaes feita atravs de algoritmos adaptativos, com o intuito de
possibilitar que usurios iniciantes possam tocar suas partituras, e de agilizar o traba-
lho de transcritores prossionais. O trabalho tambm inclui um seqenciador de alta
delidade, responsvel pelo controle de detalhes artsticos no explcitos na notao
musical utilizada. O projeto visa a ser atualizado com um conjunto de recursos que
possibilitem o acesso a todas as funcionalidades existentes neste software aos usurios
portadores de decincia visual.
ABSTRACT
This report consists on the conception, specication and implementation of a musical
editor software that involves different kinds of notation including the score notation
and is compatible with standards which have a great number of les available for free.
The conversion tools are the adaptive algotithms, to enable beginner users to play their
own scores and to make professional transcribers work faster. The report also includes
a specic module used to control the artistic details that cannot be written at the graphic
notation. This project aims to be atualized with a set of resources that give access of
all of the software funcionalities to people who have visual handicap.
SUMRIO
1 Objetivo do Projeto 12
2 Justicativa 13
3 Funcionamento bsico 14
4 Especicao 16
4.1 Requisitos Funcionais . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2 Requisitos No-Funcionais . . . . . . . . . . . . . . . . . . . . . . . 17
4.3 Funcionalidades desejveis . . . . . . . . . . . . . . . . . . . . . . . 18
4.4 Decises para atendimento dos requisitos . . . . . . . . . . . . . . . 18
5 Projeto do ncleo 20
5.1 Estrutura de dados da representao musical . . . . . . . . . . . . . . 20
5.2 Matemtica musical . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6 Pesquisas Realizadas 23
6.1 Pesquisa com os possveis usurios envolvendo enquetes e perguntas
simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
6.2 Entrevistas com msicos prossionais e estudantes de msica . . . . . 24
6.3 Pesquisa de componentes de software e de partes reutilizveis . . . . 25
6.4 Pesquisa sobre as possibilidades de linguagens de implementao . . 25
7 Computao Grca 29
7.1 Pesquisa sobre computao grca . . . . . . . . . . . . . . . . . . . 29
7.2 Atributos visuais reetidos na estrutura de dados . . . . . . . . . . . 31
7.3 Graphics32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
7.4 Autmatos Adaptativos . . . . . . . . . . . . . . . . . . . . . . . . . 34
8 MIDI - Musical Instrument Digital Interface 36
8.1 Resumo da arquitetura do MIDI e sua conexo com o projeto . . . . . 36
8.2 Mensagens MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
8.3 API do Windows e componentes MIDI . . . . . . . . . . . . . . . . . 39
9 Pequenos programas para testar tecnologias 42
9.1 MIDIOutTest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
9.2 Teste com arquivos XML . . . . . . . . . . . . . . . . . . . . . . . . 43
10 Detalhamento 44
10.1 Componentes (interface MIDI) . . . . . . . . . . . . . . . . . . . . . 44
10.2 O editor de partituras . . . . . . . . . . . . . . . . . . . . . . . . . . 46
10.3 O Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
10.4 A atualizao da tela . . . . . . . . . . . . . . . . . . . . . . . . . . 55
10.5 A estrutura interna de arquivos . . . . . . . . . . . . . . . . . . . . . 56
10.6 Interface com o usurio . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.7 O editor de tablatura . . . . . . . . . . . . . . . . . . . . . . . . . . 60
10.8 A tela principal e os menus . . . . . . . . . . . . . . . . . . . . . . . 61
10.9 Implementao da estrutura musical . . . . . . . . . . . . . . . . . . 64
10.10Execuo sonora . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
10.11Entrada MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
11 Algoritmo baseado em autmato adaptativo 71
11.1 Converso de partitura em tablatura . . . . . . . . . . . . . . . . . . 71
11.2 Aceitao e rejeio da cadeia . . . . . . . . . . . . . . . . . . . . . 74
11.3 Aes adaptativas e algoritmo . . . . . . . . . . . . . . . . . . . . . 75
11.4 Tratamento de notas mltiplas . . . . . . . . . . . . . . . . . . . . . 77
12 Importar arquivo do Guitar Pro 4 78
12.1 Formato de arquivos do Guitar Pro . . . . . . . . . . . . . . . . . . . 78
12.2 Incio do cabealho . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
12.3 Propriedades da msica . . . . . . . . . . . . . . . . . . . . . . . . . 79
12.4 Letras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.5 Mais propriedades da msica . . . . . . . . . . . . . . . . . . . . . . 80
12.6 Tabela de canais MIDI . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.7 Dimenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.8 Compassos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.9 Trilhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.10Beats ou SimNotes . . . . . . . . . . . . . . . . . . . . . . . . . 83
12.11Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
12.12Tabela de acordes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
13 Exportar para MIDI 86
13.1 O arquivo MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
13.2 Formato inteiro de comprimento varivel MIDI . . . . . . . . . . . . 87
13.3 Header chunk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.4 Track chunk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
14 Resultados Obtidos 90
14.1 Caractersticas e limitaes da exibio em partituras . . . . . . . . . 90
14.2 Caractersticas e limitaes da exibio em tablaturas . . . . . . . . . 91
15 Aceitao do projeto - requisitos funcionais 93
15.1 Editor de partituras . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
15.2 A representao visual da partitura deve ser inteligvel . . . . . . . . 93
15.3 Importao de GP4 . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
15.4 Editor de tablaturas . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
15.5 Equivalncia entre partituras e tablaturas . . . . . . . . . . . . . . . . 95
15.6 Converso adaptativa em um dos casos acima . . . . . . . . . . . . . 95
15.7 Personalizao de algum recurso sonoro que no totalmente explcito
em partitura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
15.8 Criao de uma seqncia . . . . . . . . . . . . . . . . . . . . . . . 96
15.9 Reproduo de uma seqncia . . . . . . . . . . . . . . . . . . . . . 96
15.10Detalhes da reproduo . . . . . . . . . . . . . . . . . . . . . . . . . 96
15.11Interface com o teclado . . . . . . . . . . . . . . . . . . . . . . . . . 97
15.12Impresso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
15.13Exportao MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
16 Aceitao do projeto - requisitos no-funcionais 98
16.1 Compatibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
16.2 Recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
16.3 Mnimo de duas vozes na polifonia . . . . . . . . . . . . . . . . . . . 98
16.4 Latncia entre o pedido de execuo e seu incio deve ser de no mnimo
1 segundo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
16.5 Deve funcionar mesmo que no haja como sintetizar o som . . . . . . 99
17 Itens adicionais implementados 100
17.1 Transpor partituras . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
17.2 Entrada MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
17.3 Poliritmia total sobre uma pulsao . . . . . . . . . . . . . . . . . . . 100
17.4 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
17.5 N cordas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
17.6 Anaes e conguraes em INI . . . . . . . . . . . . . . . . . . 101
18 Concluso 102
Referncias 104
Apndice A - Glossrio 106
LISTA DE FIGURAS
Pgina
1 Esquema de entrada/sada . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Esquema bsico de funcionamento do Orfeu . . . . . . . . . . . . . . 15
3 Estrutura de dados de uma msica . . . . . . . . . . . . . . . . . . . 20
4 Cabo MIDI fmea . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5 Arquitetura: comunicao MIDI . . . . . . . . . . . . . . . . . . . . 36
6 Outros exemplos da comunicao MIDI . . . . . . . . . . . . . . . . 37
7 Interface construda para testes com a interface MIDI . . . . . . . . . 42
8 Paleta de componentes reutilizveis do Orfeu . . . . . . . . . . . . . 42
9 Teste de abertura de arquivo XML . . . . . . . . . . . . . . . . . . . 43
10 Impresso de notas simples . . . . . . . . . . . . . . . . . . . . . . . 47
11 Impresso de notas com acidente . . . . . . . . . . . . . . . . . . . . 48
12 Acidentes e bequadro . . . . . . . . . . . . . . . . . . . . . . . . . . 48
13 Impresso de notas com linhas auxiliares . . . . . . . . . . . . . . . . 48
14 Impresso de notas com durao distinta . . . . . . . . . . . . . . . . 49
15 As guras rtmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
16 Impresso de acorde e bicorde . . . . . . . . . . . . . . . . . . . . . 49
17 Impresso de acordes que possuem notas em intervalo de segunda . . 50
18 Exemplos de pausas com notas . . . . . . . . . . . . . . . . . . . . . 50
19 Pausas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
20 Semnima pontuada . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
21 Grande separao de notas em um bicorde . . . . . . . . . . . . . . . 51
22 Exemplos de acidentes deslocados . . . . . . . . . . . . . . . . . . . 52
23 Exemplos de bicorde com staccato . . . . . . . . . . . . . . . . . . . 52
24 Impresso de um compasso completo . . . . . . . . . . . . . . . . . 52
25 Exemplo de uso do bequadro . . . . . . . . . . . . . . . . . . . . . . 53
26 Impresso parcial da pauta . . . . . . . . . . . . . . . . . . . . . . . 53
27 Impresso de vrios compassos iguais em trs linhas . . . . . . . . . 54
28 Exemplo de arquivo .orfeu . . . . . . . . . . . . . . . . . . . . . . . 57
29 Exemplo de arquivo tuning.ini . . . . . . . . . . . . . . . . . . . . . 58
30 Editor de tablatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
31 Exemplo de transposio . . . . . . . . . . . . . . . . . . . . . . . . 62
32 Edio da frmula de compasso . . . . . . . . . . . . . . . . . . . . 62
33 Seleo de trilha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
34 Criao/edio de trilha . . . . . . . . . . . . . . . . . . . . . . . . . 63
35 Diagrama de classe da primeira verso . . . . . . . . . . . . . . . . . 64
36 Bloco de execuo . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
37 Autmato adaptativo . . . . . . . . . . . . . . . . . . . . . . . . . . 73
38 Visualizao do autmato para 3 cordas . . . . . . . . . . . . . . . . 75
39 Algoritmo em pseudo-linguagem . . . . . . . . . . . . . . . . . . . . 76
40 Varredura pelos canais em pseudo-linguagem . . . . . . . . . . . . . 81
41 Algoritmo utilizado para ler as SimNotes . . . . . . . . . . . . . . . 83
42 Lgica do iterador em pseudo-linguagem . . . . . . . . . . . . . . . 88
LISTA DE TABELAS
Pgina
1 Critrios utilizados na deciso da linguagem de programao . . . . . 26
2 Mensagem MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3 Eventos MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4 Tabela de atalhos do teclado . . . . . . . . . . . . . . . . . . . . . . 59
5 Numerao usual de composio dodecafnica para as notas . . . . . 71
6 Notas de uma melodia exemplo . . . . . . . . . . . . . . . . . . . . . 73
7 A sada indica a ta mais adequada . . . . . . . . . . . . . . . . . . . 74
8 Exemplo de seqncia MIDI . . . . . . . . . . . . . . . . . . . . . . 87
9 Cabealho para a seqncia gerada . . . . . . . . . . . . . . . . . . . 88
12
1 Objetivo do Projeto
Criar um textitsoftware editor de msicas utilizando diferentes sistemas de
notao musical, incluindo a notao padro (partitura), e compatvel com formatos
padro de grande acervo gratuito. O projeto inclui uma converso entre formas dife-
rentes de notao musical, utilizando algoritmos adaptativos.
Tambm faz parte do escopo do projeto um seqenciador de alta delidade
que possui controle de detalhes artsticos no explcitos na notao grca utilizada.
13
2 Justicativa
Um software de edio de msicas pode focalizar o aspecto de impresso de
notao grca musical ou o aspecto de seqenciao de uma msica. As alterna-
tivas atuais ou focam somente um dos aspectos, devido ausncia de reciprocidade
completa entre a notao musical padro e a sonoridade esperada pelo compositor, ou
possuem uma interface que que deixa transparecer indevidamente informaes espec-
cas da forma interna de representao da seqncia (nmeros, principalmente).
Representaes alternativas da msica e suas converses podem ser utilizadas
para facilitar o trabalho de usurios que queiram apenas visualizar o que est presente
em uma msica e tambm daqueles que desejam escrever uma msica, e os dispensa
de um domnio amplo dos conhecimentos musicais.
A compatibilidade com os programas atualmente utilizados essencial para o
aproveitamento do contedo pblico atualmente presente na Internet.
14
3 Funcionamento bsico
O software Orfeu foi criado com o intuito de auxiliar msicos prossionais
e amadores a editar msicas. A entrada de dados do usurio d-se pelo teclado de
computador ou por instrumento MIDI, este ltimo limitado a acordes (o software no
captura o ritmo), na primeira verso. O Orfeu tambm possui a opo de importar
arquivos do GP4 (Guitar Pro 4). Quando um arquvo importado, alm de ser exibido
no editor poder tambm ser ouvido atravs da sada MIDI e/ou salvo no formato
prprio de arquivo. Tambm possvel fazer modicaes nas msicas importadas, ou
seja, estas podem ser editadas como qualquer outra msica criada no Orfeu. Depois
de editada, a msica pode ser salva em um formato de arquivo prprio ou exportada
para MIDI, ou ainda ouvida atravs da sada MIDI. A gura 1 mostra o esquema de
entradas/sadas do software Orfeu.
Figura 1: Esquema de entrada/sada
O editor possui dois modos de apresentao: o modo partitura e o modo tabla-
tura. Apenas ummodo exibido por vez e pode ser selecionado pelo usurio, de acordo
com sua preferncia. As msicas geradas em ambos os editores so armazenadas no
mesmo formato de arquivo. No caso de msicas editadas no editor de tablaturas, o ar-
quivo apenas algumas informaes a mais, comparado quele gerado atravs do editor
15
de partituras, com o objetivo de indicar a corda em que a nota dever ser tocada. O
nmero de cordas e a anao tambm ser congurados pelo usurio. O Orfeu ainda
possui converso entre os formatos partitura e tablatura. A converso de tablatura para
partitura simples, pois unvoca. Entretanto, o contrrio no verdadeiro, possvel
que uma nota possua mais de uma opo de corda para ser tocada. Nesse caso, a con-
verso adaptativa. A gura 2 mostra o esquema bsico de funcionamento do software
Orfeu.
Figura 2: Esquema bsico de funcionamento do Orfeu
16
4 Especicao
Aqui encontram-se especicados os requisitos nos quais o projeto est base-
ado. Esses requisitos foram elaborados com base nas pesquisas realizadas, que esto
descritas adiante.
4.1 Requisitos Funcionais
A seguir so explicitados os requisitos para cumprir todos os objetivos do
projeto, de maneira vivel, para o cronograma do projeto:
Incluso um editor de partituras (notao musical padro), permitindo que as
partituras criadas sejam armazenadas em disco e que esses arquivos gerados se-
jam posteriormente abertos para edio. Devido grande complexidade das ex-
cees existentes em tal notao musical, desnecessrio que todos os detalhes
sejam colocados no software, em sua primeira verso.
A representao da partitura, mesmo que no atenda a todas as excees ou
detalhes das regras de graa musical, deve ser inteligvel para os msicos, logo,
a representao da altura e do ritmo so essenciais e a altura jamais deve ser
visualmente ambgua.
Capacidade de importar ou abrir o maior nmero possvel de arquivos do Guitar
Pro. Precisamente, para a verso inicial, o sistema deve ser capaz de interpretar
os arquivos do Guitar Pro 4, no mnimo.
Incluso de um editor de tablaturas de guitarra, violo ou outro instrumento si-
milar. Esse editor deve ter capacidade de armazenamento e carregamento, assim
como o editor de partituras.
Os editores de partituras e tablaturas devero possuir equivalncia entre si, atra-
vs de uma interface que gerencia a msica. A msica pode conter partituras e
tablaturas simultaneamente e, portanto, ser necessrio um formato de armaze-
namento que contemple msicas com partituras e tablaturas. No h necessidade
de armazenar apenas parte das tablaturas ou das partituras de uma msica em
disco, apenas o todo.
Osoftware dever realizar uma converso de tablatura para partitura e vice-versa,
utilizando tcnicas adaptativas em pelo menos uma das converses.
17
Incluso uma personalizao de algum recurso sonoro no explcito graca-
mente na partitura ou tablatura. Exemplos de recursos que podem ser personali-
zados so glissandos (bends, slides), trinados, falhas rtmicas, microdinmicas e
reverberao.
Criao de uma seqncia a partir das informaes obtidas pela notao grca
e dos recursos sonoros personalizados.
Reproduo da seqncia gerada utilizando um sintetizador externo ao projeto.
A polifonia e a polirritmia devero ser suportadas pelo software.
O foco do projeto ser a interface com o usurio atravs do teclado, tornando-a
sucientemente completa, ou seja, todos os recursos devem ser acessveis por
aqueles que no possuam ou no utilizam um mouse. Este requisito existe vi-
sando que o projeto ser focalizado para decientes visuais aps o atendimento
dos requisitos mnimos.
Possibilidade de impresso da parte grca de uma msica, sem a necessidade
de uma grande personalizao.
Exportao da seqncia criada para outro formato.
4.2 Requisitos No-Funcionais
Com base nos requisitos no-fucionais, o hardware mnimo para a execuo
poder ser vericado ou estimado aps a realizao do projeto.
Compatibilidade com o sistema operacional Windows XP, utilizado em conjunto
com processadores de 32 bits Intel Pentium IV, AMD Sempron e AMD Athlon.
A mquina hospedeira dever possuir recursos sucientes para executar conco-
mitantemente algum sistema de sntese sonora por software que esteja indireta-
mente integrado ao projeto.
O desempenho do software deve ser bom o suente para reproduzir a maior
quantidade possvel de vozes sem falha de ritmo. Pelo menos duas vozes devero
ser reproduzidas sem que haja a falha.
18
A latncia entre o pedido de execuo de uma msica e o incio de sua reprodu-
o deve ser pequena. O valor mximo dessa latncia 1 segundo, pois valores
maiores podem deixar o usurio insatisfeito.
O software dever funcionar apenas como editor na ausncia de um sintetizador
externo (hardware ou software) na mquina hospedeira, ou seja, a reproduo
das seqncias no ocorrer nesse caso.
4.3 Funcionalidades desejveis
Aps o atendimento dos requisitos funcionais mnimos, h funcionalidades
desejveis para a maioria dos usurios potenciais:
Acessibilidade para decientes visuais.
As msicas visualmente escritas serem impressas diretamente.
Processamento de dados de entrada MIDI externa e converso dos mesmos para
a representao interna.
Importar arquivos de seqncia MIDI.
Exportar arquivos no formato do Guitar Pro.
Importar e exportar arquivos de outros softwares como o Sibelius, o Finale, o
Encore, o Lilypond ou o PowerTab.
Trabalhar com partituras transpostas e transpor partituras.
Anlise de harmonia e ritmo de uma msica, permitindo que na importao de
arquivos MIDI e na entrada por instrumento MIDI essas informaes no preci-
sem ser detalhadas pelo usurio.
4.4 Decises para atendimento dos requisitos
O padro MIDI deve ser adotado. A funcionalidade do software divide-se nas
seguintes partes.
Blocos do sistema (caractersticas das representaes utilizadas como notao
musical):
19
Partitura.
Tablatura.
Seqenciao (sada MIDI):
Gerao da seqncia a partir da msica editada.
Integrao com o sintetizador.
Edio (interface com o usurio):
Teclado (de computador).
Mouse (opcional).
Instrumento MIDI (opcional) - por exemplo, uma guitarra ou um teclado.
Manipulao de arquivos:
Importao/Exportao (converso de dados).
Abrir/Salvar arquivos prprios.
Manipulao e interpretao dos dados.
Converso de partitura para tablatura.
Converso de tablatura para partitura.
Transposio e anlise da harmonia e ritmo (opcional).
20
5 Projeto do ncleo
5.1 Estrutura de dados da representao musical
A seguir encontra-se uma estrutura de dados simplicada e geral para uma
msica, sem seus detalhes visuais ou sonoros. Tais detalhes esto descritos nos itens
posteriores. Encontra-se a seguir o diagrama de classes (gura 3) e uma breve explica-
o de cada classe.
Figura 3: Estrutura de dados de uma msica
Criao de uma estrutura de dados para uma msica:
Note: nota, contendo apenas a informao de altura, podendo ser obtida
na forma tonal (com enarmonias, podendo ser notas diferentes, e.g. d# e
rb so notas diferentes) ou sonora (ignorando a tonalidade, e.g. d# e rb
so a mesma nota).
RhyFig: gura rtmica, contm informaes sobre a durao relativa de
uma nota, segundo as regras de graa musical; no permite o uso de quil-
teras.
21
SimNotes: Conjunto qualquer de notas (no necessariamente ordenado),
podendo ser nulo (pausa) ou ter vrias notas (acorde). Esta uma lista
ligada de Note. Permite repetio de notas.
Tuplet: quiltera, contm apenas informaes de relatividade entre o
ritmo alterado e o ritmo no alterado.
MelRhy: conjunto ordenado de SimNotes incluindo a possibilidade de
formar quilteras, formando um bloco de melodias ritmicamente iguais (ou
um conjunto de SimNotes seguidos). Uma melodia um caso particular
simples de um MelRhy. Sua representao uma oresta em que todas as
folhas so SimNotes e os demais ns so Tuplet.
MRNode: estrutura de dados essencial para a representao da oresta
como uma lista ligada heterognea.
Pode indicar um SimNote, um Tuplet, um nal de Tuplet
(requerido quando representado como lista ligada heterognea) ou
um nal de Measure (idem).
Measure: compasso, conjunto de MelRhy, possibilitando o caso mais
simples de polirritmia, aquela interna ao compasso. Esta uma lista ligada
de MelRhy. Apesar de no necessitar ser ordenado, interessante que ele
seja, pois permite excluso por indexao e sua conseqente exibio ao
usurio (como feito por outros programas).
Sector: criao do conceito de parte de uma msica (pentagrama ou
tablatura). um conjunto ordenado (representado por lista ligada) de com-
passos (Measure).
Track: unio dos setores de uma msica em um grupo de mesmo tim-
bre. um conjunto ordenado de Sector.
Section: unio das trilhas de uma msica em um grupo do mesmo
naipe de timbres. um conjunto ordenado de Track.
Music: msica, como um conjunto de sees utilizadas na mesma.
A MRNode possui ns que representam o nal das estruturas (como o m de
compasso, por exemplo). Em particular o n nal no musicalmente necessrio, mas
esses ns representam todas as posies acessveis pelo usurio (com um cursor, por
exemplo). Em outras palavras, essa estrutura j prev que a msica dever ser editvel,
mas no prev como.
22
Por padro, as estruturas que so representveis por vetores ou listas ligadas
iniciam com um elemento. Apenas o SimNotes inicia-se vazio (que constitui uma
pausa). O Measure, por exemplo, iniciado com umSimNotes vazio. Desta forma
o MelRhy inicia-se com 2 elementos (a pausa e a nalizao do MelRhy).
5.2 Matemtica musical
Existe a necessidade de uma nova classe para a matemtica musical, que
responsvel pela medida do intervalo entre duas notas. O intervalo pode ser medido
de duas formas: na forma de uma relao meldica/harmnica entre duas notas ou por
semitons. No segundo caso, um intervalo apenas um nmero inteiro e no necessita
de uma estrutura de dados especca; j no primeiro caso, o intervalo uma composi-
o de trs partes: um nmero, uma orientao e uma qualicao. A nova classe est
descrita a seguir:
Interval: Intervalo, contm a informao do intervalo entre duas notas na
forma tonal (e.g. quarta aumentada e quinta diminuta, apesar de terem o mesmo
som, so considerados intervalos diferentes).
Para inserir o intervalo matemtica musical deve-se inserir mtodos s clas-
ses da estrutura de dados da msica que os utilizem. Neste caso os mtodos so:
Note:
Transposio simples de uma nota, perdendo a informao da tonalidade
(transposio em semitons).
Obteno do intervalo entre duas notas, tanto na forma tonal como na forma
sonora (dado em semitons).
Transposio de uma nota, de forma tonal.
MelRhy:
Clculo da durao total do MelRhy, em mltiplos de um RhyFig.
Measure:
Mtodo de vericao se todos os MelRhy esto com a durao total do
compasso exatamente preenchida.
23
6 Pesquisas Realizadas
6.1 Pesquisa com os possveis usurios envolvendo enquetes e per-
guntas simples
Diversas comunidades do Orkut foram utilizadas para a realizao desta pes-
quisa, totalizando 40 mil membros. O total de pessoas que responderam foi de cerca de
200. Alm disso, foram consultados alunos msicos da Escola Politcnica e do Con-
servatrio Beethoven. O total de pessoas que responderam pessoalmente pesquisa
foi cerca de 30.
Foi observada grande valorizao da parte de seqenciao do programa,
mostrando que os atuais usurios dos outros softwares editores (e.g. Encore, Guitar
Pro, Sibelius, Finale) continuam insatisfeitos com as possibilidades dos programas.
Muitos usurios pouco experientes na rea de msica computacional associam a de-
cincia do programa sntese e no seqenciao (muitos editores famosos incluem
um sintetizador por esse motivo), o que diculta a compreenso do que realmente
reivindicado.
Nota-se que a importncia dada ao visual existe principalmente quando a
questo escrever msica no computador. A impresso da notao grca da msica
considerada essencial para muitos, mas para outros essa impresso desnecessria.
A converso para o formato de arquivo de um software de impresso (e.g. Lilypond)
no aparentou ser problema para os usurios (no houve crticas idia).
A utilizao de mais de uma possibilidade de insero dos dados no programa
mostrou-se bastante interessante para os usurios. A existncia da notao padro foi
considerada essencial por praticamente todos os usurios. A entrada de dados com um
instrumento MIDI tambm foi considerada adequada para fornecer ao programa as no-
tas tocadas pelo usurio, mesmo no detectando o ritmo do que foi tocado, j que esse
recurso costuma estar disponvel nas ferramentas, exigindo do usurio o fornecimento
de uma grande quantidade de dados, que representam a informao em questo.
Foi considerado interessante que o software seja multiplataforma, porm foi
observado que prioritrio que se disponha do programa em funcionamento sobre
a plataforma do Windows XP. Foi nitidamente considerado essencial que o software
apresente um bom desempenho. Imaginando uma sntese de trilhas simultneas,
essencial que a mquina, executando o seqenciador, no perca o ritmo da msica que
24
estiver sendo executada, mesmo que estejam sendo usadas ao mesmo tempo todas as
trilhas disponveis (16).
6.2 Entrevistas com msicos prossionais e estudantes de msica
Ao entrevistar msicos prossionais e alunos de graduao em msica, v-
rios pontos diferentes foram observados. Foi observado, por exemplo, que h, por
parte dos compositores, um interesse de que sejam includas, na ferramenta, notaes
grcas modernas (em alguns casos, imprecisas quanto execuo, dicultando gran-
demente a sua exata seqenciao). Muitas dessas notaes seriam alternativas muito
pessoais, cuja presena poderia no ser de interesse geral em um software feito para o
grande pblico, por tratar-se de uma abrangncia excessiva. No entanto, vrias delas
mostram-se essenciais, por promoverem maior preciso em elementos originalmente
pouco precisos.
Aqui a seqenciao novamente tem destaque. Foi observado que os orna-
mentos do tipo glissando raramente so bem executados em seqncias, e que a dispo-
nibilidade de uma interface especial para tais ornamentos se mostra interessante. Para
um compositor, mostra-se importante, dessa maneira, que seja possvel obter, com a
ferramenta, uma reproduo el da sonoridade por ele imaginada.
Certos fatos com relao s possibilidades composicionais de obras modernas
foram discutidos, e a concluso foi que a reivindicao dos compositores que a fa-
cilidade de uso para recursos que ainda no so encontrados nos softwares existentes,
obrigando-os ao uso de artifcios s vezes desconfortveis para representar apropria-
damente aquilo que desejam. Por exemplo, por falta de opes, na ausncia de tais
recursos, o compositor acaba, com freqncia, sendo forado a baixar o nvel de abs-
trao usada na representao de certos detalhes de suas composies, descrevendo-as
diretamente em arquivos MIDI, com a ajuda de um software seqenciador.
H um grande interesse de um particular recurso - o de possibilitar a repre-
sentao confortvel de rtmicas complexas - a ponto de atrair para a utilizao da
ferramenta aqui proposta grande parte dos usurios de outros softwares, por se tratar
de um recurso bastante conhecido e usado atualmente por compositores modernos e,
em certos casos, usados at mesmo na msica popular, e, apesar disso, no contem-
plado ou no disponibilizado de forma confortvel nas ferramentas atualmente em uso
freqente.
25
6.3 Pesquisa de componentes de software e de partes reutilizveis
Foi encontrado um software implementado em Delphi contendo apenas uma
interface entre um teclado MIDI ou um arquivo MIDI e o sintetizador padro do com-
putador, permitindo que uma pessoa utilize o teclado MIDI com os timbres do sinte-
tizador padro do computador. Esse software utiliza um componente prprio a partir
do qual possvel basear-se para a criao de uma interface mais genrica de conexo
entre o software e a entrada MIDI, sada MIDI, entrada de arquivos MIDI e sada de
arquivos MIDI.
Diversos outros softwares (cerca de dez) foram analisados, porm poucos dis-
ponibilizavam o cdigo fonte, e a maioria no apresentava o componente a ser usado
como interface com os dispositivos de entrada e sada MIDI. Entre esses softwares,
o DGuitar, implementado em Java, um visualizador de tablaturas geradas pelo soft-
ware Guitar Pro, porm possui um cdigo-fonte extremamente difcil de entender e
apresenta poucos recursos disponveis para seus usurios.
Foi encontrado um documento, baseado na engenharia reversa do formato de
arquivo GP4, no qual explicitado o signicado de cada umdos elementos encontrados
em arquivos desse formato. Esse documento, embora tenha auxiliado na importao
de arquivos do Guitar Pro 4, contm alguns erros.
6.4 Pesquisa sobre as possibilidades de linguagens de implementa-
o
Dentre as diversas possibilidades de linguagens para a implementao do soft-
ware aqui proposto, foi preciso selecionar uma. Para isso, foramutilizados os seguintes
critrios:
(I). IDE amigvel, com debugger.
(II). Facilidade para a criao de interfaces grcas.
(III). Existncia de recursos de integrao com dispositivos MIDI.
(IV). Existncia de recursos simples para manipulao direta de arquivos.
(V). Multiplataforma (funcionamento no Microsoft Windows considerado essencial).
(VI). Desempenho.
26
(VII). Orientao a objetos e recursos adicionais (e.g. sobrecarga de operadores, pro-
priedades, multiparadigma, classes prontas de estruturas de dados bsicas como
pilhas e las, etc.).
(VIII). Conhecimento prvio de certas funcionalidades da linguagem.
(IX). Disponibilidade de recursos grcos (normalmente utilizando objetos do tipo
Canvas).
Dentre as possibilidades de linguagens, a comparao se passou entre:
C++ (Utilizando Qt ou GTK, com a IDE KDevelop)
C#.NET
Delphi/Kylix
Java
Essas foram as escolhidas, por serem linguagens que possuem a orientao
a objetos, recursos grcos, so multiplataforma, etc. Os pesos dados a cada critrio
foram escolhidos com base na escala de 1 a 5, em que 5 indica que o critrio im-
portantssimo ou essencial, e 1 indica que a importncia pequena, tendo em vista os
outros critrios. Os pesos foram estimados de acordo com sua importncia estimada no
desenvolvimento. Utilizando tabela 1 a seguir, elegeu-se a linguagem a ser utilizada:
Tabela 1: Critrios utilizados na deciso da linguagem de programao
Critrio Peso C++(Qt) C++(GIK) C#.NET Delphi/Kylix Java
I 3 7 7 7 9 8
II 2 7 4 9 10 8
III 5 6 6 7 5 8
IV 5 10 10 8 9 8
V 2 10 10 7 4 10
VI 5 8 9 5 10 4
VII 3 9 9 5 8 2
VIII 3 6 6 5 7 6
IX 5 9 9 8 10 10
Total 33 265 264 223 270 234
Os valores foram estimados com base (i) na bibliograa listada ao nal deste
relatrio, (ii) no conhecimento prvio do grupo sobre cada linguagem e (iii) no conhe-
cimento de alguns alunos da Escola Politcnica que desenvolvem programas nessas
27
linguagens e que foram consultados. Algumas justicativas dadas para cada nota, em
cada critrio:
(I). A interface KDevelop do C++ possui debugger e est comparvel s demais, po-
rm incorpora alguns erros, o que cria diculdades aos seus usurios, enquanto
que a IDE utilizada pelo Java (considerando o uso do Netbeans ou do Eclipse)
mostra-se de maior qualidade em certos aspectos, juntamente com a interface do
Delphi. O total de dados pedidos pela IDE de cada possibilidade foi considerado
no critrio, e a qualidade das mensagens de erro do debugger tambm.
(II). Para o caso do Qt, h um anexo ao KDevelop e um software prprio (Qt De-
signer) para auxiliar o desenvolvimento de uma GUI, ambos de utilizao mais
complexa que os equivalentes do C#.NET, do Java e do Delphi/Kylix. O nmero
de informaes que se necessita conhecer, a separao entre o desenvolvimento
esttico da GUI e o desenvolvimento do seu cdigo subjacente foi considerada
neste critrio.
(III). A existncia nativa de componentes voltados ao desenvolvimento da interface
grca foi considerada importante, porm necessrio que estejam disponveis
exemplos utilizando tais componentes ou componentes externos, para que pos-
sam ser utilizados no projeto. Desta forma, a disponibilidade de exemplos, en-
contrados durante a pesquisa de componentes, assim como a existncia de partes
reutilizveis, acessveis e disponveis para uso, teve grande inuncia nas notas
dadas neste critrio.
(IV). Como a presena de componentes nativos voltados ao desenvolvimento da in-
terface grca (GUI) est presente em todas as linguagens, foi considerada a
quantidade de dados pedida por cada linguagem para as mesmas informaes, e
como essa informao pode ser tratada, dividindo-a em tokens.
(V). Neste item foi identicado como de alta importncia o nmero de alteraes ne-
cessrias no cdigo para que se possa port-lo para outro sistema, bem como o
nmero de sistemas em que possvel que o projeto funcione. Aqui conside-
rado que j existe um requisito quanto a isso, a exigncia de que, no mnimo, o
projeto funcione sobre o sistema operacional Windows da Microsoft.
(VI). Pelo fato de C++ e Delphi no seremlinguagens comcdigo-objeto interpretado,
o desempenho mostra-se melhor que o das linguagens interpretadas. H a possi-
bilidade de gerar programas executveis a partir dos arquivos do C#.NET, porm
tais cdigos no se mostram to ecientes quanto os do C++ ou do Delphi.
28
(VII). O fato de uma linguagem obrigar a existncia de um mtodo principal dentro
de uma classe, em lugar de uma funo que gere as suas primeiras instncias,
foi considerado como um fator esttico e lgico negativo, apesar de pouco im-
portante neste item. Recursos adicionais como sobrecarga de operadores e pro-
priedades, que permitem cdigos mais fceis de serem compreendidos, foram
considerados importantes. Linguagens que permitem a mistura de paradigmas
mostram-se mais adequadas ao projeto por possurem estruturas bsicas otimi-
zadas, maior desempenho e simplicao de partes atpicas de cdigo, para a
orientao a objetos. A existncia de estruturas de dados bsicas no foi consi-
derada, pois todas as linguagens em estudo apresentam tais estruturas.
(VIII). O conhecimento prprio de cada linguagem, por parte dos desenvolvedores, foi
considerado essencial para evitar atrasos no cronograma. O conhecimento de
como utilizar os recursos grcos (item a seguir), da maneira de criar a inter-
face grca, e a manipulao de arquivos mostraram-se os mais inuentes nesta
estimativa.
(IX). Java e Delphi/Kylix comportam-se quase da mesma forma quanto aos objetos
Canvas, segundo o que foi visto em exemplos na pesquisa de partes reutili-
zveis. C#.NET, conforme descrito em seu arquivo de ajuda, procura fazer o
mesmo, porm de uma forma diferente, e exigindo o fornecimento de mais da-
dos para as mesmas informaes. C++, com GTK e com Qt, tem esse aspecto
bastante documentado, apesar apresentar menor clareza que os objetos usados
em Java e em Delphi/Kylix.
29
7 Computao Grca
7.1 Pesquisa sobre computao grca
A necessidade de criao de uma interface com o usurio para este projeto
exige conhecimentos apurados de computao grca. Representar uma partitura com
todos os seus possveis detalhes e suas personalizaes em uma tela possui complexi-
dade similar construo de um software de edio de imagens vetoriais. Tal com-
plexidade inviabiliza a criao do software, logo alguma restrio deve ser feita, e por
esse motivo o requisito sobre a exibio das partituras no deve exigir um excesso de
detalhes.
Entre as possibilidades, esto:
Grcos matriciais
Imagens xas: sem ampliaes ou redues (zoom).
Vrias imagens: ampliaes ou redues de escala xa.
Imagem xa com stretch (redimensionamento de imagens matriciais com
estimativas de cor): ampliaes ou redues personalizadas com distoro.
Vrias imagens com stretch: ampliaes ou redues personalizadas com
distoro menos acentuada nas proximidades de algum conjunto de ima-
gens.
Grcos vetoriais
Impresso
Pr-renderizao: Sprites (jargo de desenvolvimento de jogos) ou
imagens rasterizadas. Os sprites, normalmente, contm animao en-
volvida mas no h necessidade de animao neste projeto.
Reconstruo completa da tela a cada atualizao.
Origem dos dados
Fonte com estrutura prpria denida para o sistema.
Fonte tpica do Windows.
Primitivas de desenho.
30
Essas possibilidades ainda podem entrar junto com o conceito de camadas
(layers), tipicamente usado em programas de tratamento matricial de imagens e em
jogos, normalmente para separar os fundos dos sprites. Essa tcnica pode ser usada
tanto em grcos matriciais como em grcos vetoriais.
Quanto movimentao da tela por barras de rolagem existem pelo menos 3
possibilidades que podem ser estudadas:
Tela virtual completa (tcnica usada em diversos jogos).
Conjunto de telas virtuais (tcnica usada no Google Maps, que consiste emvrias
telas menores que a tela visvel e justapostas lado a lado, renderizadas individu-
almente).
Tentativa de reconstruo de todos os elementos, dentro ou fora da tela (tcnica
usada em alguns jogos).
Para a impresso, existem vrias possibilidades de objetos hspedes de um
Canvas que podem ser utilizados, entre eles os objetos Form, Image e PaintBox,
todos da API do Windows. Dos citados, o que apresenta melhor desempenho o
PaintBox.
Um ensaio de interface foi realizado procurando testar essas diversas solues
grcas que podem ser usadas no projeto, buscando conhecer a melhor. Neste ensaio
foram utilizados:
Criao das estruturas de dados:
Sprite: gura bidimensional pr-renderizada (rasterizada), que no software
em questo no necessrio que contenha animao.
Sprites devem conter um mtodo de impresso em um Canvas de
parmetro, recebendo coordenadas relativas e utilizando-as.
Layer: camada.
Mtodo virtual de impresso
Deve ter herdeiros:
Foreground: conjunto de sprites. A impresso aqui deve cha-
mar a impresso dos sprites, passando as coordenadas relativas.
Cursor: Anlogo ao Foreground, mas possui outra ordem de im-
presso.
31
LinesBackground: fundo como um conjunto de linhas hori-
zontais. A impresso aqui diretamente feita.
ImgBackground: fundo como uma imagem colocada lado a
lado verticalmente, com uma cor de fundo.
Screen: tela, conjunto de layers. Os layers ImgBackground so im-
pressos primeiro, depois os layers LinesBackground. Os seguintes
itens devero ser observados.
Mtodo de insero de um novo layer na ordem correta.
Construtor deve inserir o primeiro ImgBackground.
Apenas uma instncia de Screen deve ser criada, tendo como pa-
rmetro um objeto Canvas que ser o destino da impresso da tela
sempre.
Mtodo de impresso que chama a impresso dos layers, passando as
coordenadas relativas (rebuild).
Mtodo de atualizao sem nova leitura dos dados originais (refresh).
Mtodo de atualizao das dimenses (resize), ligada ao evento de mo-
dicao do tamanho do objeto que possui o Canvas de impresso.
Insero de scrolling.
Barras de rolagem na interface grca.
Mtodos de atualizao da posio relativa na Screen
Ainda no h um esclarecimento dos resultados, porm o uso de tcnicas de
otimizao nos grcos mostra-se necessrio.
7.2 Atributos visuais reetidos na estrutura de dados
As informaes aqui colocadas so algumas idias tidas at o momento da
forma com que os grcos seriam utilizados pela interface grca.
Sector:
adicionado LinesBackground como (neste caso) uma tablatura va-
zia, atualizando-a em sua construo e pelo redimensionamento da tela.
adicionado Foreground.
32
Mtodo para gerar um sprite contendo a falsa clave de uma tablatura, colo-
cando-a em seu layer Foreground.
SimNotes:
Um sprite das notas ou da pausa em tablatura (apenas os nmeros).
Measure:
Ordenao de SimNotes, essencial quando h simultaneidade de vozes
(MelRhy). A ordenao deve ser feita sempre na insero de uma nota,
fornecendo um nmero de ordem para todos os SimNotes, nmero esse
relativo ao compasso. Nmeros iguais representaro notas tocadas simul-
taneamente.
Mtodo de impresso de todas as suas notas, com coordenadas relativas.
Apenas faz a chamada do mtodo de impresso de cada SimNotes, pas-
sando as coordenadas internas ao compasso corretamente.
adicionado um mtodo para gerar sprite de sua frmula de compasso.
BarLine: nova estrutura para armazenar a barra de nalizao de um com-
passo.
Criao de mtodo para gerar um sprite de sada com uma barra de nal de
compasso.
Measure passa a ter um BarLine
Omtodo de impresso do Measure passa a receber como parmetro dois ags,
um que indica se a frmula de compasso deve ser impressa e outro que indica se
a barra de compasso deve ser impressa.
Classe SimNotes recebe mtodo que gera sprites de ritmo, simplicado.
Note passa a ter atributos e mtodos especcos de tablatura (corda, casa, etc.),
para permitir a personalizao.
Generalizao na criao dos sprites e fundos relativos a tablatura.
Linhas de tablatura em Sector.
Falsa clave de tablatura em Sector.
Sprites dos nmeros nos SimNotes.
33
Ferramenta visual que permita tal personalizao (janela), proibindo casos dege-
nerados como a ausncia de cordas. As cordas sempre devem estar anadas em
uma das 12 notas da escala cromtica (temperada).
SimNotes:
Atributos grcos (como inverso de haste e deslocamento horizontal).
Um sprite das notas ou da pausa em partitura (bandeirolas sempre desuni-
das e sempre para cima).
7.3 Graphics32
Aps o estudo entre as possibilidades de utilizao das diferentes ferramen-
tas bsicas, um estudo foi feito a m de vericar qual seria a melhor alternativa para
a confecco da parte grca do projeto. Qualquer das alternativas pesquisadas con-
sumiria um intervalo de tempo considervel, tornando difcil o trmino do projeto no
prazo estipulado, caso fosse necessrio construir toda a biblioteca grca.
Entretanto, foi constatada a existncia da biblioteca Graphics32, desenvolvida
principalmente para Delphi e Kylix, que otimizada para imagens de 32 bits. Para o
projeto do editor musical, a performance um fator relevante, pois o editor precisa
permitir um grande nmero de smbolos musicais e executar a msica, atravs da sada
MIDI.
A biblioteca Graphics32 fornece uma forma fcil de trabalhar com layers,
implementa o recurso da transparncia, pois as duas extenses de arquivo com que
trabalha (bmp e jpg) no permitem que a imagem tenha fundo transparente - o que
necessrio para o projeto em questo. A possibilidade de trabalhar com layers tambm
auxilia na confeco da interface grca segundo o modelo adotado.
A biblioteca Graphics32 mostrou-se poderosa o suciente para concluir a pes-
quisa de computao grca e anulou o que foi pensado sobre os atributos visuais re-
etidos na estrutura de dados. Isso foi extremamente vantajoso, pois a interface grca
no cou dependente da estrutura de dados, o que torna os mdulos do software bem
denidos.
34
7.4 Autmatos Adaptativos
A seguir ser feita a anlise dos autmatos adaptativos como ferramenta com-
plementar para o desenvolvimento do projeto.
Autmatos adaptativos so dispositivos mais poderosos que os autmatos de
pilha estruturados pela sua capacidade adaptativa. As transies de um autmato adap-
tativo podem ser de dois tipos:
Transies normais, que so similares s transies de um autmato de pilha
estruturado.
Transies contendo aes adaptativas, responsveis pela mudana de congu-
rao do autmato.
O autmato inicia-se com uma congurao, e, dependendo das transies
executadas, modicado at que chegue a uma congurao nal, quando a cadeia
de entrada inteiramente consumida ou at que no haja nenhuma transio possvel.
Se a cadeia tiver sido inteiramente consumida e o autmato terminar em um estado de
aceitao com a pilha vazia, ento signica que a cadeia foi aceita. Caso contrrio, a
cadeia no foi aceita.
As aes adaptativas podem ser de trs tipos:
Inspeo: verica o valor de uma varivel.
Insero: adiciona uma transio ao autmato. Neste caso, se a transio a ser
adicionada ocasionar a mudana para um estado no presente no autmato, o
mesmo criado.
Remoo: remove uma transio do autmato. Neste caso, se a transio a ser
removida tornar um estado inalcanvel, o mesmo removido.
As aes adaptativas podem ocorrer em dois momentos:
Antes da transio: so as aes adaptativas anteriores. Devem ser executadas
antes de ocorrer a mudana de estado. Neste caso, se a ao remover a transio
a ser executada, o autmato permanece no estado presente e uma nova transio
deve ser executada.
35
Depois da transio: so as aes adaptativas posteriores. Devem ser executadas
depois da mudana de estado. Neste caso, se a transio for removida pela ao
adaptativa o autmato ter mudado de estado.
36
8 MIDI - Musical Instrument Digital Interface
8.1 Resumo da arquitetura do MIDI e sua conexo com o projeto
O MIDI um padro de transmisso serial de dados, que permite a troca de
informaes entre instrumentos e equipamentos de aplicao musical. A gura 2 mos-
tra um cabo MIDI fmea. Resumidamente o padro MIDI envolve um seqenciador
e um sintetizador e a comunicao atravs do mesmo pode ser observada atravs das
guras 4 e 5.
Figura 4: Cabo MIDI fmea
Figura 5: Arquitetura: comunicao MIDI
Tanto o seqenciador quanto o sintetizador podem ser hardware ou software.
comum encontrar placas de som com sintetizadores MIDI por hardware, porm
como nem todo usurio possui esse recurso. O MS Windows possui um sintetizador
MIDI por software, possibilitando que qualquer usurio do mesmo possa utilizar o
computador para sntese de sons a partir de seqncias MIDI.
O MIDI no precisa ser utilizado apenas para enviar dados a um sintetiza-
dor, esse apenas o caso mais comum. O MIDI tambm pode ser utilizado por um
seqenciador para controlar um outro seqenciador (por exemplo, um pedal MIDI em
um teclado MIDI), e tambm pode ser utilizado em um dispositivo de armazenamento
(por exemplo, um software tracker, isto , um software de mixagem de sons arma-
zenados em seqncias MIDI ao invs de formas de ondas). O mais importante a ser
notado que o MIDI um protocolo unidirecional. A gura 6 mostra exemplos de
comunicao MIDI.
37
Figura 6: Outros exemplos da comunicao MIDI
8.2 Mensagens MIDI
O protocolo assncrono e funciona da seguinte forma: dado um seqenci-
ador (como um teclado MIDI), enviar uma mensagem no instante em que a tecla
pressionada, e o objetivo que o sintetizador faa com que a nota relativa a essa tecla
soe sem que o usurio perceba que houve um atraso na gerao do som, ou seja, a
latncia deve ser mnima. Essas mensagens so, portanto, tratadas na hora em que so
recebidas, e so de 3 tipos: Eventos MIDI, eventos SysEx e meta-eventos.
Os eventos SysEx (System Exclusive) so particulares de cada dispositivo
MIDI e no sero utilizados nesse projeto. Os meta-eventos so mensagens existen-
tes apenas em arquivos MIDI, para incluir informaes que no so transferidas pelo
protocolo (e.g. informaes ritmicas, nal de uma trilha, nome de uma trilha, nome
do autor da msica, letra da msica, etc.). Apenas os eventos MIDI no podem ser
grandes, tendo no mximo o tamanho de 3 bytes, sendo 1 byte de status e 2 bytes de
parmetros. O primeiro byte decomposto em seus 2 nibbles, sendo que o primeiro
indica o tipo de evento MIDI sendo enviado e o segundo indica o canal MIDI tratado
naquele instante. A tabela 2 ilustra esse caso.
Tabela 2: Mensagem MIDI
Status Parmetros
Tipo Canal Parmetro 1 Parmetro 2
7654 3210 76543210 76543210
Os parmetros sempre devem ser menores que 128, ou seja, seu primeiro bit
deve ser sempre 0. Dessa forma quando o byte de status se repetir, ser necessrio
apenas o reenvio dos parmetros (pois o byte de status sempre maior que 127. Basta
vericar o primeiro bit para descobrir se uma mensagem nova ou se so parmetros
novos para o status antigo). Os tipos de evento MIDI so mostrados atravs da tabela
38
3, a seguir. Os eventos contidos nessa tabela esto descritos posteriormente.
Tabela 3: Eventos MIDI
Tipo Evento Cdigo Parmetro 1 Parmetro 2 Evento
Note Off 0x8 nmero da nota(*) dinmica (I)
Note On 0x9 nmero da nota dinmica (II)
Note Aftertouch 0xA nmero da nota valor (III)
Controller 0xB nmero do controle valor (IV)
Program Change 0xC nmero do programa *no utilizado* (V)
Channel Aftertouch 0xD valor *no utilizado* (VI)
Pitch Bend 0xE valor (LSB) valor (MSB) (VII)
(I). Faz a nota parar de soar. Neste caso a dinmica se refere velocidade com a
qual a tecla foi solta. Isso pode inuenciar efeitos como o do cravo.
(II). Faz com que a nota comece a soar.
(III). Altera a condio da nota (aps soar). Isso pode ser uma mudana de vibrato ou
de dinmica, por exemplo.
(IV). Modica parmetros do som, como o panorama, a reverberao, pedal de sus-
tain, etc. Existe uma tabela relacionando o nmeros de controle de cada um
desses parmetros.
(V). Modica o timbre selecionado.
(VI). Aplica a alterao da condio da nota a todas as notas do canal que estiverem
soando.
(VII). Se aplica a todas as notas do canal atual e serve para fazer um glissando nota
com alta preciso: de 0 a 16383. A faixa do glissando depende da congurao
do sintetizador. preciso lembrar que os 2 parmetros possuem 7 bits.
(*) A nota de valor 60 o d central, 61 o d# central e assim por diante, de
0 a 127.
Alm disso, existem no formato de arquivo MIDI infomaes de durao das
notas, de trilhas e cabealhos que inexistem no protocolo MIDI. Essas mensagens, na
forma de meta-eventos, tm durao arbitrria e que no sero explicitadas neste item.
39
8.3 API do Windows e componentes MIDI
A API do Windows mostrou-se bastante completa, porm bastante compli-
cada para que pessoas inexperientes a utilizem diretamente. Foi necessrio ver o fun-
cionamento da mesma, pois nenhum componente de MIDI I/O respondia satisfatoria-
mente ao programa. Para o software em questo, preciso algo que possua as seguintes
caractersticas:
Gratuito
Sem a exigncia da abertura do cdigo segundo normas como a da GPL, para
no comprometer o futuro do projeto (isso evitaria o uso futuro de componentes
do projeto, por exemplo).
Para uso com o Delphi.
Interface com a sada MIDI existente no sistema operacional.
(Opcional) Compatibilidade com o Kylix, para possibilitar a existncia de uma
verso para Linux do projeto.
(Opcional) Interface com a entrada MIDI.
Como nenhum pacote de componentes de software encontrado atendeu ade-
quadamente a esses requisitos, a busca se deu por componentes que tivessem a maior
parte desses itens para que pudesse ser usado na criao de um novo pacote de com-
ponente interno ao projeto. O pacote encontrado foi o RtMIDI, para C++ e os com-
ponentes internos do projeto PianoEx, para Delphi. O RtMIDI utiliza strings como
mensagens, o que pode causar problemas com o caractere nulo, e no h um temporiza-
dor (ou seja, somente pode ser utilizado de interface com o I/O MIDI, no fornecendo
nenhum servio adicional). O PianoEx, na verso encontrada, possui com um cdigo
ruim, com vrias informaes irrelevantes. Apresentou erro na execuo de certas m-
sicas. Seu temporizador baseado em mensagens (cujo problema ser visto a seguir).
Apesar de serem inadequados, esses dois softwares auxiliaram, junto com o MSDN, a
criao de um novo pacote de componentes para a interface com o MIDI.
(I). Arquitetura do Windows.
O Windows tem uma arquitetura baseada em mensagens, ou seja, uma aplicao
se comunica com outra e essas se comunicam com o sistema operacional atravs
40
de mensagens. Simplicadamente cada aplicao tem sua la de mensagens e
quando dado a ela o uso do processador, essas mensagens so lidas. Um exem-
plo de mensagem o clique de um mouse: uma mensagem enviada aplicao
que monitorava o mouse avisando que houve um clique em determinada posi-
o, para quea mesma possa ento executar a ao desse clique. Essa arquitetura
deve ser evitada em aplicaes que exigem tempo real ou so muito sensveis
a variaes de latncia, pois uma mensagem leva um tempo aleatrio para ser
tratada, j que ela est em uma la e no possvel saber em que momento a
aplicao vericar as mensagens dessa la.
Para aplicaes que exigem maior velocidade, existe uma alternativa, o uso de
rotinas de callback. Essas rotinas so chamadas diretamente pelo sistema ope-
racional quando ocorre um determinado evento. Essa funcionalidade essencial
em certas aplicaes de tempo crtico.
Adicionalmente diversas questes sobre o funcionamento do sistema operaci-
onal em questo precisaram ser vistas para auxiliar o desenvolvimento, como
a padronizao dos nomes, alguns arquivos importantes, conceito de Handle,
HWND e HMIDIOUT, etc., mas nada foi to relevante quanto esse item abordado
acima.
(II). Temporizador Multimdia (Multimedia Timer).
No caso do projeto em questo, a utilizao do objeto usual de temporizao,
incluso no Delphi, no vivel, pois ele trabalha com mensagens e o projeto
utiliza MIDI, um recurso multimdia que exige a menor variao de latncia
possvel (60ms considerado um valor extremamente alto de latncia). Isso
torna necessrio o uso de um temporizador que utilize o callback ao invs de
mensagens.
Dessa forma, um temporizador multimdia precisou ser construdo. A API do
Windows possui um recurso de criao de temporizadores desse tipo, porm no
possvel parar um temporizador e continuar depois, ou seja, o componente no
Delphi deve criar um novo temporizador do Windows a cada chamada.
Pelo menos uma verso do Windows no possui um ag na criao do timer que
probe que o mesmo dispare outra chamada funo callback (TimerProc)
aps a destruio do timer (ag TIME_KILL_SYNCHRONOUS), o que impe
que todo objeto Timer deve ser desativado antes do incio da destruio dos
componentes do programa, a m de evitar problemas com o acesso da memria
que j foi liberada. Adicionalmente o Timer no deve ser ativado durante a
41
criao antes do carregamento do programa, para evitar que haja algum acesso
memria no alocada.
(III). Sada MIDI.
O Windows fornece rotinas bsicas para o acesso aos dispositivos de sada MIDI
(que quase sempre so sintetizadores) que permite:
Obter o nmero de dispositivos de sada MIDI existentes.
Obter informaes especcas de cada um dos dispositivos.
Abrir e fechar uma conexo com o dispositivo.
Desativar todas as notas que foram enviadas.
Enviar uma mensagem de 32 bits (o byte menos signicativo ser enviado
primeiro).
Interceptar mensagens sendo enviadas ao dispositivo (por callback).
Ler e alterar o volume sonoro.
Envio de mensagens longas.
O RtMIDI fundiu os mtodos de envio de mensagens longas e curtas em um s,
e inseriu tratamento de erros, porm no est livre ainda das mensagens MIDI,
sendo ainda necessrio o conhecimento dos opcodes do MIDI e da sintaxe do
mesmo.
Todo esse esquema vinculado a um HMIDIOUT, tipo de Handle especco
para esse dispositivo. Para colocar prioridade em tempo real, necessrio que
componente de execuo faa isso com o Handle (HWND) da janela (visual ou
no) da execuo do MIDI, usando um temporizador multimdia.
42
9 Pequenos programas para testar tecnologias
9.1 MIDIOutTest
Trata-se de um programa simples que implementa um pequeno teclado na
tela do computador a ser acionado com o auxlio de um mouse, funcionando como
se fosse um teclado de um piano. Utiliza a primeira porta MIDI do computador, no
timbre inicial (geralmente o timbre de piano). O objetivo desse programa assegurar o
funcionamento do componente TMIDIOut de maneira simples e interativa. A gura
7 mostra a interface construda para possibilitar o teste.
Figura 7: Interface construda para testes com a interface MIDI
Alm do teste do TMIDIOutTest, houve outro teste, incluindo alm desse
componente o TMMTimer, ou seja, um teste que inclui variao visual e sonora
simultaneamente. A gura 8 mostra a paleta de componentes reutilizveis do Orfeu.
Figura 8: Paleta de componentes reutilizveis do Orfeu
43
9.2 Teste com arquivos XML
Para a manipulao de arquivos XML, foi feito um programa simples, em que
um arquivo XML aberto e so removidos os espaos em branco do mesmo. A gura
9 mostra a tela de execuo e o resultado. Aps o teste, foram incorporadas as funes
de abrir/salvar arquivo da interface com o usurio.
Figura 9: Teste de abertura de arquivo XML
44
10 Detalhamento
10.1 Componentes (interface MIDI)
Um pacote de componentes do projeto, responsvel pela interface MIDI, foi
iniciado emOrfeuComponents.dpk, registrando seus componentes na aba Orfeu
do Delphi. Esse pacote de uso exclusivo para o Windows, porm h intenes de
torn-lo compatvel com o Linux no futuro.
(I). MMTimer.pas - Componente TMMTimer
um componente que implementa um temporizador multimdia a partir da API
do Windows. Sua funcionalidade bastante similar ao do Timer do Delphi para
o usurio. um herdeiro direto de TComponent, sem mtodos adicionais, e
que publica as seguintes propriedades:
Enabled: Dene se o temporizador est ativado ou no. Deve ser mudado
para falso antes de iniciar a destruio dos componentes do programa e
deve ser iniciado como falso.
Interval: Perodo do temporizador em que feita a chamada do proce-
dimento associado ao evento OnTimer.
Resolution: Dene a qualidade do temporizador. Quanto menor, me-
lhor a qualidade.
OnTimer: Evento que associa ao mesmo um procedimento que ser exe-
cutado pelo temporizador periodicamente.
(II). MIDI.pas
Este arquivo no inclui componente registrado. Seu contedo inclui:
Constantes dos tipos de eventos MIDI: MIDI_ETYPE_
*
(e.g. MIDI_ETYPE_NOTEOFF).
Constantes dos nmeros de controle do evento de controle MIDI: mc
*
(e.g
mcSustain, mcPanMSB).
Classe abstrata para a entrada e sada MIDI:
Classe TMIDIIO
Esta classe publica a propriedades:
45
Connected (somente leitura): indica se o componente est ou
no conectado ao dispositivo. As classes herdeiras podem editar
o valor de _Connected, que o local de armazenamento dessa
propriedade (varivel protegida, propriedade pblica somente de
leitura).
PortNumber: nmero de identicao do dispositivo como qual
ele se conecta; varia de 0 at nmero_de_dispositivos - 1,
separadamente para a entrada MIDI e para a sada MIDI. O valor
inicial dePortNumber xo (DEFAULT_PORT_NUMBER = 0)
e sempre os objetos TMIDIIO so iniciados desconectados. Ao
alterar o PortNumber quando o componente estiver conectado,
ele automaticamente reconectar nova porta MIDI. Na destrui-
o, o objeto MIDI desconectado caso ele ainda haja conexo,
antes de prosseguir, logo, isso no precisa ser vericado. Adici-
onalmente essa classe abstrata impe s classes herdeiras os se-
guintes mtodos:
OpenPort: abertura em PortNumber a conexo com o dis-
positivo.
ClosePort: fechamento da conexo com o dispositivo em
PortNumber.
GetPortCount: obtm o nmero de dispositivos MIDI (de
entrada ou de sada) existentes no sistema.
GetPortName: obtmumnome para o dispositivo MIDI apon-
tado pelo PortNumber. Esse nome serve apenas para o usu-
rio ter alguma informao sobre o dispositivo ao selecion-lo
em uma lista.
(III). MIDIOut.pas - Componente TMIDIOut
Este componente implementa a interface com a sada MIDI de um computador.
Essa interface permite que o usurio no tenha conhecimento da API do Win-
dows, e tambm permite, at certo ponto, que o mesmo desconhea algumas
informaes sobre o protocolo MIDI. Trata-se de uma classe herdeira do com-
ponente TMIDIIO, porm neste caso registrado, implementando as rotinas
abstratas e, alm delas, implementando as seguintes rotinas:
SendMessage : So 3 variantes de um procedimento de envio de men-
sagens curtas. O usurio deve evitar o uso dessas rotinas, pois as rotinas
46
a seguir substituem estas (os nomes indicam o tipo de mensagem que
enviado, e os parmetros j levam o nome de seu contedo):
NoteOn;
NoteOff;
NoteAftertouch;
ControlChange;
ProgramChange;
ChannelAftertouch;
PitchBend - Esta rotina j separa o sinal nos seus 14 bits.
(IV). Componente TMIDIIn
Assim como o componente TMIDIOut, o TMIDIIn herda o bsico de um dis-
positivo de entrada e sada da classe TMIDIIO. Praticamente no apresenta re-
cursos adicionais por no necessitar dos mesmos. Todo o seu funcionamento
anlogo ao TMIDIOut, a menos do fato de que o TMIDIIn recebe eventos e
capaz de executar rotinas dessa forma.
Na API do Windows foi vericado que a entrada MIDI deve ter sua varredura por
notas iniciada e terminada, alm da conexo efetuada com o dispositivo. Esse
fato gerou alguns problemas de desenvolvimento.
Afuno de callback do evento MIDI recebido gera umevento OnReceive que
pode ser tratado diretamente ao usar o componente. Esse evento j trs consigo
a mensagem MIDI recebida descompactada em 4 partes: tipo do efeito, canal,
parmetro MIDI 1, parmetro MIDI 2.
10.2 O editor de partituras
O primeiro teste foi atravs de uma interface muito simples em que alguns
smbolos musicais so colocados na tela, emdiferentes posies e emdiferentes layers.
O objetivo deste teste era colocar diferentes layers na tela, a explorao do recurso de
transparncia, do vetor de bitmaps e a familiarizao com alguns dos outros compo-
nentes bsicos do Delphi.
Aps o teste com a insero de diversos layers em uma mesma imagem,
vericou-se que era vantajoso utilizar um layer para cada smbolo musical. Essa van-
tagem existe pelo fato de a biblioteca utilizada Graphics32 suportar um nmero de
47
layers grande o suciente que garante o funcionamento desejvel do aplicativo. De-
vido a isso, a insero de notas e smbolos e sua localizao facilitada.
O formato das imagens dispostas na interface grca o bitmap pelo fato
de a biblioteca Graphics32 possuir vrias facilidades com relao a imagens nesse
formato alm de facilitar a insero de novos smbolos. Os bitmaps utilizados no
so redimensionados ao serem so apresentados na tela para evitar operaes com os
mesmos e, com isso, melhorar o desempenho do aplicativo.
Dessa forma, cada smbolo que deve ser disposto no pentagrama disposto
em um layer, seja o smbolo uma nota, um acidente, o smbolo da clave ou o indicativo
de staccato. Apenas os layers de fundo, que representam o pentagrama so opacas.
Todos os outros layers possuem o fundo transparente.
Foi prefervel utilizar um bitmap para cada nota ao invs de utilizar guras
bsicas como bandeirolas e hastes para facilitar a insero e remoo de notas em um
SimNotes. O SimNotes um conjunto de notas simultneas. Pode ser um acorde
(trs ou mais notas), bicorde (duas notas), uma nota ou uma pausa. As operaes de
insero e remoo no comprometem o desempenho. Como as imagens das guras
rtmicas so carregadas previamente (e no no momento em que cada gura instanci-
ada), esperado um aumento de performance em relao ao carregamento das imagens
durante a instanciao.
O desenvolvimento da interface foi feito baseado na estrutura de dados, com
implementao bottom up. Primeiramente foi feita a insero de uma nica nota no
local correto do pentagrama, com a gura rtmica xada. No pentagrama, foi xada a
clave de sol e a escala de d maior, embora ainda no sejam mostradas na tela . Nessa
etapa, no foi levada em conta a durao do compasso nem a possibilidade de acordes
ou bicordes. A durao da nota (gura rtmica) tambm foi cada. Nesse instante
foi decidido o tamanho do pentagrama e o dos bitmaps, assim como outras variveis
grcas importantes. A gura 10 mostra duas notas impressas.
Figura 10: Impresso de notas simples
48
Aps a impresso da nota na posio correta, foi impressa uma nota simples,
contendo acidente, que deve tambm ser impresso. A gura 11 mostra um exemplo de
nota com acidente. A gura 12 mostra todos os acidentes, com seus respectivos nomes
e o bequadro, smbolo utilizado para anular acidentes.
Figura 11: Impresso de notas com acidente
Figura 12: Acidentes e bequadro
Uma regra importante da notao musical o fato que caso a nota ultrapasse
os limites do pentagrama, linhas auxiliares devero ser desenhadas. A gura 13 mostra
exemplos de situao que requer a impresso de linhas auxiliares.
Figura 13: Impresso de notas com linhas auxiliares
Aps a impresso correta de uma nota na interface, o passo seguinte consistiu
no controle da gura rtmica correspondente, pois at as etapas anteriores a gura
rtmica estava xa. A gura rtmica representa o tempo relativo de durao da nota. A
gura 14 apresenta notas de diferentes guras rtmicas. As guras rtmicas suportadas
pelo Orfeu incluem desde a quartifusa at a mxima e podem estar dispostas com a
haste para cima ou para baixo. A gura 15 apresenta todas as guras rtmicas.
49
Figura 14: Impresso de notas com durao distinta
Figura 15: As guras rtmicas
O software Orfeu tem suporte para acordes e bicordes. A etapa seguinte con-
sistiu na insero de vrias notas em um SimNotes. A gura 16 apresenta exemplos
de SimNotes.
Figura 16: Impresso de acorde e bicorde
Uma caracterstica importante da notao musical em partitura que na im-
presso de SimNotes, caso haja notas com intervalo de segunda, uma delas dever ter
a cabea disposta para a esquerda, enquanto que a outra estar disposta para a direita.
Isso ocorre para que no haja sobreposio das mesmas. A gura 17 mostra exemplos
desse caso particular.
Na edio de msicas, comum que haja intervalos de tempo em que ne-
nhuma nota tocada. Esses intervalos so chamados de pausas. O smbolo da pausa
50
Figura 17: Impresso de acordes que possuem notas em intervalo de segunda
est diretamente ligado ao seu tempo de durao. A gura 18 mostra um fragmento de
msica em que h SimNotes e pausas. A primeira pausa corresponde a uma pausa
de colcheia e a segunda, de semnima. A gura 19 as pausas das diferentes guras
rtmicas.
Figura 18: Exemplos de pausas com notas
Figura 19: Pausas
Um recurso existente de edio musical quando ocorre a presena de uma
nota de uma certa durao e de mais metade dessa durao. So as chamadas notas
pontuadas. Cada ponto representa a durao de metade do tempo da nota, bicorde
ou acorde imediatamente anterior. Ou seja, caso a semnima da gura 20 esteja acom-
panhada de dois pontos, essa nota ter a durao da semnima somada durao de
colcheia (primeiro ponto) somada durao de semicolcheia (segundo ponto). O soft-
ware no limita a quantidade de pontos.
51
Figura 20: Semnima pontuada
Aps o tratamento dado a esses pontos, foi necessrio incluir e vericao da
unio da haste, pois dependendo da distncia entre as notas do acorde ou bicorde, as
mesmas podem car separadas. Isso ocorre devido utilizao da gura da semnima
para as notas mais graves (quando a haste est disposta para cima) ou mais agudas
(quando a haste est disposta para baixo), se a nota tiver durao inferior da sem-
nima. Caso contrrio, a gura da prpria nota utilizada. A gura 21 mostra um
exemplo de grande separao de notas em um bicorde.
Figura 21: Grande separao de notas em um bicorde
Com relao impresso de acordes e bicordes foi encontrado ainda um outro
problema: a presena de acidentes em notas prximas. Nesse caso, um dos acidentes
estar disposto mais esquerda que outro, para que no haja sobreposio. Em caso
acidentes de notas que estejam em intervalo segunda ou tera, ocorre esse desloca-
mento. No caso de haver dois intervalos de segunda consecutivos, haver trs locais
em que os acidentes sero dispostos. A gura 22 apresenta algumas dessas possibili-
dades.
Um ornamento suportado pelo Orfeu o staccato. O smbolo que indica essse
ornamento, um ponto abaixo da nota mais grave do SimNotes. A gura 23 mostra
um exemplo.
Com a impresso completa e correta de acordes e bicordes, a etapa seguinte
52
Figura 22: Exemplos de acidentes deslocados
Figura 23: Exemplos de bicorde com staccato
foi denida como a impresso de mltiplos acordes, formando um compasso. O com-
passo corresponde classe Measure do diagrama de classes da gura 3. A unio de
bandeirolas no estar presente nesta verso do software. Apesar de parecer ser apenas
a impresso de vrios SimNotes, um aps o outro, necessrio imprimir os nmeros
de qualidade e quantidade no incio do compasso, caso sejam diferentes do anterior e
uma barra vertical que indica seu trmino. A gura 24 mostra um exemplo a impresso
de um compasso completo.
Figura 24: Impresso de um compasso completo
Ao imprimir um compasso, foi vericado que havia um problema a ser re-
solvido: a impresso dos acidentes quando j houvesse sido impresso um acidente
no mesmo compasso. O problema ser mostrado com um exemplo. Supondo que a
primeira nota do compasso fosse um L bemol, essa nota seria impressa juntamente
com seu acidente e o mesmo seria vlido para todas as notas L da mesma oitava,
durante aquele compasso. Se a prxima nota tiver esse mesmo acidente, a acidente
no deveria ser impresso. Caso a nota possusse um acidente diferente, seria impresso
53
naturalmente. E no caso de a nota a ser impressa no possuir acidente? Nesse caso,
utilizado o bequadro para anular o acidente. A gura 25 mostra um exemplo de
utilizao do bequadro.
Figura 25: Exemplo de uso do bequadro
A prxima estrutura a ser impressa na tela a pauta, que corresponde classe
Staff do diagrama da gura 3. Alm dos compassos, a pauta precisa conter a clave
inicial e a escala musical utilizada. A gura 26 apresenta a clave de sol na escala de
d maior.
Figura 26: Impresso parcial da pauta
Quando a impresso da pauta foi realizada, surgiu um certo problema que se
resume em como imprimir a msica. Continuar sempre na horizontal at o nal ou
desenhar novo pentagrama e continuar abaixo so as opes (novo sistema). A escolha
feita foi xar um limite horizontal e criar novo sistema. Isso porque a impresso da
msica ser facilitada. A visualizao tambm favorecida, pelo fato de a diviso em
sistemas possibilitar um maior nmero de compassos visualizados, pela sua disposio
na tela. A gura 27 apresenta o mesmo compasso sendo inserido diversas vezes. Nessa
gura, esto presentes trs sistemas.
Para a impresso da msica em vrios sistemas foi necessrio aumentar o ta-
manho da gura de acordo com o tamanho da msica, para que seu tamanho no seja
limitado e ao mesmo tempo no haja um espao de edio muito grande e inutilizado.
O scrolling do editor apenas est presente na vertical, pois como j foi dito anterior-
mente, a largura xa para facilitar a impresso.
54
Figura 27: Impresso de vrios compassos iguais em trs linhas
10.3 O Cursor
O cursor um dos elementos mais importantes da interface grca, pois
atravs do mesmo que todo o controle de alteraes feito. H apenas uma instncia
desse iterador no programa que faz a varredura de todos os componentes da trilha
(Staff). Atravs desse componente, possvel recuperar o compasso selecionado, o
SimNotes e a nota correspondente. Esse componente percorre a trilha, executando
as seguintes aes:
Movimento para cima: no modo partitura, movimenta-se para cima no penta-
grama a distncia equivalente metade da distncia entre duas linhas (intervalo
de segunda), selecionando a respectiva nota.
Movimento para baixo: mesma movimentao do caso anterior, no sentido con-
trrio.
Movimento para a direita: cursor seleciona o prximo SimNotes.
Movimento para a esquerda: cursor seleciona o SimNotes anterior.
Primeiro acorde do compasso: cursor retorna at o primeiro SimNotes do com-
passo.
ltimo acorde do compasso: cursor avana at o ltimo SimNotes do com-
passo.
55
Primeiro acorde: cursor retorna ao primeiro SimNotes da msica.
ltimo acorde: cursor avana ao ltimo SimNotes da msica.
importante ressaltar que ao movimentar o cursor, caso haja mudana de
seleo do SimNotes, o compasso automaticamente selecionado. Ao criar um novo
SimNotes ou compasso, o cursor automaticamente movimentado para selecionar o
novo SimNotes, pois acredita-se que ser o primeiro SimNotes a ser editado pelo
usurio. Outro fato importante que quando o modo player acionado, o cursor no
se move at que se tenha retornado ao modo de edio.
O cursor possui como atributos ponteiros para o acorde e o compasso selecio-
nado, porm a nota uma cpia da existente no SimNotes. Portanto, ao movimentar
o cursor para cima ou para baixo, feita uma vericao: se a nota existir no acorde,
o acidente atualizado; caso no exista, o acidente ser sempre natural. Para aplica-
es futuras em que haver escala musical denida, o acidente dever corresponder ao
acidente denido na escala. Essas aes so necessrias para eliminar a infuncia de
acidentes das notas editadas anteriormente.
No modo tablatura, as funes do cursor de para cima e para baixo apenas
mudam-no de corda. A insero das notas d-se apenas ao pressionar as teclas nu-
mricas do teclado (no caso de entrada por teclado de computador) ou pela entrada
atravs de instrumento MIDI. No caso da insero por instrumento MIDI, todas as no-
tas so dispostas na mesma corda. Para encontrar a digitao, o algoritmo de converso
partitura -> tablatura dever ser utilizado.
10.4 A atualizao da tela
O mtodo UpdateScreen utilizado para fazer qualquer tipo de alterao
na tela, seja pela edio, pela abertura de arquivos ou pela mudana do modo de visua-
lizao (de tablatura para partitura e vice-versa). H um ag chamado madechange,
que habilitado toda vez que feita alguma alterao na tela. desabilitado quando
lido. Outro ag chamado FileHasChanges utilizado para vericar se alguma
alterao foi feita pelo usurio. Em caso armativo o usurio questionado se deseja
salvar o arquivo.
No modo partitura, a tela apenas modicada na medida em que h neces-
sidade. Ou seja, se a alterao feita no ltimo SimNotes, apenas o mesmo ser
56
reimpresso. No caso de no ser o ltimo SimNotes, porm este zer parte do l-
timo compasso, o compasso inteiro reimpresso. No caso de ser outro compasso que
no o ltimo, a trilha inteira reimpressa. Isso ocorre para o modo partitura, pois a
simples insero de uma nota ou acidente pode ocasionar o deslocamento de todos os
SimNotes posteriores.
Por exemplo, caso seja colocado um acidente em uma nota que anteriormente
no possua, supondo que nenhuma outra nota do acorde ou bicorde possua acidente,
todo o acorde ou bicorde ser deslocado para a direita, bem como seus sucessores.
Para contornar esse problema poderia ser adotada uma distncia regular entre as notas,
porm isso acarretaria perdas considerveis na esttica, principalmente pela possibi-
lidade de ocorrncia de acidentes prximos, em que um deslocamento maior ainda
requerido.
No modo tablatura, toda a tela atualizada a cada alterao. Nesse caso
utilizado o ag madechanges nesse caso. importante que a tela inteira seja mo-
dicada todas as vezes pois preciso reimprimir tudo no caso do redimensionamento
da mesma. No caso da partitura, no possvel redimensionar a tela. Seja no modo
partitura ou tablatura, o cursor reimpresso qualquer que seja a modicao na tela.
Outro ag importante o de inicializao, que indica quando a tela dever
ser completamente apagada antes da incluso de qualquer modicao. muito im-
portante na sua inicializao (modo partitura) e til para a abertura de arquivos, j que
nesse modo a tela s atualizada caso necessrio.
No caso de ser aberta alguma tela auxiliar, como por exemplo para a mudana
de frmula de compasso, provoca a atualizao de toda a tela, quando a mesma
fechada, ou seja, quando o software volta tela principal. preciso que ocorra essa
reimpresso porque h casos em que as telas auxiliares modicam a trilha toda.
10.5 A estrutura interna de arquivos
O XML, de acordo com [15], (eXtensible Language Markup) uma lingua-
gem de marcao denida por extensvel por permitir que o usurio crie suas prprias
tags. Seu principal propsito permitir o compartilhamento de estruturas de dados de
diferentes sistemas de informao, principalmente na internet. tambm baseado em
padres internacionais e largamente utilizado nos sistemas atualmente.
57
Devido a essas vantagens, foi feita a opo de utilizar o XML para compor
a estrutura interna do arquivo. Adicionalmente, o XML permite que posteriormente
novos tags sejam adicionados estrutura sem grandes mudanas na estrutura, caso
seja necessrio, para a implantao de melhorias. A seguir, na gura 28, encontra-se
um exemplo de arquivo. A extenso escolhida para o formato de arquivo .orfeu.
Figura 28: Exemplo de arquivo .orfeu
Como possvel observar, a msica identicada pelo nome e autor. Aps
sua identicao, denida uma pauta. A pauta, por sua vez, contm a anao de
cada uma das cordas. Essa informao importante no editor de tablaturas. Essa
denio no obrigatria, mas caso exista, necessrio que seja o primeiro atributo
da pauta. utilizada apenas no modo tablatura.
Depois da anao das cordas, as estruturas seguintes so os compassos. Na
58
denio do compasso, h os atributos qualidade e quantidade prprios dos mesmos.
Abaixo do compasso, tem-se os SimNotes, onde o ritmo denido. por ltimo,
encontram-se as notas, necessariamente no formato americano (constitudo das letras
A a G).
Um arquivo til para o usurio o tuning.ini, que armazena as anaes
gravadas pelo usurio na biblioteca. Adiante, na parte referente aos menus explicado
como salvar uma anao. A anao default a Default Guitar EBGDAE, que no
est nesse arquivo por ser o padro. A seguir (gura 29), encontra-se um exemplo de
arquivo tuning.ini.
Figura 29: Exemplo de arquivo tuning.ini
10.6 Interface com o usurio
O principal meio de entrada do usurio o teclado do computador. Foram
criados atalhos para tornar a edio mais fcil e rpida. Alguns atalhos j existentes
em outros editores foram mantidos, pelo fato de o usurio j estar acostumado aos
mesmos, porm alguns foram melhorados. A tabela 4 mostra os atalhos e as aes
correspondentes.
A interface com o usurio possui basicamente dois modos, tanto para o editor
59
Tabela 4: Tabela de atalhos do teclado
Atalho Ao
Esc Pra a execuo sonora
Space Inicia/pra a execuo sonora
Backspace Se for pausa, apaga a pausa; caso contrrio apaga
somente a nota; anda com o cursor para trs
Enter Se a nota no existir, coloca-a; caso contrrio, apaga-a
End Cursor retorna para o ltimo SimNotes da msica
Ctrl+End Cursor retorna para o ltimo SimNotes do compasso
Home Cursor vai para o primeiro SimNotes da msica
Ctrl+Home Cursor vai para o primeiro SimNotes do compasso
Left Arrow Cursor retorna para o SimNotes anterior
Up Arrow Cursor sobe
ShiftUp Arrow Aumenta o acidente (mais aguda) no editor de partitura; no
de tablatura, passa a nota selecionada para a corda de cima
Right Arrow Cursor vai para o SimNotes seguinte
Down Arrow Cursor desce
Shift+Down Arrow Diminui o acidente (mais grave) (partitura); passa a
nota selecionada para a corda de baixo (tablatura)
Ctrl+Shift+Ins Insere novo compasso antes
Ctrl+Ins Insere novo compasso aps
Shift+Ins Insere novo SimNotes depois
Ins Insere novo SimNotes antes
Ctrl+Shift+Del Apaga o compasso
Ctrl+Del Se o compasso estiver vazio, apaga-o; caso contrrio,
apaga a nota
Shift+Del Apaga o SimNotes
Del Se o acorde for uma pausa, apaga-o; caso contrrio,
apaga a nota
2-9 no editor de partituras, insere a nota com esse intervalo
ascendentemente
Shift+(2-9) no editor de partituras, insere a nota com esse intervalo
descendentemente
A-G no editor de partituras, insere a nota com esse nome
ascendentemente ou na posio cursor
Shift+(A-G) no editor de partituras, insere a nota com esse nome
descendentemente ou na posio cursor
R Transforma o acorde apontado em pausa
=/+ Dobra a durao da nota
-/_ Divide por 2 a durao da nota
Ctrl+. Coloca ou tira staccato
Shift+./> Aumenta um ponto na nota
./> Retira os pontos se a nota houver; caso contrrio, insere um
X Inverte a direo da haste
60
de tablaturas quanto para o de partituras. O primeiro o de edio, em que notas,
SimNotes e compassos so inseridos. O segundo o player, no qual o usurio
capaz de ouvir a melodia editada. importante salientar que o modo player possui um
cursor para cada pauta e no interfere no cursor do modo de edio.
10.7 O editor de tablatura
A tablatura uma notao musical largamente utilizada, principalmente para
instrumentos de cordas, pela fcil associao entre as notas a serem tocadas e as cordas
em que se encontram. A gura 30 apresenta uma tablatura para instrumento de 6
cordas, como por exemplo a guitarra.
Figura 30: Editor de tablatura
No editor de tablatura, o nmero representa o intervalo entre a nota a ser
tocada e a anao da corda. Nesse editor possvel colocar qualquer nmero de um
ou dois dgitos. Para que possam ser aceitos tanto nmeros de um dgito quanto de
dois, foi utilizado um timer para esperar a entrada do segundo dgito. No caso de o
usurio no entrar com o segundo dgito dentro do tempo, o nmero entendido como
sendo de apenas um dgito.
No mbito geral, o editor de tablatura mais simples que o editor de tablatu-
ras. O seu desenvolvimento tornou-se ainda mais rpido pelo fato de grande parte dos
problemas decorrentes da edio j terem sido tratados durante o desenvolvimento do
editor de partituras, os atalhos j terem sido denidos e at mesmo porque foi neces-
srio apenas adicionar alguns atributos e mtodos em determinadas classes.
Uma observao importante a er feita, no entanto, que o editor de partitura
pode ser redimensionado, enquanto que essa operao no permitida na primeira
verso do software, para o editor de partituras. Outra diferena que quando utilizado
este editor, a tela toda atualizada, independente da modicao.
61
10.8 A tela principal e os menus
A tela principal composta do local em que apresentado o editor de parti-
turas ou tablaturas e de menus, para a realizao das funes que sero explicitadas a
seguir. importante salientar que os editores de tablatura e partitura no so dispostos
na tela simultaneamente e cada trilha mostrada por vez. Nesta primeira verso, a
trilha corresponde pauta.
No menu Arquivo (File) tm-se as funes bsicas de manipulao de ar-
quivos:
Novo
Abrir
Salvar
Salvar como ...
Importar arquivo do Guitar Pro
Exportar para MIDI
Sair
No menu Editar (Edit) tm-se as seguintes funes:
Converso adaptativa de partitura para tablatura (Find fingering)
Transposio (Transpose)
Edio da frmula de compasso (Time signature)
Propriedades (Music properties)
Congurao
A transposio feita por intervalo. A gura 31 ilustra a tela de transposio.
A mudana da frmula de compasso pode ser realizada atravs da tela mostrada atravs
da gura 32, ao ser selecionada essa opo no menu. O item Propriedades mostra al-
gumas propriedades da msica, como o nome e o andamento. No item Congurao
est includa a congurao de entrada MIDI e tambm a de sada.
No menu Trilhas (Tracks) tm-se as funes relativas s trilhas, que so:
62
Figura 31: Exemplo de transposio
Figura 32: Edio da frmula de compasso
Nova trilha
Apagar trilha
Editar trilha
Selecionar trilha
Ver como tablatura
A funo Selecionar trilha altera a trilha mostrada no editor. Uma janela
aberta com as possveis trilhas a serem selecionadas, que pode ser vista atravs da
63
gura 33. A funo Ver como tablatura altera o modo de edio partitura/tablatura.
Ao criar uma nova trilha (ou editar alguma j existente), uma janela similar da gura
34 disposta, para que o usurio possa congur-la.
Figura 33: Seleo de trilha
Figura 34: Criao/edio de trilha
Atravs da gura 34 pode-se observar que possvel congurar os detalhes
MIDI: volume, panorama, (que a distribuio de quanto para a esquerda ou para a
direita est o som), porta e canal. No canto inferior esquerdo tem-se a uma lista de
intrumentos para que o usurio possa escolher o timbre. possvel selecionar a no-
tao de nomes/oitavas adotadas (padro norte-americano ou europeu/brasileiro). H
64
algumas anaes que so padres, denidas na biblioteca, porm o usurio pode de-
nir outra anao e salv-la para uso posterior. A congurao das trilhas bastante
exvel e permite ao usurio adequ-la s suas necessidades.
No menu (Tracks) tm-se as seguintes funes:
Lista de atalhos (Key shortcut list)
(About)
Alista de atalhos apresenta todos os atalhos do teclado e o ltimo itemfornece
informaes sobre os autores, data e verso.
10.9 Implementao da estrutura musical
O diagrama de classes da gura 3 apresenta a estrutura completa de uma m-
sica. Entretanto, para a primeira verso, essa estrutura foi simplicada para que as
funcionalidades mais importantes estivessem disponveis nesta verso. A gura 35
mostra o diagrama de classes utilizado na implementao. Os atributos e mtodos de
cada classe esto descritos a seguir.
Figura 35: Diagrama de classe da primeira verso
Ao comparar os diagramas de classe das guras 3 e 35 possvel observar
que houve mudana de cardinalidade dos relacionamentos. Isso se deve forma com
que o editor foi implementado, que no permite que haja uma trilha (Staff) sem
compassos (Measure) ou um compasso sem (SimNotes). No caso do compasso,
sempre haver um SimNotes, mesmo que seja uma pausa (SimNotes vazio). E
no caso da trilha, esta deve conter pelo menos um compasso que contm uma pausa.
65
No caso do SimNotes, possvel que este no possua nota (Note) alguma, o que
caracteriza uma pausa. Entretanto, o relacionamento que h entre a trilha e a nota
(responsvel pela anao das cordas) tambm no pode possuir cardinalidade 0, pois
suposto que um intrumento de cordas tenha pelo menos uma corda. O editor de
tablaturas garante que haja pelo menos uma corda.
A seguir esto explicitados os atributos e mtodos das classes contidas no
diagrama da gura 35, relacionados com a estrutura musical.
(I). Note
Atributos
Nota propriamente dita
Oitava
Acidente
Corda (especco para tablatura)
Nmero MIDI
Mtodos
Obter o nome completo: nota, oitava e acidente
Transpor um intervalo - parmetro: intervalo
Transpor semitons - parmetro: inteiro
Encontrar o intervalo - parmetro: nota
Leitura da nota do arquivo XML
Copia nota
Aumenta acidente (nota mais aguda)
Diminui acidente (nota mais grave)
(II). Figura rtmica
Atributos
Tipo de gura
Nmero de pontos
Mtodos
Dobra o tempo
Reduz o tempo pela metade
66
(III). SimNotes
Atributos
Lista de notas
Quantidade de notas
Figura rtmica
Haste (para cima ou para baixo)
Staccato
Mtodos
Insere nota
Apaga nota
Apaga todas as notas
Carrega do arquivo XML
Grava em arquivo XML
Verica se pausa
Imprime SimNotes na partitura
Atualiza SimNotes na partitura
Imprime SimNotes na tablatura
Atualiza SimNotes na tablatura
(IV). Compasso
Atributos
Lista de SimNotes
Quantidade de SimNotes
Quantidade
Qualidade
Mtodos
Insere SimNotes
Insere SimNotes vazio
Apaga nota
Est vazio
Carrega de arquivo XML
Grava em arquivo XML
67
Imprime compasso na partitura
Atualiza compasso na partitura
Imprime compasso na tablatura
Atualiza compasso na tablatura
(V). Pauta ou trilha
Atributos
Nome
Lista de compassos
Quantidade de compassos
Volume
Panorama
Canal
Instrumento
Lista de notas (anao das cordas, para a tablatura)
Quantidade de cordas
Mtodos
Insere trilha
Insere trilha vazia
Apaga trilha
Carrega do arquivo XML
Grava em arquivo XML
Insere corda
Apaga corda
Apaga todas as cordas
Est na anao default
Imprime trilha na partitura
Atualiza trilha na partitura
Imprime trilha na tablatura
Atualiza trilha na tablatura
(VI). Msica
Atributos
68
Nome
Autor
Lista de trilhas
Quantidade de trilhas
Mtodos
Insere trilha
Insere trilha vazia
Apaga trilha
Apaga todas as trilhas
Carrega do arquivo XML
Grava em arquivo XML
Troca de trilha
10.10 Execuo sonora
A execuo sonora do Orfeu possui uma liberdade bastante grande quanto
polifonia e polirritmia. A msica pode ser armazenada com total assincronia entre as
trilhas, porm enquanto houver proporcionalidade entre as guras rtmicas bsicas, a
execuo sonora capaz de executar o som da maneira desejada.
A classe que implementa a sada MIDI a TMusicPlayer, herdeira da
TThread, cujo construtor Play j a executa e em sua parada chama um mtodo
de parada sonora e atualizao da tela (evento OnTerminate). Esse thread, ao
terminar, j destrudo da memria. Logo o ponteiro para ele apenas utilizado na
chamada do mtodo Terminate (herdado), que solicita a parada.
Durante a criao atravs do construtor Play, o objeto sendo construdo ba-
sicamente executa:
(I). Cria um thread inicialmente suspenso
(II). Inicializa os dados (entre as inicializaes, cria um cursor para cada trilha)
(III). Encontra o tempo que teria passado at a posio do cursor, considerando que no
instante inicial tem-se T = 0. Esse resultado o valor relativo do instante inicial
e deve ser negativo ou zero, pois o instante inicial da partitura est ou junto ou
antes da posio inicial
69
(IV). Inicializa os cursores em posies para que a prxima SimNotes esteja depois
do incio da execuo
(V). Inicia a sada sonora
(VI). Inicia o thread que estava suspenso
Durante o construtor no foi utilizada mudana na prioridade de execuo do
thread, pois essa mudana retira excessivamente o controle do usurio sobre o thread
principal.
Oncleo da execuo est no mtodo Execute. Esse mtodo executado no
sexto passo do construtor e deve car em um lao que verica se o ag Terminated
foi alterado. Sua lgica consiste basicamente em:
(I). Denir o instrumento, volume e panorama de cada trilha no canal adequado
(II). Obter o valor absoluto do instante inicial para cada trilha
(III). Executar as primeiras notas de cada trilha
(IV). Repetir bloco de execuo (gura 36) at Terminated
Figura 36: Bloco de execuo
Todo o tempo calculado em ticks, dado em milisegundos. Para encontrar
o tempo em ticks de uma gura e de compasso genrico, h mtodos para obter esse
valor.
70
Essa uma tcnica de wait for ag na execuo sonora. A opo de usar
um wait for ag decorre do fato que a preciso de obter o intante atual suciente e
mesmo que haja alguma variao no atraso da execuo, a pulsao sempre mantida.
As falhas de ritmo so menores que 10ms, imperceptveis ao ouvido humano. A menor
percepo a de variaes de atraso de 1/20kHz = 50ms utilizando o fato de que a
maior freqncia perceptvel de 20kHz. Dessa forma garantido que este thread
funciona e que no foi necessrio usar o timer multimdia TMMTimer para a execuo
sonora.
10.11 Entrada MIDI
O teclado MIDI foi utilizado como elemento opcional para entrada de dados
no aplicativo. Essa entrada no suciente para fazer toda a transcrio do contedo
musical, exigindo que o usurio use o teclado do computador simultaneamente.
O efeito do funcionamento do teclado MIDI habilitado desde a construo
at a destruio da janela principal, garantindo que quando algo for pressionado a
estrutura de dados atualizada. Foi tomado o cuidado de evitar que seja feita alguma
mudana no modo de execuo, pois possibilitaria que threads simultneos pudessem
ler o mesmo dado.
Ao pressionar uma nota, acorde ou bicorde, as notas da posio atual do cur-
sor so substitudas pelas notas executadas. Como as mensagens MIDI enviam nota
por nota, signica que h um critrio para selecionar quando as notas devem ser apa-
gadas. Por padro, quando uma nota pressionada e nenhuma outra nota estava sendo
pressionada antes, o SimNotes apagado. Dessa forma possvel colocar o acorde
nota por nota, bastando no soltar uma delas enquanto outra colocada. A tela neces-
sita ser atualizada quando alguma nota pressionada.
71
11 Algoritmo baseado em autmato adaptativo
11.1 Converso de partitura em tablatura
A estrutura de dados da partitura e da partitura basicamente a mesma. Uma
msica dividida de sucessivamente at que se chegue aos compassos e nalmente
s notas. Para oeste algoritmo, a informao de como os dados foram estruturados
irrelevante: o que importa apenas a maneira de representao das notas. As notas em
partitura so identicadas por um conjunto de trs atributos: nome, acidente e oitava,
enquanto as notas em tablatura so identicadas por dois atributos: corda e posio.
Porm, apesar de aparentemente as tablaturas serem mais simples de representar, elas
exigem que haja o conhecimento prvio do nmero de cordas do instrumento e da
anao de cada corda, dentro da pauta em anlise.
Fixando-se uma corda, pode-se facilmente converter a nota da partitura em
uma nota equivalente de tablatura. Na tablatura cada nmero denota a diferena, em
semitons, entre a nota representada e a nota da anao da nota correspondente, sendo
esse nmero necessariamente positivo para que seja possvel a execuo no instru-
mento (nmeros negativos evidenciam condies impossveis para o instrumento dado
na corda escolhida). Se for adotada a numerao usual de composio dodecafnica
para as notas, disposta na tabela 5 a seguir:
Tabela 5: Numerao usual de composio dodecafnica para as notas
C C# D D# E F F# G G# A A# B
0 1 2 3 4 5 6 7 8 9 10 11
E se somarmos o nmero representado na tablatura (TNote.Number), ao
nmero da oitava (TNote.NumOct) multiplicado por 12, ser obtida a distncia em
semitons com relao nota C0. Para obter a distncia entre duas notas quaisquer,
basta calcular a distncia entre as duas notas, subtraindo-se da distncia da nota mais
aguda em relao a C0, a distncia da nota mais grave em relao a C0 (o inverso daria
um nmero negativo). fcil concluir que existe um nmero inteiro para cada nota
que possa ser tocada em uma corda com uma anao qualquer, porm esse nmero
pode ser negativo ou excessivamente grande. A faixa de valores permitida ser sempre
de 0 a 99. Valores fora dessa faixa sero considerados inexistentes pelo algoritmo.
Resumidamente, na tablatura, em cada pauta (TStaff) so representadas as
cordas com suas respectivas anaes, e as notas (TNote) possuem caractersticas
72
especcas para trabalhar com tablaturas, so essas o mtodo tabFretNumber, res-
ponsvel por obter o nmero que constar na tablatura (posio) e o tabString, um
nmero inteiro que indica a corda em que a nota est colocada. Esse nmero sempre
deve estar na faixa de 0 a (nmero de cordas - 1), mesmo que force a car sobreposto a
outra nota na mesma corda ou seja um nmero fora da faixa de 0 a 99 (caractersticas
alheias ao algoritmo em questo).
dado o nome de digitao ao conjunto de posies encontradas pelo al-
goritmo. O algoritmo no capaz de converter de uma forma ideal qualquer partitura
em tablatura. O nico critrio utilizado foi: Em uma melodia, as distncias entre de
notas adjacentes devem ser as menores possveis.
A partir desse critrio possvel criar diversos algoritmos de converso, po-
rm o uso de um algoritmo baseado em autmatos adaptativos mostrou-se adequado
para efetuar tal converso. O algoritmo instancia um nico autmato, e efetua o pro-
cessamento da entrada do autmato para as vrias tas de entrada, como ser mostrado
a seguir.
A msica dividida em partes para que seja possvel a converso. O autmato
trabalha apenas com trechos puramente meldicos e contnuos, ou seja, cada pausa ou
cada acorde tratado como separao entre trechos meldicos, e cada trecho mel-
dico tratado pelo autmato de forma isolada. Cada um desses trechos meldicos
corresponde a uma das instncias do autmato.
As pausas no necessitam de nenhum tratamento, visto que no h notas a se-
rem colocadas em seus espaos. Os acordes e bicordes no so tratados por autmatos
adaptativos, e sim por alguma lgica que tenta apenas dispor os mesmos de uma forma
possvel, usando como critrio bsico que cada corda deve ter uma ou nenhuma nota
com posio na faixa de 0 a 99, inicialmente.
Trabalhando com cada melodia, pode-se obter para cada corda uma seqncia
de nmeros que indicam como a melodia seria tocada no instrumento utilizando apenas
essa corda, por exemplo, para um baixo com anao padro (GDAE), pode-se ter
a melodia representada da seguinte forma, contida na tabela 6 (notas da melodia de
exemplo: incio de Greensleaves):
Cada uma das linhas de cada melodia considerada uma ta utilizada pelo
autmato. Oautmato l apenas umvalor por vez e se adapta melodia mais adequada.
O autmato tem sempre um estado representando cada corda do instrumento e um
estado de troca de corda, que indica que para nota seguinte no adequada aquela
73
Tabela 6: Notas de uma melodia exemplo
Anao Melodia A3 C4 D4 E4 F4 E4 F4
G3 2 5 7 9 10 9 7
D3 7 10 12 14 15 14 12
A2 12 15 17 19 20 19 17
E2 17 20 22 24 25 24 22
corda em que foi colocada a nota anterior. O autmato ca ento da seguinte forma
(gura 37):
Figura 37: Autmato adaptativo
X(i) e ~X(i) representam conjuntos complementares de possibilidades de en-
trada utilizando a i-sima ta. Esse conjunto modicado a partir das aes adap-
tativas, como se houvesse a remoo das transies do Y corrente e a insero das
transies de um novo X, efetuado de maneira mais direta. A condio Y o produ-
trio (considerando o produto como conector lgicoe) de ~X(i) para todo i possvel,
ou seja, a sada padro que ocorre quando nenhuma outra transio est habilitada.
Ux e Bx representam aes adaptativas que atualizam as transies conforme
ser visto a seguir. Todas as aes adaptativas so realizadas aps a transio.
L e R representam o movimento do ponteiro das tas para a esquerda e para a
direita, respectivamente, baseando-se no fato de que a primeira nota da parte analisada
da msica est sempre na extremidade esquerda da ta e sempre a primeira a ser
apontada (as tas nunca so consumidas, h apenas umdeslocamento do ponteiro sobre
elas, que inicia sobre a nota inicial de cada parte meldica). A transio de um estado
74
de uma corda para o estado de troca no movimenta o ponteiro das tas.
Cada ao com R atribui o nmero da corda como sada, mas cada ao com
L indica que essa sada era incorreta, retirando esse nmero da sada. Isso pode ser
feito imaginando-se uma ta adicional de sada, com nmeros que indicam a ta
escolhida para aquela nota. A tabela 7 apresenta os nmeros na ta de sada.
Tabela 7: A sada indica a ta mais adequada
Anao Melodia A3 C4 D4 E4 F4 E4 F4
G3 (Fita 0) 2 5 7 9 10 9 7
D3 (Fita 1) 7 10 12 14 15 14 12
A2 (Fita 2) 12 15 17 19 20 19 17
E2 (Fita 3) 17 20 22 24 25 24 22
Sada 2 1 1 0 0 0 1
Todo estado do autmato que representa uma corda possui transies exata-
mente como apresentado na gura 37, porm no foram representadas na mesma as
voltas, por serem redundantes e para evitar poluir a imagem. O estado inicial ser a
corda zero, e no caso de haver mais de uma transio quando no estado de troca, o pr-
ximo estado ser o da corda de menor valor, ainda no visitada. Para saber qual essa
corda, basta saber que esse valor deve ser maior que a sada anteriormente utilizada,
e que os valores de sada iniciais devem ser sempre -1 (inicializao da ta de sada),
assim como os valores impostos ao se transitar para a esquerda na ta. Na realidade da
implementao, esses -1 no precisam ser implementados e como s os valores mais
altos da sada so lidos, essa ta pode ser implementada como uma pilha (outputTape).
Isso car mais claro com as aes adaptativas.
11.2 Aceitao e rejeio da cadeia
Cada smbolo de entrada um nmero de 0 a 99 ou algum smbolo que in-
dique que a entrada invlida, por fornecer um valor fora da faixa explicitada ou por
no ser uma nota nica (podendo ser uma pausa, um bicorde ou um acorde).
A aceitao ocorrer quando estivermos no estado de alguma corda e esse
estado receber a entrada correspondente a uma posio na ta em que nenhuma das
cordas ter um valor vlido, ou ainda, se no trmino da ta (nal da msica), transi-
tando para um estado ainda no explicitado na gura acima, de aceitao da cadeia.
Essa transio tem prioridade sobre a transio habilitada com ~X(i).
75
Caso o autmato encontre um acorde ou bicorde, chamada uma rotina de
tratamento de acordes/bicordes, pois os mesmos no so tratados pelo autmato adap-
tativo da verso inicial. O mesmo ocorre com as pausas.
A rejeio da cadeia ocorrer se chegar ao estado de troca, tentando chegar
a uma posio anterior inicial (nica transio para a esquerda ocorrendo quando
estamos na primeira nota). Isto signica que todas as possibilidades de converso
foram feitas para os dados critrios (implcitos nas aes adaptativas), e que o processo
dever ser reiniciado para critrios menos rigorosos.
As transies de aceitao e rejeio no alteram a ta de sada e no efetuam
nenhuma ao adaptativa.
Para simplicar a visualizao, o autmato, para 3 cordas, semelhante
gura 38 (os textos sobre as transies no foram colocados para no poluir a imagem).
Os estados 0, 1 e 2 correspondem s cordas e T o estado de troca. O estado mais
direita o estado de aceitao.
Figura 38: Visualizao do autmato para 3 cordas
11.3 Aes adaptativas e algoritmo
Todo o ncleo do funcionamento desse algoritmo est nas aes adaptativas.
Essas aes visam a obedecer ao critrio previamente estabelecido de que as distncias
entre as posies devem ser as menores possveis. Distncias de 3 posies sero
consideradas sempre possveis de serem executadas (pois supondo que o msico tenha
4 dedos, todas as notas so possveis de serem mapeadas em um dedo a partir do
nmero da posio), e portanto esse ser o nmero inicial. Se o autmato conseguir
achar uma digitao para a parte com esse nmero como faixa, essa ser a utilizada,
76
seno ele tenta com 4 posies e assim em diante. O algoritmo encontra-se na gura
39, visto em alto nvel, em uma pseudo-linguagem:
Figura 39: Algoritmo em pseudo-linguagem
Essa faixa de distncias importante para o autmato porque controla as aes
adaptativas que restringem a faixa de valores que limita os valores de todos os X vistos
na gura 38.
Para imaginar o que faz a ao Ux (Update X), seja uma lista com apenas
os ltimos valores usados da melodia, por exemplo, se h uma melodia com 12 notas
e j foi escolhida a digitao de 11 notas, no seria adequado retornar ao incio devido
ao aumento da faixa de distncias na dcima segunda nota. Ou seja, h uma janela de
notas que ser considerada para a vericao da faixa de distncias, e o tamanho dessa
janela, nesta primeira verso, cado como 7, valor estimado durante a elaborao do
algoritmo, por ser um valor pouco provvel para a faixa de distncias, e imaginando
o que aconteceria com todas as notas na mesma corda se esse valor fosse menor, a
concluso que o valor no deve ser muito maior que 7 nem muito menor. Melhores
ajustes para esse valor (quantidade de notas na janela) podem fazer parte de projetos
futuros de otimizao.
Explicitando o esperado a partir do que fora dito, a ao Ux atualiza a funo
X indicando a faixa de valores permitidos para a posio da nota na corda. Essa faixa
pode ser facilmente calculada tendo todos os valores da janela de posies usadas,
bastando obter o valor mximo e mnimo dentro da janela, obtido o valor mximo e
mnimo de X como sendo:
MinX = MinJanela - FaixaDistncias + (MaxJanela - MinJanela)
MaxX = MaxJanela + FaixaDistncias - (MaxJanela - MinJanela)
A funo X(i) nada mais que uma funo que retorna verdadeiro quando a
posio da nota na i-sima corda estiver dentro da faixa [MinX;MaxX], e falso caso
contrrio.
77
Para armazenar os valores da janela h uma pilha de valores inteiros, que so
justamente o resultado da converso. Essa pilha (fretStack) conter todos os valores
descobertos, porm apenas os da janela (ou do topo) so utilizados para atualizar o
MinX e o MaxX.
A ao Ux, portanto, apenas insere o novo valor na pilha fretStack e atualiza
os valores de MinX e MaxX, conforme visto acima. Isso equivalente retirada de
transies que estavam na faixa de MinX a MaxX e que no esto mais, e a insero
de transies que a partir de agora esto nessa faixa.
A ao Bx (Backup X) realiza basicamente o mesmo Ux, porm ao invs de
inserir um valor na pilha fretStack ela desempilha um valor (se possvel). Quando
a pilha j estiver vazia, essa ao cria uma transio para o estado de rejeio, com
prioridade sobre as demais e sem restrio para transitar (j habilitada, por cadeia
vazia). Na realidade isso feito apenas ativando um ag que indica que a ao Bx
ativou a transio de rejeio.
Adicionalmente, Bx deve armazenar o valor da ltima transio feita (em
lastTransition), para evitar loops, ou seja, se da ltima vez o X(i) foi usado ento
a ltima transio feita foi para o estado da corda 1, esse valor deve ser armazenado e
o Ux deve apag-lo (com -1). Dessa forma a varredura feita quando estiver no estado
de transio ser feita de lastTransition + 1 em diante, o que signica que aos poucos
certas transies so apagadas por Bx durante a execuo e recolocadas por Ux.
11.4 Tratamento de notas mltiplas
Como j foi dito, o tratamento de notas mltiplas feito de forma direta, sem
utilizar o autmato adaptativo. Essa lgica (findMultiFingering) consiste sim-
plicadamente em ordenar as cordas do instrumento da mais aguda at a mais grave, e
aproveitar o fato dessa ordenao j existir na SimNotes naturalmente. A partir da
vericado se a nota mais grave possvel de ser tocada na corda mais grave, caso
contrrio, outras cordas so selecionadas at que seja encontrada uma que possibilite
tocar a nota. Em seguida vericada a segunda nota mais grave, e assim em diante,
at completar todo o acorde.
78
12 Importar arquivo do Guitar Pro 4
12.1 Formato de arquivos do Guitar Pro
O formato de arquivo do Guitar pro dividido em 3 partes: cabealho, corpo
(compassos, trilhas e depois beats, equivalentes aos SimNotes) e diagramas de acorde,
conforme pode ser visto em [14], porm alguns detalhes foram omitidos. Infelizmente
o formato desse arquivo totalmente sequencial e obriga a leitura de todas as informa-
es, mesmo irrelevantes, at que se chegue nas informaes que sero importadas. O
texto a seguir explica o formato do arquivo do Guitar Pro e como realizada a con-
verso para a estrutura de dados do Orfeu. Toda a converso realizada atravs do
mtodo do FormMain que chamado no menu de importao.
As strings que iniciam por um inteiro tm um byte com o nmero de bytes
que acompanha, por exemplo (em hexadecimal):
05 00 00 00 04 41 41 41 41
Essa uma string iniciada por inteiro. Os primeiros 4 bytes so um nmero
inteiro (como o LSB vem antes do MSB, o nmero representado 5), depois tem-se
um character string como dito pelo texto do site j citado, ou seja, tem-se um
byte que indica o tamanho do texto (4) e depois dele, o texto (AAAA). Para strings
maiores que 255 caracteres, no h uma explicao do que acontece, logo o sistema
apenas captura o texto que tem dimenso indicada pelo quinto byte e ignora o restante
do espao, saltando corretamente de acordo com o inteiro para chegar prxima parte.
Todo nmero inteiro ocupa 4 bytes no texto a seguir, e sempre que for dito
string o texto se refere a um byte contendo o tamanho (pode ser zero) seguido pelo
contedo do mesmo. Strings iniciadas por inteiros podem ser vazias, mas como
necessrio que haja o inteiro e a string, essas so apresentadas como:
01 00 00 00 00
o que signica que h um inteiro com o valor 1 indicando que toda a string
possui apenas 1 byte, e a string em si o byte nulo, indicando que o tamanho da string
nulo. Apesar de parecer irrelevante armazenar duas vezes o tamanho, isso feito para
assegurar o armazenamento de strings longas (maiores que 255 caracteres), embora
no seja algo relevante para o projeto.
A numerao dos bits de um byte feita do bit menos signicativo (0) ao bit
79
mais signicativo (7).
O arquivo do Guitar Pro dene uma linguagem. Pode ser escrita em alto nvel
como um conjunto de partes como est dividido o texto a seguir. Essas partes so
lidas seqencialmente, logo, no h necessidade de leitura de outras informaes para
a identicao do formato do arquivo, pois a cada trecho no h dependncia com
os demais. Pela grande simplicidade da linguagem, optou-se por explicar de forma
anloga dada pelo texto [14], utilizado como referncia, para a importao desses
arquivos. A seguir encontra-se uma explicao mais detalhada de como o arquivo
importado pelo Orfeu, seguindo-o seqencialmente, sem nenhum byte de informao
colocado.
12.2 Incio do cabealho
No cabealho, o valor a verso ignorada. Esse sistema de formato de arquivo
foi abandonado na ltima verso do Guitar Pro, sendo o formato GP5 incompatvel
com ele. Como o que muda de verso para verso nos arquivos GTP, GP3 e GP4
apenas o nmero de recursos (como efeitos na nota e efeitos no beat), no h
necessidade de vericar esse valor, pois sempre o arquivo ser igual. Isso permite que
o projeto carregue arquivos antigos do Guitar Pro alm do GP4 como conseqncia da
importao desses arquivos.
12.3 Propriedades da msica
Aps a verso, encontram-se informaes sobre a pea. Essas informaes
so todas ignoradas, exceto o nome e o autor da msica, por serem as nicas propri-
edades que existem no Orfeu dentre as apresentadas. Infelizmente todos os valores
precisam ser lidos. O nome da msica o primeiro string iniciado com inteiro do
arquivo (aps a verso) e o autor o quinto string. Este bloco de informaes sobre
a pea possui 8 strings iniciadas por inteiro, seguida por um bloco de texto varivel
contendo a notice, texto irrelevante para a importao, cujo formato
<inteiro> <string inic. por inteiro> <string inic. por inteiro>...
Onmero inteiro indica quantas linhas a notice possui, podendo at mesmo
ser zero, e em seguida tm-se as strings de cada linha desse bloco de texto. Concluindo
as informaes sobre a msica h apenas mais um byte que indica o triplet feel,
80
que no relevante para a importao, sendo apenas saltado na leitura.
12.4 Letras
As letras das msicas so armazenadas no arquivo do Guitar Pro e so total-
mente ignoradas pelo projeto Orfeu. O primeiro nmero lido um inteiro (4 bytes)
que indica a trilha que contm a letra, e a seguir vem um bloco exatamente 5 vezes
contendo:
<inteiro> <string iniciada por inteiro>
O inteiro representa o compasso inicial da linha de letras e a string o bloco
inteiro de letra. Essa string pode armazenar caracteres de m de linha, e no caso
adotado o mesmo sistema utilizado em arquivos de texto do DOS (CR+LF).
O inteiro aqui apresentado no foi comentado no texto sobre o formato GP4
utilizado como base e foi encontrado por engenharia reversa. Efetuando alteraes no
Guitar Pro e vericando a janela do mesmo que mostra as letras, foi possvel descobrir
qual era a informao que faltava no documento utilizado como base.
12.5 Mais propriedades da msica
Aqui encontram-se mais 9 bytes de propriedades da msica, sendo que os 4
primeiros bytes representando a pulsao (TMusic.Beat). Os 2 bytes seguintes repre-
sentam a frmula de compasso e os 3 seguintes no so relevantes para o projeto, pois
seu signicado no conhecido.
A frmula de compasso pode, na verdade, ser apenas o primeiro byte desses 2
e em seguida haver um inteiro representando a octave, ou oitava de transposio,
como diz o texto usado como base, mas no instante em que os compassos passarem
a ter mudanas em sua frmula ser visto que estas ocupam 2 bytes, onde pode-se
constatar que h algo errado nesta parte. Seja qual for o signicado dos 5 bytes em
questo, os mesmos so ignorados pelo projeto.
importante salientar que no texto usado como base era dito que esse pe-
queno bloco teria 6 bytes e no 9, sendo esse segundo nmero obtido por engenharia
reversa, ao procurar o incio da tabela de canais MIDI no arquivo.
81
12.6 Tabela de canais MIDI
O Guitar Pro impe valores a todos os canais MIDI em todos os ports aceitos
(4 ports). A numerao utilizada pelo software sempre o valor real do canal ou do
port acrescentado de uma unidade, transferindo a faixa de valores de canal de 0..15
para 1..16, por exemplo. Para cada par (port, canal) h um bloco. A varredura pelos
canais feita por inteiro at mudar o port, como mostra a gura 40.
Figura 40: Varredura pelos canais em pseudo-linguagem
Esse bloco contm o instrumento MIDI em um inteiro de 4 bytes, seguido do
volume, panorama, chorus, reverb, phaser, tremolo ocupando cada um apenas 1 byte,
seguidos de mais 2 bytes no utilizados pelo Guitar Pro 4.
Para carregar o arquivo, o Orfeu gera uma tabela de canais MIDI simplicada,
com apenas os valores relevantes ao projeto: o instrumento, o volume e o panorama.
O instrumento j est no valor correto para o uso direto com as sadas MIDI, mas o
volume e o panorama esto na faixa de 0 a 16, ao invs de estarem na faixa de 0 a
127 como o MIDI impe. Para converter entre essas faixas mantendo sempre nmeros
inteiros, o volume e o panorama, multiplica-se por 8 seus valores e subtrai-se 1 depois,
exceto no caso de o nmero ser zero e, portanto, j estar correto.
12.7 Dimenses
Seguem aqui apenas 2 inteiros. O primeiro contm o nmero de compassos
e o segundo, o nmero de trilhas da msica. Isso impe que todas as trilhas tenham
exatamente o mesmo nmero de compassos. Aps lidos esses valores, a msica j
inicializada com o nmero de trilhas adequado e com compassos em branco em todas
as trilhas.
82
12.8 Compassos
O primeiro byte do compasso um byte de cabealho. Sempre que houver um
byte de cabealho, cada bit representa algum tipo de informao. Alguns bits, quando
possuem valor 1, indicam que algum dado ser apresentado posteriormente.
Se o bit menos signicativo (zero) estiver ativo (valor 1), o prximo byte
representa uma mudana no numerador da frmula de compasso, ou seja, no atributo
quantidade. Quando isso no ocorre, o valor desse atributo deve ser igual ao valor
usado no compasso anterior. Foi xado o valor 4 caso o primeiro compasso no tenha
esse bit ativo.
Se o bit seguinte (1) estiver ativo, o prximo byte representa uma mudana no
denominador da frmula de compasso, ou seja, no atributo qualidade. O tratamento
desse valor absolutamente anlogo ao tratamento da quantidade.
Se o terceiro bit estiver ativo, o prximo byte deve ser pulado. Idem para o
quarto bit. Se o quinto bit estiver ativo, tem-se ummarcador para saltar. Todo marcador
da forma:
<string iniciada por inteiro> <cor>,
em que a string representa o nome do marcador. Toda cor ocupa 4 bytes.
Se o sexto bit estiver ativo, tem-se 2 bytes para saltar. Esses bytes representam
uma nova frmula de compasso. Esse valor estava incorreto no documento utilizado
como base, pois a frmula de compasso ocupa 2 bytes enquanto o texto dizia que
ocupava apenas um.
O signicado dos bits ignorados e dos bits que apenas impuseram saltos de
um byte irrelevante para o projeto na atual especicao. Todas as trilhas possuem
a mesma estrutura de compassos, isto , a qualidade e a quantidade so passadas para
todas as trilhas simultaneamente.
12.9 Trilhas
O Guitar Pro tambm mapeia trilhas e pautas como sendo a mesma coisa,
limitao imposta no Orfeu segundo critrios j apresentados.
O primeiro byte da trilha um byte de cabealho, porm desta vez o cabealho
83
pode ser ignorado. A seguir tem-se uma string representando o nome da trilha.
O prximo inteiro representa a quantidade de cordas que o instrumento ter.
Esse nmero est sempre na faixa entre 4 e 7, sendo que os prximos 7 inteiros contm
a nota utilizada na anao de cada corda, a partir da mais aguda. Os ltimos valores
devem ser apenas pulados se o nmero de cordas for menor do que 7. O valor da nota
armazenado corresponde ao valor que seria usado para enviar mensagens de NoteOn
e NoteOff para a sada MIDI.
Dos 6 inteiros seguintes, apenas os 2 primeiros representam informaes rele-
vantes importao. Esses valores so, na ordem, o port MIDI e o canal MIDI. Esses
valores esto na faixa de 1 a 4 e de 1 a 16, respectivamente, e devem ser subtrados de
uma unidade para serem vlidos. A partir disso resgatada na tabela de canais MIDI
a congurao utilizada pela trilha.
12.10 Beats ou SimNotes
A gura 41 mostra o pseudo-cdigo utilizado para a leitura das SimNotes.
Figura 41: Algoritmo utilizado para ler as SimNotes
O primeiro byte da trilha um byte de cabealho. Aps a sua leitura o
SimNotes imediatamente inserido no compasso. Se o sexto bit estiver ativo, o
prximo byte deve ser pulado. Esse bit redundante e signica que no h notas neste
SimNotes.
O byte seguinte contm a durao do SimNotes, valendo 2 para a semi-
colcheia, 1 para a colcheia, 0 para a semnima, -1 para a mnima e assim em diante.
Calculando 2 elevado a 7 e subtraindo o valor da durao, obtm-se exatamente o sis-
tema de numerao de durao da TrhyFigType, o que faz a converso bastante
direta.
Se o bit menos signicativo estiver ativo, a SimNotes tem exatamente um
ponto, caso contrrio a mesma no tem ponto nenhum.
84
Vrios outros bits podem estar ativos e ter contedos bastante grandes aqui. O
nico efeito que possvel resgatar do Guitar Pro o staccato, que aplicado nota no
Guitar Pro e no SimNotes. A vericao dos demais bits foi feita de acordo com
o texto de referncia do formato do Guitar Pro e todo o seu contedo ignorado. Aps
o trmino dessa vericao, encontrar-se-o as notas pertencentes a este SimNotes.
H um erro grave no documento, que no indica como os beats so dividi-
dos em notes. Foi detectado, atravs de engenharia reversa, que basta apenas 1 byte
para essa denio, pois o Guitar Pro trabalha com no mximo 7 cordas. Separando
em bits esse byte, o sexto bit representa a corda mais aguda, o quinto bit representa
a corda seguinte e assim em diante, at chegar no bit menos signicativo, no caso de
o instrumento ter 7 cordas. Quando um desses bits tem valor 1, signica que est
presente alguma nota nele; quando tem valor 0, signica que no h. Dessa forma
possvel que haja um intervalo de tempo totalmente sem notas e outro com notas em
todas as cordas. Aps esse bit encontram-se as notas do dado SimNotes, a partir da
nota que est na corda mais grave at a que est na corda mais aguda.
12.11 Notas
Diferente dos outros blocos, este bloco est dentro do bloco da SimNotes.
Essa separao somente foi feita para auxiliar a compreenso do que est acontecendo
dentro de um SimNotes. A corda em que essa nota aparece j conhecida atravs
do byte nal do bloco de SimNotes.
O primeiro byte da trilha um byte de cabealho. Como em nenhum caso
usado como teste foi possvel fazer o quinto bit desse byte ser falso, a vericao desse
bit feita conforme o pedido no documento usado como base para este texto.
Se o quinto bit estiver ativo ento h um byte indicando o tipo de nota (e
no 2 bytes, como sugeria a especicao encontrada). O valor 1 representa uma nota
normal, o valor 2 representa que a nota continuao de uma ligadura de valor e o
valor 3 representa uma nota morta, mostrado como X no Guitar Pro. Apenas as notas
com valor 1 sero inseridas na SimNotes no Orfeu. Essas informaes foram todas
descobertas por engenharia reversa.
A seguir so vericados os bits 0 e 4, para saltar o nmero de bytes, conforme
especicado no documento j citado diversas vezes aqui.
85
Conforme pedido pelo documento, agora testado o bit 5 do cabealho; se
estiver ativo a nota lida como uma posio no brao do instrumento. Caso seja do
tipo 1 (normal) ento inserida ao SimNotes aqui.
A nica informao que falta coletar o staccato, que corresponde ao bit 1
do segundo cabealho de efeitos da nota. No h necessidade de explicitar essa parte
aqui no texto por ser exatamente o que consta no documento usado como base. Todos
os valores precisam ser lidos para serem saltados e poder chegar na nota seguinte.
12.12 Tabela de acordes
Como no h necessidade de carregar os acordes da msica armazenados
nessa tabela, o contedo que existe aps o ltimo SimNotes ter suas notas lidas
totalmente ignorado, e portanto essa tabela nunca lida.
86
13 Exportar para MIDI
13.1 O arquivo MIDI
Um arquivo MIDI um arquivo que contm mensagens MIDI guardadas para
serem enviadas a uma sada MIDI. Antes de qualquer mensagem h um valor chamado
delta-time qem que guardada a informao de quanto tempo precisa passar at que a
mensagem seja enviada. Essas mensagens so guardadas em trilhas dentro do arquivo
MIDI. O mtodo chamado pela janela principal ao solicitar pelo menu a opo de
exportar arquivo MIDI o responsvel por tudo o que est aqui.
Os arquivos MIDI podem ser do tipo 0, 1 ou 2. O tipo 0 um tipo que deve
ter apenas uma trilha, mesmo que tenha contedo de todos os canais. O tipo 1 signica
que h N trilhas que comeam simultaneamente no instante inicial (modo sncrono),
no necessariamente um canal por trilha. O tipo 2 signica que cada trilha ser tocada
de forma independente (modo assncrono).
Cada arquivo MIDI dividido em partes chamadas chunks. Existem 2 tipos de
chunks, o header chunk (cabealho) e o track chunk (trilha). Um arquivo MIDI sempre
formado de umheader chunk seguido de umou mais track chunks. Os chunks iniciam
com 4 caracteres de identicao (MThd e MTrk, para o header chunk e o track chunk,
respectivamente), depois um inteiro de 4 bytes (no formato big endian, ao contrrio do
little endian usado no arquivo GP4) contendo o tamanho dos dados do chunk. Todo
dado depois disso ser dado do chunk.
Em um header chunk h sempre 6 bytes de dados (portanto aqui o campo
de tamanho do chunk sempre constante), divididos em 3 nmeros de 2 bytes. O
primeiro nmero representa o formato ou tipo do arquivo MIDI como 0, 1 ou 2, como
visto anteriormente. O segundo apresenta o nmero de trilhas presentes no arquivo. O
terceiro informa como ser feita a diviso rtmica para contagem dos delta-times.
Em um track chunk os dados so as mensagens ditas anteriormente, sempre
precedidas de um delta-time, podendo haver quantas mensagens quantas forem neces-
srias.
87
13.2 Formato inteiro de comprimento varivel MIDI
O delta-time um nmero no formato de tamanho varivel do MIDI. Esse
formato utiliza o bit mais signicativo de cada byte para indicar se haver outro byte
ou no para descrever a quantidade. Quando ativo, esse bit indica que h mais um byte.
Por exemplo, no byte $81 ($ representa que o nmero est em hexadecimal), o bit mais
signicativo est ativo, indicando que h mais um byte do valor e que os 7 bits mais
signicativos j foram dados. Se o prximo byte for $80 tem-se ento mais 7 bits do
nmero e sabe-se que h mais um byte. Se o prximo byte for $45, nalizamos o valor
com 3 bytes, fornecendo um nmero de 21 bits. A tabela 8 mostra um exemplo para
esse caso.
Tabela 8: Exemplo de seqncia MIDI
Hexadecimal 8 1 8 0 4 5
Binrio 1000 0001 1000 0000 0100 0101
Sem os bits de tamanho 000 0001 000 0000 100 0101
Reorganizando 0000 0001 0000 0000 0100 0101
Hexadecimal 0 1 0 0 4 5
Logo, o nmero armazenado foi $4045. A converso inversa (de $4045 para
$818045) feita pela subfuno writeVarLen, que recebe o inteiro como parme-
tro.
13.3 Header chunk
Para exportar o MIDI, a seqncia gerada ser apenas a da Staff apresen-
tada na tela. Isso sugere que o arquivo seja do tipo 0, de trilha nica. Logo h apenas 2
chunks na estrutura, sendo que o cabealho (em hexadecimal) ca como mostrado na
tabela 9:
A vantagem de ter o delta-time em milisegundos que agora pode-se man-
dar apenas os valores de sada do tickDuration dos SimNotes, existente para
propiciar a sada MIDI.
13.4 Track chunk
De incio, colocado o identicador do chunk:
88
Tabela 9: Cabealho para a seqncia gerada
4D 54 68 64 MThd, identicando o incio de um header chunk
00 00 00 06 Tamanho do chunk a partir do byte seguinte,
no caso de header chunk sempre 6
00 00 Arquivo do tipo zero (trilha nica)
00 01 Nmero de trilhas
E7 28 Diviso temporal; esse valor torna a unidade do
delta-time igual a milisegundos
4D 54 72 6b, que corresponde ao MTrk, identicando o incio de um
track chunk. Aqui guardada a posio do cursor (apesar de ser constante), e aps
isso salta-se 4 bytes (tamanho do chunk). Um iterador criado para passar por todas
as notas. A lgica mostrada atravs da gura 42.
Figura 42: Lgica do iterador em pseudo-linguagem
A mensagem exatamente a mensagem descrita anteriormente, contendo
sempre 3 bytes (Status, Param1 e Param2). O parmetro de dinmica do NoteOn
e NoteOff sempre xo aqui. Observe que h uma grande analogia com o que feito
na execuo sonora.
A partir do instante em que a msica terminou de ser passada, a posio do
arquivo armazenada apontada para colocar o tamanho do mesmo, agora conhecido.
89
14 Resultados Obtidos
14.1 Caractersticas e limitaes da exibio em partituras
A unio das bandeirolas das guras rtmicas no foi realizada, por ser dispen-
svel para a interpretao do que est escrito, servindo apenas para facilitar a leitura
musical. Foi vericado que a unio das bandeirolas um atributo a ser colocado no
compasso (TMeasure) em uma seqncia de nmeros ordenados (uma lista ligada),
embora no tenha sido possvel implementar essa caracterstica.
A multiplicidade de vozes apenas possvel utilizando-se trilhas separadas,
devido ao fato de a classe TMelRhy no ter sido implementada, pois sua conexo com
outras classes e, principalmente, sua exibio visual iriam levar mais tempo do que
o disponvel. Essa classe tambm interferiria no funcionamento da execuo sonora,
na importao, na exportao, no formato de arquivo baseado em XML do Orfeu, na
transposio, no sistema de iterao dentro da msica (classe TCursor).
A representao de ritmos a partir de divises complexas da pulsao a partir
do uso de quilteras foi projetada, porm no foi implementada, pelo fato de adicionar
complexidade em todos os aspectos do projeto, de forma similar classe TMelRhy.
Existe uma regra para a colocao de acidentes ocorrentes que impe que eles
continuam valendo at o nal do compasso, mas apenas para a oitava em que eles
apareceram. Embora seja simples resumir a regra em uma frase, essa regra mostrou-se
um problema grande a ser resolvido, mas o projeto contempla tal detalhe de notao
grca, devido sua importncia para os msicos e por no haver alternativa quanto
sua exibio. Vale citar que um programa, o NoteWorthy Composer, software de edi-
o de partituras voltado aos compositores, no obedece a essa regra de graa musical.
No houve necessidade de inserir mudanas de clave, sendo a clave inicial
xada para toda a msica. O mesmo ocorreu com a tonalidade da msica, sempre
xada em d maior (ou l menor), permitindo a mudana de tonalidade apenas com
base em acidentes ocorrentes.
A ligadura de valor no foi inserida, pois apesar de ser uma ferramenta bas-
tante utilizada no controle das duraes pelo usurio, no era requisito, por este adi-
cionar apenas uma complicao grca ao projeto, j que a mudana na parte sonora
bastante simples, bastando garantir que a nota continua soando at o nal da ltima
nota ligada, sem nova emisso sonora.
90
A exibio de mltiplas trilhas em uma nica tela no foi realizada pelo fato
de mostrar-se desnecessria em uma primeira verso do projeto. Para um compositor
isso normalmente interessante, fornecendo uma viso ampla de seu projeto musical,
porm, at mesmo o Guitar Pro 3 no tinha esse recurso, mostrando que isso no
fundamental para um msico. A complexidade grca envolvida nessa exibio
grande, embora no haja grandes interferncias com o restante do projeto.
O software Orfeu suporta indenidos pontos de aumento. No Guitar Pro, s
possvel colocar um ponto e o Sibelius est limitado em trs. O Orfeu admite quantos
pontos o usurio necessitar sem prejuzo da visualizao.
Com relao s guras rtmicas, o Orfeu possui faixa mais ampla que o Guitar
Pro e at que o Sibelius, pois este ltimo no possui a Mxima, utilizada em msicas
renascentistas.
A quebra de compassos sempre feita aps o mesmo ultrapassar um determi-
nado tamanho constante. Essa quebra reete o que naturalmente ocorre na impresso
de partituras, em que a partitura continua no sistema (ou linha) seguinte.
Como uma facilidade a mais para o usurio, foi criada uma barra de status
que mostra o percentual completo do compasso e a nota apontada pelo cursor. Essas
informaes poderiam ser reproduzidas em formato de udio e seriam o incio para
permitir que decientes visuais pudessem utilizar o software.
H um cursor acompanhando o que est sendo tocado. Redimensionar essa
janela durante a execuo no altera em nada o programa.
14.2 Caractersticas e limitaes da exibio em tablaturas
A representao visual do ritmo no foi colocada nas tablaturas. Como no
h requisito de detalhamentos na visualizao da tablatura, foi considerado o suciente
inserir informaes que constam em arquivos de texto utilizados como tablatura que
so distribudos pela internet. Esses arquivos de texto contm apenas as linhas com
suas respectivas anaes e nmeros indicando onde a nota deve ser tocada, alm de
barras que delimitam blocos rtmicos que normalmente so os prprios compassos,
informaes essas exibidas na tablatura.
Esse editor basicamente o mesmo editor de partituras, apenas com a parte
grca adaptada ao novo sistema de edio. Em particular, a barra de status passa a
91
exibir a anao da corda apontada pelo cursor, j que no h mais uma nota apontada
e, portanto, no necessrio exibir a informao da situao do cursor do modo de
editor de partitura.
O som, assim como na edio de partituras, apresentado exibindo-se um
cursor na trilha que est sendo visualizada. Todas as trilhas so executadas simultane-
amente no ritmo das mesmas, conforme feito com a partitura, pois o objeto que realiza
tal processo o mesmo.
Diferente do esquema de visualizao de partituras, as tablaturas so redimen-
sionveis, ou seja, a largura no foi xada e modicada junto ao tamanho da janela,
podendo ser redimensionada e atualizada at mesmo quando a execuo sonora foi
iniciada. Porm, por razes de compartilhamento de processamento, essa alterao da
tela pode fazer com que o som ritmicamente, por efetuar uma operao relativamente
lenta em um instante inapropriado.
92
15 Aceitao do projeto - requisitos funcionais
Listando primeiramente os requisitos funcionais do projeto, na ordem em que
foram apresentados, tem-se:
15.1 Editor de partituras
(I). Manipulao das partituras
(II). Abrir/Salvar partituras
O editor de partituras foi realizado, incorporado ao (FormMain), janela prin-
cipal, permitindo alteraes na msica atravs do teclado de computador, do mouse
(apenas com widgets em janelas, como a janela de edio de uma trilha) e do teclado
MIDI (apenas a modicao de um acorde na msica; o acorde modicado o apon-
tado pelo cursor no instante em que o teclado utilizado).
Utilizando o padro XML, foi denida uma linguagemque dene uma msica
no formato do Orfeu. Dessa forma o Orfeu capaz de armazenar e carregar msicas
representadas por partituras em seu formato prprio.
15.2 A representao visual da partitura deve ser inteligvel
(I). Altura jamais visualmente ambgua
(II). Ritmo inteligvel
A altura de uma nota em uma partitura representada pela posio da mesma
no pentagrama. No caso particular em que apenas uma melodia representada no
h dvidas quanto identicao da nota, porm no caso de intervalos de unssono
aumentado ou unssono diminuto, no h uma notao adequada em partitura para
represent-los, nicos casos em que no seria possvel evitar a ambigidade. Nesses
casos nem todas as notas so representadas, forando para que no haja ambigidade
por evitar que alguma nota seja exibida. Felizmente este o nico caso em que a repre-
sentao visual no corresponde ao que est armazenado (e que pode ser reproduzido
sonoramente), conforme previsto pela teoria musical.
93
O ritmo, na representao em partitura, totalmente inteligvel para qualquer
gura entre a quartifusa (gura utilizada na Sonata Pattica de Beethoven, logo em sua
primeira pgina) at a mxima (gura utilizada principalmente em obras do perodo
renascentista, utilizada por exemplo na primeira nota da Missa de Beata Virgine de
Josquin des Prs). Mesmo havendo simultaneidade sonora representada gracamente,
a durao visualmente representada com perfeio. As frmulas de compasso so
devidamente exibidas e a pulsao (beat) mostrada na tela de edio das propriedades
de uma msica.
15.3 Importao de GP4
Conforme dito no tpico sobre o formato dos arquivos de tablatura do Guitar
Pro at a sua verso 4.06, foi inserido no projeto a possibilidade de importar arquivos
nos formatos GTP (Guitar Pro at 2), GP3 (Guitar Pro 3) e GP4 (Guitar Pro 4), salvos
pelo Guitar Pro at a verso 4.06.
Diversas caractersticas so perdidas durante a importao, por no haver
equivalentes no projeto, j que o objetivo daquele software bastante diferente do
Orfeu. H uma diferena muito grande entre o foco dado polirritmia e representa-
o de partituras pelos software, caractersticas deixadas em segundo plano pelo Guitar
Pro. No entanto o Guitar Pro demonstrou dar bastante importncia representao de
acordes cifrados, como uma notao alternativa para a msica popular especca do
instrumento. Provavelmente esta caracterstica ajuda o Guitar Pro a limitar o nmero
de cordas do modo de tablatura na faixa de 4 a 7 cordas.
15.4 Editor de tablaturas
(I). Manipulao das tablaturas
(II). Abrir/Salvar tablaturas
O editor de tablaturas foi feito, com base no sistema de edio utilizado pelo
Guitar Pro, utilizando caractersticas de editores de partituras. Esse sistema de edio
utilizando-se o teclado cou, no mnimo, to simples quanto o do Guitar Pro 4, por
incluir todos os recursos factveis por teclado pelo mesmo alm de outros.
O formato de arquivo do Orfeu, baseado em XML, contm anexos que fazem
94
a mesma msica sempre poder ser representada como partitura e como tablatura. Di-
ferente do Guitar Pro, a representao nativa do projeto a partitura, e a tablatura
colocada como um anexo notao.
15.5 Equivalncia entre partituras e tablaturas
(I). Formato de armazenamento de msicas com ambos
(II). Converso de tablatura para partitura
(III). Converso de partitura para tablatura
Como j foi dito, as partituras e as tablaturas compartilham o mesmo for-
mato de representao interna e de armazenamento baseado em XML. Basicamente,
as partituras so armazenadas no formato XML e as tablaturas so anexos s partituras,
incluindo informaes extras de exibio. Um paralelo a isso o fato de a tablatura
incluir a corda em que a nota se encontra e a partitura incluir o lado para o qual a
haste deve ser desenhada. Neste exemplo, a informao de um modo no tem valor
nenhum para o outro. A equivalncia existe, mas para isso cada modo de exibio
passa a ter dados redundantes no utilizados na impresso. Todas as informaes so
armazenadas, mesmo que sejam redundantes em algum dos modos de edio.
Todo dado inserido em algum dos editores imediatamente jogado ao outro
editor, ou seja, h uma converso de partitura para tablatura e de tablatura para partitura
feita de forma direta, com um mapeamento xado. Essa converso normalmente
inadequada e deve ser manipulada pelo usurio caso seja conveniente, ou utilizar o
algoritmo baseado em autmato adaptativo para encontrar uma digitao adequada
para o modo tablatura.
15.6 Converso adaptativa em um dos casos acima
Utilizando-se um algoritmo baseado em um autmato adaptativo, possvel
a partir da msica j armazenada encontrar uma digitao no modo tablatura que seja
conveniente ao usurio. Para fazer isso, os dados do modo tablatura inclusos na msica
so basicamente descartados e substitudos pelos obtidos em uma nova converso de
partitura para tablatura, analisando o contexto em que o trecho se encontra e obede-
cendo a critrios previamente estabelecidos.
95
15.7 Personalizao de algum recurso sonoro que no totalmente
explcito em partitura
O recurso sonoro utilizado foi o staccato. Tal recurso consiste na reproduo
do som por uma durao de metade de seu tempo, ou prximo disso. A personalizao
consiste em poder adequar o staccato para ser executado conforme o usurio desejar.
15.8 Criao de uma seqncia
A criao da seqncia no formato MIDI essencial para que outros requisi-
tos abaixo sejam aceitos. O simples fato de a msica ser reproduzida j o suciente
para dizer que uma seqncia foi criada.
15.9 Reproduo de uma seqncia
O som reproduzido na sada MIDI, previamente escolhida por uma tela de
conguraes. Essa sada MIDI (sintetizador) deve obedecer ao padro General MIDI
para que o mapeamento dos timbres seja igual ao exibido na tela, embora no importe
qual o padro para que a seqncia seja executada, importando apenas para a correta
relao entre os instrumentos selecionados e os instrumentos que esto executando a
msica.
15.10 Detalhes da reproduo
(I). Polifonia
(II). Poliritmia
A polifonia j uma caracterstica do formato MIDI, por permitir 16 canais
simultneos por port. Essa caracterstica foi herdada do MIDI pelo software a partir de
seu uso, bastando enviar os sinais MIDI corretamente. Essa polifonia tambm no se
limita a 16 notas, visto que um mesmo timbre pode estar fazendo mais de uma nota.
A poliritmia foi levada a alguns extremos no projeto. A mudana de frmula
de compasso e sua total personalizao foram feitas por completo, incluindo possibili-
dades de modicao no presentes na maioria dos softwares citados por este texto (o
96
nico que apresenta essa personalizao o NoteWorthy Composer. Essa personaliza-
o consiste em permitir que cada trilha tenha compassos diferentes entre si, mesmo
que no haja encaixe entre eles, permitindo, at certo ponto, uma complexidade rtmica
similar ao composto por compositores modernos como Igor F. Stravinski. Essa com-
plexidade apenas barrada por uma pulsao xada para a msica toda, que dene em
bpm (beats per minute) a durao de notas cuja gura rtmica a semnima. A partir
da proporcionalidade entre as guras possvel obter qualquer combinao rtmica na
estrutura de dados, permitida pelo editor e exibida corretamente, embora apenas uma
trilha por vez.
15.11 Interface com o teclado
Conforme j foi dito anteriormente, o teclado tem atalhos que fornecem total
liberdade ao cursor e sua edio. Com o auxlio de atalhos do sistema operacional
todo o sistema de menus da janela principal e as demais janelas so acessveis mesmo
na ausncia de mouse, apesar de a edio das anaes da tablatura ter diculdade
considervel sem o mouse, possvel. Essa edio de anaes se torna extremamente
simples quando comparada com a edio apenas com o teclado. Vale salientar que
o Guitar Pro, alm de no permitir uma quantidade qualquer de cordas na tablatura,
no permite a realizao de todas as aes unicamente atravs de teclado, exigindo o
mouse para diversas aes, em particular, para a edio da anao de cada trilha.
15.12 Impresso
Um componente bsico de impresso apenas remete o que est impresso na
tela para a sada de impressora, atravs do sistema operacional. Apesar da falta de
congurao do recurso, isso basta para garantir o que foi pedido pelo requisito.
15.13 Exportao MIDI
A exportao MIDI, conforme dito anteriormente, foi realizada de uma forma
bastante simplicada. Apenas as informaes mnimas relevantes foram colocadas:
altura e durao. Apenas a trilha em edio convertida, logo no h polifonia na
seqncia exportada, a m de simplicar o arquivo nal.
97
16 Aceitao do projeto - requisitos no-funcionais
Tendo todos os requisitos funcionais aceitos com xito. Os mesmos esto
listados s seguir.
16.1 Compatibilidade
Windows XP
Pentium IV
AMD Sempron
AMD Athlon
Os computadores utilizados no desenvolvimento foram AMD Sempron com
Windows XP, nos quais tambm eram realizados testes. O projeto foi executado em
AMD Athlon e em Pentium IV a m de conrmar que o funcionamento do mesmo no
depende do processador. Devido s caractersticas do Delphi e da API do Windows
isso era previsto.
16.2 Recursos
Seqenciao da msica atravs do Orfeu
Sntese sonora externa ao projeto
As seqncias foram criadas pelo Orfeu em conjunto com a sntese por soft-
ware, restando recursos o suciente at mesmo para redigir um texto em outro aplica-
tivo ao mesmo tempo em um AMD Sempron de 1.8GHz e 512MB de RAM.
16.3 Mnimo de duas vozes na polifonia
Foi realizado um teste com seis vozes de polifonia sem nenhuma falha rt-
mica perceptvel. Para o teste bastou colocar acordes completos de violo usando as 6
cordas.
98
16.4 Latncia entre o pedido de execuo e seu incio deve ser de
no mnimo 1 segundo
O tempo entre o pedido de execuo e o incio de execuo na maior parte
das vezes no foi humanamente perceptvel, dicilmente ultrapassando o valor de 0,1s.
Essa latncia depende mais do sistema operacional e do dispositivo de sada do que do
projeto em questo.
16.5 Deve funcionar mesmo que no haja como sintetizar o som
Na ausncia de sintetizador de som uma mensagem de erro exibida apenas
na tentativa de executar a msica. Todos os recursos do programa continuam acessveis
e essa tentativa de executar a msica no o trava.
99
17 Itens adicionais implementados
17.1 Transpor partituras
O recurso de transposio de partituras foi implementado, permitindo que o
usurio transponha todas as suas notas sem a perda dos intervalos reais para at quatro
oitavas, ascendente ou descendente. Esse recurso pode ser aplicado a todas as trilhas de
uma s vez para facilitar para o usurio. Comparando com o Guitar Pro, o recurso de
transposio deste apenas realiza a transposio em semitons, perdendo a informao
original dos intervalos segundo a teoria musical. Alm disso a transposio do Guitar
Pro se limita a uma oitava. Esse recurso de transposio se compara ao do Sibelius,
por possuir, tambm, uma transposio dada por um intervalo como o representado em
TInterval.
17.2 Entrada MIDI
O uso de um teclado MIDI ou outro instrumento com conexo MIDI ao com-
putador mostrou-se extremamente adequado ao usurio, facilitando a edio da msica
e permitindo que o mesmo no tenha grande domnio sobre teoria musical para reali-
zar a edio. O teclado insere apenas o acorde sendo tocado, ignorando a durao do
mesmo.
17.3 Poliritmia total sobre uma pulsao
A execuo do ritmo, como foi dito anteriormente, est mais completo do que
o pedido pelos requisitos. A polirritmia inserida capaz de executar qualquer msica
desde que haja proporcionalidade entre as guras rtmicas. A diviso em compassos
no importante. Essa proporcionalidade surge do fato de se manter uma pulsao,
mesmo que esteja a um mnimo mltiplo comum entre guras de unidades de com-
passo ou mesmo que nunca haja uma simples sincronia entre eles, bastando obedecer
proporcionalidade entre guras.
100
17.4 XML
O formato de arquivo da sada poderia ter sido implementado em binrio,
utilizando o recurso de armazenamento de variveis do tipo record do Delphi, porm
esse formato seria de difcil manipulao e poderia car travado nos recursos previsos
para ele na primeira verso do software. Para evitar esse problema um formato de
arquivo baseado no XML foi elaborado para constituir o formato interno do Orfeu.
17.5 N cordas
Uma das maiores inovaes do software, um software editor de tablaturas
que prov total liberdade para a escolha do nmero de cordas que o instrumento tem.
Dessa forma possvel separar o traste de cada uma das 12 cordas de um violo de 12
cordas e tambm separar as cordas para um baixo de 9 cordas, ambos instrumentos em
que isso impossvel nos softwares convencionais como o Guitar Pro (impossvel at
mesmo na verso 5).
17.6 Anaes e conguraes em INI
O msico pode, se desejar, manipular um acervo de anaes, armazenando-
as para uso posterior, ou removendo-as. Todos os recursos de manipulao das a-
naes para N cordas foram colocados em uma nica tela, a tela de edio das pro-
priedades de uma trilha. Os dados dessas anaes so armazenados em um arquivo
INI, formato padro de arquivos de congurao do Windows, sendo que caso esse
arquivo no exista a prpria aplicao se encarrega de cri-lo. Apenas uma anao
foi colocada no cdigo para evitar a ausncia de anaes no acervo.
101
18 Concluso
Atravs dos itens 15 e 16 pode-se concluir que o projeto foi aceito, pois to-
dos os requisitos funcionais e no-funcionais foram atendidos de forma, no mnimo,
satisfatria. Em alguns casos o projeto e a implementao superaram as espectativas,
como nas capacidades de polifonia, na tela de edio das propriedades de uma trilha,
na tela de troca de frmula de compasso e nos atalhos da interface com o teclado de
computador.
Para que o software Orfeu torne-se um produto competitivo com os outros
existentes no mercado h alguns itens que devem ser desenvolvidos, listados a seguir:
Unio das bandeirolas das guras rtmicas
Multiplicidade de vozes na mesma trilha
Visualizao e representao sonora da ligadura de valor
Ligaduras de fraseado
Escolha da clave
Escolha da escala musical
Quilteras
Trilhas com pelo menos duas pautas
Permitir visualizar a msica toda de uma vez
Mais ornamentaes, ou pelo menos a representao grca das mesmas
Permitir deixar o compasso todo na mesma linha ou sistema (no quebr-lo)
Incluso d ritmo na notao de tablatura
Apesar de haver ainda vrios itens necessrios para que o Orfeu torne-se um
produto aceito pelo mercado, vale ressaltar que o projeto foi aceito, pois todos os requi-
sitos foram cumpridos satisfatoriamente e, tendo em vista a quantidade de elementos
que foram desenvolvidos e o tempo disponvel para seu desenvolvimento, o desenvol-
vimento do mesmo saiu como o esperado, seno melhor. Para importar arquivos do
Guitar Pro 4, por exemplo, pois o texto encontrado contendo sua descrio possua
102
erros que no eram esperados a partir do instante em que o mesmo foi descoberto.
Apesar do imprevisto, foi possvel concluir a importao de arquivos do Guitar Pro.
importante ressaltar tambm que todos os msicos tm queixas com relao
aos softwares presentes no mercado e, por isso, tentamos incluir no Orfeu o que foi
considerado bom, melhorar o que foi considerado ruim e at projetar o que os outros
softwares no eram capazes de fazer. Outro ponto importante que o Orfeu tem um
diferencial: a converso adaptativa de partitura para tablatura. Essa converso algo
freqentemente buscado por guitarristas, baixistas e violonistas, e nenhum software
atual faz uma converso aceitvel. Seria interessante tambm, ao torn-lo um produto,
aprimorar o algoritmo para promover ainda mais o Orfeu.
103
Referncias
[1] Object-oriented efciency comparison: Java, c++ and c#. Acesso em 15 de abril
de 2007. Disponvel em: http://www.cs.hut.fi/Opinnot/
T-106.290/K2004/Final/mbjorkqv.ps.gz.
[2] F.A. F. Anselmo. Desvendando o caminho das pedras. Technical report, Borland,
1997.
[3] A. C. Costa, A. F. Borgatto, and Demtrio C. G. B. Curso de introduo ao latex.
Technical report, ESALQ, 2002.
[4] I. Darwin. Gui development with java. Linux Journal, 61(4), 1999.
[5] S. Garnkel. Java: slow, ugly and irrelevant. Acesso em 18 de abril de 2007. Dis-
ponvel em: http://archive.salon.com/tech/col/garf/2001/
01/08/bad_java/print.html.
[6] E. D. Neto. Redimensionando imagens proporcionalmente. Acesso em 16 agosto
de 2007. Disponvel em: http://www.activedelphi.com.br/
modules.php?op=modload&name=News&file=article&sid=568.
[7] J. J. Neto. Adaptive automata for context-sensitive languages. Sigplan Notices,
29(9):115124, September 1994.
[8] T. Pedrazzi, A. H. Tchemra, and R. L. A. Rocha. Adaptive decision tables -
a case study of their application to decision-taking problems. In Proceedings
of International Conference on Adaptive and Natural Computing Algorithms -
ICANNGA, pages 341344, March 21-23 2005.
[9] J. Spolski. Elegance. Acesso em 1 de abril de 2007. Disponvel em:
http://www.joelonsoftware.com/items/2006/12/15.html.
[10] J. Spolski. Exceptions. Acesso em 3 de abril de 2007. Disponvel em:
http://www.joelonsoftware.com/items/2003/10/13.html.
[11] B. Stroustrup. C# language. Acesso em 15 de abril de 2007. Disponvel em:
http://students.cs.tamu.edu/jchen/cpsc689-606/
language.pdf.
[12] P. Tyma. Why are we using java again? Communications of the ACM, 41(6):38
42, June 1998.
104
[13] V. Vranic. Multiple software development paradigms and multi-paradigm
software development. Acesso em 13 de abril de 2007. Disponvel em:
http://www.fiit.stuba.sk/vranic/pub/
MultiParadigmSwDev.pdf.
[14] L. Vromman. Guitar pro 4.06 le format descrip-
tion. Acesso em 15 novembro de 2007. Disponvel em:
http://dguitar.sourceforge.net/GP4format.html.
[15] Wikipedia. Xml. Acesso em 3 dezembro de 2007. Disponvel em:
http://en.wikipedia.org/wiki/XML.
[16] A. Wilson. Gerando imagem para validao de nmeros. Acesso em 19 agosto
de 2007. Disponvel em: http://www.activedelphi.com.br/
modules.php?op=modload&name=News&file=article
&sid=290&mode=thread&order=0&thold=0.
[17] F. Zuffo and H. Pistori. Tecnologia adaptativa e sntese de voz: Primeiros expe-
rimentos. In Anais do V Workshop de Software Livre - WSL, Junho, 2-5 2004.
105
APNDICE A - GLOSSRIO
Acidente: sinal que indica o intervalo em semitons de uma nota com relao mesma
sem o acidente.
Acorde: conjunto de trs ou mais notas simultneas.
Altura: qualidade do som que identica se ele mais grave ou mais agudo que outro,
isto , nome dado freqncia fundamental da forma de onda sonora.
Andamento: valor numrico em batidas por minuto indicador da pulsao a ser usada.
Tradicionalmente utiliza-se palavras indicadoras do andamento (adagio, allegro, etc.),
pois o conceito de andamento surgiu muito antes da inveno do metrnomo.
Arquivo GP4: formato de arquivo utilizado no software Guitar Pro 4, armazenando
tablaturas de guitarra, sejam quais forem os instrumentos.
Arquivo MIDI: formato de arquivo baseado no protocolo MIDI para armazenar se-
qncias, incluindo informaes sobre o ritmo da msica que no so necessrias no
protocolo.
Bend ou pitch bend: glissando cujos sons intermedirios so necessariamente cont-
nuos.
Bequadro: anulador de acidentes.
Bicorde: conjunto de duas notas simultneas.
Breve: gura rtmica que representa a durao de duas semibreves.
Clave: xador de uma altura base no pentagrama.
Colcheia: gura rtmica que representa a durao de duas semicolcheias.
Compasso: uma forma de dividir os sons de uma composio musical em grupos,
de forma quantizada.
Dinmica: qualidade do som que identica a fora com que a nota soa. Difere do
volume sonoro pelo fato de que a fora com que uma nota tocada inuencia no
timbre da mesma.
Figura rtmica: imagemque representa a proporo entre a durao das notas e pausas
de uma msica.
106
Fusa: gura rtmica que representa a durao de duas semifusas.
General MIDI: conjunto de mensagens, numerao padro dos instrumentos musicais
e padro de canais utilizados no MIDI (camada de nvel mais alto anexada ao protocolo
MIDI).
Glissando: ornamento que indica que a passagem entre duas notas deve ser feita pas-
sando por todas as notas entre elas, segundo algum critrio que depende da represen-
tao do glissando e do instrumento em que ele ser tocado.
Ligadura de fraseado: representa a unio entre as notas do trecho ligado melodia,
no permitindo nenhuma pausa mnima entre a nalizao de uma nota e o incio da
seguinte.
Longa: gura rtmica que representa a durao de duas breves.
Mxima: gura rtmica que representa a durao de duas longas.
Melodia: conjunto ordenado e com ritmo da execuo de pausas e notas sem sobrepo-
sio no tempo.
Microdinmica: uma pequena variao de dinmica no representada em partitura
que no sai da faixa de dinmica estabelecida na partitura.
MIDI (Musical Instrument Digital Interface): originalmente um protocolo de comu-
nicao entre instrumentos musicais e sintetizadores.
Mnima: gura rtmica que representa a durao de duas semnimas.
Nota: representao grca de um som bsico emitido por um instrumento, caracteri-
zado por possuir altura xa, ou por representar um som percussivo.
Nota pontuada: nota seguida de um ponto, o que indica que o som emitido dever ter
durao de da nota que o precede somado com metade da sua durao.
Ornamento: detalhe musical artstico para enfeitar uma msica, normalmente sem
conter preciso de execuo na notao padro.
Partitura: tambm conhecida como notao musical padro, o sistema de repre-
sentao visual de msicas a partir de notas e pausas com guras rtmicas, alm de
representaes de andamento, dinmica, ornamentao e diversas outras possibilida-
des artsticas.
107
Pauta: pentagrama com seu contedo.
Pentagrama: conjunto de cinco linhas que representam alturas para um dado instru-
mento, quando dada uma clave.
Percusso: sonoridade com ataque (incio) mais importante do que sua sustentao de
vibrao peridica que dene a altura do som.
Polifonia: simultaneidade de sons.
Polirritmia: simultaneidade de ritmos.
Pulsao: sensao de periodicidade rtmica de uma msica.
Quartifusa: gura rtmica de durao extremamente curta.
Reverberao: uma caracterstica da interferncia do ambiente no som.
Ritmo: qualidade do som que identica sua durao.
Semibreve: gura rtmica que representa a durao de duas mnimas.
Semicolcheia: gura rtmica que representa a durao de duas fusas.
Semifusa: gura rtmica que representa a durao de duas quartifusas.
Semnima: gura rtmica que representa a durao de duas colcheias.
Seqncia: representao digital de uma melodia ou de uma msica atravs de suas
notas, no de seus sons.
Seqenciador: reprodutor de seqncias em um sintetizador.
Sintetizador: reprodutor de sons a partir de seqncias.
Sistema: um conjunto de pautas unidas at ocorrer uma quebra na vertical por m
do espao.
Slide: o transitar entre notas passando por todas as intermedirias no brao do ins-
trumento.
Staccato: articulao que indica que a nota deve ser tocada rapidamente ou, tipica-
mente, pausada a partir da metade de sua durao
Tablatura: notao alternativa utilizada por guitarristas e violonistas, composta de
108
linhas com nmeros indicando a posio em que as notas devem ser tocadas.
Timbre: qualidade do som que identica seu instrumento de origem, isto , proporo
entre as freqncias dos harmnicos (forma de onda).
Transposio: processo de se modicar a altura de uma nota ou coleo de notas por
um intervalo constante. Quando se transpe uma musica, automaticamente modica-
se o tom em que se encontra.
Trilha: conjunto de pautas.
Trinado: Uma alternncia rpida, durante toda a durao da nota, entre o som da
mesma e outro som.
Volume: intensidade sonora em escala logartmica.

Anda mungkin juga menyukai