Este é o comando gramophone2 que pode ser executado no provedor de hospedagem gratuita OnWorks usando uma de nossas várias estações de trabalho online gratuitas, como Ubuntu Online, Fedora Online, emulador online do Windows ou emulador online do MAC OS
PROGRAMA:
NOME
gramophone2 - GRAMophone é um gerador algorítmico de composição musical.
SINOPSE
gramofone2 [-c | -d] arquivo de origem [midifile]
OPÇÕES
-c é uma opção que permite controlar a sintaxe da fonte sem gerar
contemporânea.
-d é uma opção que permite ativar o modo de depuração, com saída de vídeo do
composição e parâmetros do jogador mais as notas geradas.
DESCRIÇÃO
No GRAMophone, a música é gerada usando dois tipos de gramática formal: a regular de Chomsky
gramática (ou Tipo 3) para uma abordagem de cima para baixo para a composição e uma versão reduzida de
Gramática de Lindenmayer para uma abordagem BOTTOM UP.
BASIC CONCEITO OF Gramofone
GRAMophone é parcialmente baseado em uma ideia de Jon McCormack, que inventou a ideia de um
jogador virtual (músico virtual). O jogador em questão está associado a uma faixa MIDI,
e interpreta instruções dizendo o que fazer. Geralmente, eles dizem tocar notas (enviar
Mensagens MIDI). Os músicos de GRAMophone juntos formam uma orquestra, que toca um
composição.
Qualquer número de jogadores pode tocar uma composição, mas na prática o hardware usado pode
impor um limite superior.
Em geral, cada jogador toca um instrumento e cada um tem um conjunto diferente de regras gramaticais.
Um jogador individual é caracterizado por um conjunto de parâmetros que são compartilhados por todo
orquestra e / ou um conjunto de parâmetros pessoal.
Os parâmetros da orquestra consistem em:
o tipo de gramática usada (Chomsky ou Lindenmayer);
o metrônomo;
a medida;
o número de iterações usadas no processo de produção.
Os parâmetros de cada jogador individual consistem em:
o tipo de gramática usada (Chomsky ou Lindenmayer);
o instrumento;
o canal MIDI associado ao reprodutor;
o número de iterações usadas no processo de produção;
As notas de um jogador têm um estado atual que consiste em:
oitava
volume
duração
liberar
Essas características podem ser controladas parametricamente por um jogador declarando seu
variáveis associadas. GRAMophone, então, permite a geração não determinística de
música, usando a gramática de Chomsky ou Lindenmayer.
GUIA TO Gramofone
"Give Me A" (O "Hello, World!" De GRAMophone ")
Para apresentá-lo às idéias básicas, aqui está a composição algorítmica mais simples que pode
ser gerado com GRAMophone: esta composição simplesmente gera a nota A e é
apresentado através dos métodos de Chomsky e Lindenmayer.
composição "Give Me A" de "Schroeder" {
// esta composição gera a nota A com a gramática de Chomsky
gramática chomsky
ritmo 120
assinatura_hora 4/4
%
jogador Schroeder {
instrumento 0
%
@ composição-> A [,,,];
}
}
composição "Give Me A" de "Schroeder" {
// esta composição gera a nota A com a gramática de Lindenmayer
gramática lindenmayer
ritmo 120
assinatura_hora 4/4
%
jogador Schroeder {
instrumento 0
%
axioma-> A [,,,];
}
}
AS PALAVRAS-CHAVE composição E de
Todas as composições devem começar com a composição da palavra-chave seguida por uma string (em sentido inverso
vírgulas) contendo o nome da composição. Deve ser seguido pela palavra-chave de
em seguida, outra corda contendo os direitos autorais da peça.
O BLOCO DE COMPOSIÇÃO
O bloco de composição é colocado entre colchetes. Está subdividido em três seções: uma
seção define os parâmetros da composição, um declara e inicia qualquer global
variáveis e uma seção de orquestra onde os músicos que vão 'tocar' a peça são
definiram. As primeiras duas seções são separadas pelo símbolo%.
A PALAVRA-CHAVE do jogador
Cada jogador é definido com a palavra-chave player, seguida por um identificador.
O BLOCO DE jogador
O bloco do jogador é colocado entre colchetes e é dividido em três seções: uma seção
define os parâmetros da pista associada ao jogador, declara-se qualquer local
variáveis para o jogador e uma é para as regras formais. As primeiras duas seções são
separados pelo símbolo%.
COMENTÁRIOS
No GRAMophone, os comentários são semelhantes a C: eles devem começar com o par de caracteres '/ *' e terminar
com o par de caracteres '*/.'Não deve haver espaço entre o asterisco e a barra.
Tudo entre esses pares de símbolos será ignorado pelo analisador GRAMophone. Todo
linhas de comentários também podem ser incluídas. As linhas de comentários começam com o símbolo // e terminam
no final da linha, como nos dois exemplos iniciais.
Seção que define os parâmetros da composição
Os parâmetros compartilhados por todos os músicos da orquestra são declarados aqui. Os parametros
que podem ser declarados são:
gramática
resolução
iterações
tempo
assinatura_hora
Esta seção deve terminar com o símbolo%.
gramática
Este parâmetro é obrigatório e define o tipo de gramática a ser usada na geração.
Pode ser chomsky ou lindenmayer.
resolução
Este parâmetro define o número de unidades de tempo de 1/4 de duração. Se omitido, o padrão
o valor 480 será usado.
iterações
Este parâmetro define o número de iterações contidas na geração. Seu significado
depende do tipo de gramática escolhida, conforme explicado a seguir. Se omitido, o valor padrão 1
será usada.
tempo
Este parâmetro define o ritmo da composição. Se omitido, o valor padrão 120 será
usava.
assinatura_hora
Este parâmetro define a medida da composição. Se omitido, o valor padrão 4/4 será
ser usado.
Seção que declara as variáveis globais da composição
As variáveis controlam os parâmetros dos atributos de uma nota, conforme explicado a seguir.
Seção que define os parâmetros do jogador
Os parâmetros e variáveis pessoais de cada jogador são declarados aqui. Os parâmetros pessoais
que podem ser declarados são:
instrumento
canal
iterações
Esta seção deve terminar com o símbolo%.
instrumento
Este parâmetro indica o tipo de instrumento do jogador. O conjunto de instrumentos do GRAMophone é o
igual ao do General MIDI. O intervalo de valores aceitável é de 0 a 127; existem
portanto, 128 instrumentos para escolher. Uma tabela mostrando os códigos do instrumento aparece
abaixo:
0 Plano
1 Piano Brite
2 Martelo Piano
3 Honkey Tonks
4 novos dentes
5 Piano Digital
6 cravo
7 Clavi
8 celesta
9 sinos
10 Caixa de Música
11 vibrações
12 marimba
13 Xilofonte
14 Sino Tubular
15 Santur
16 Órgão Completo
17 Órgão Percussivo
18 Órgão BX-3
19 Órgão da Igreja
20 Positivo
21 musette
22 gaita
23 tango
24 Guitarra Clássica
25 violão
26 guitarra jazz
27 Guitarra Limpa
28 guitarra muda
29 guitarra overdrive
30 guitarra distorcida
31 Harmônicas
32 Baixo Jazz
33 baixo profundo
34 Escolha baixo
35 Baixo Fretless
36 Contrabaixo 1
37 Contrabaixo 2
38 Baixo Sintetizado 1
39 Baixo Sintetizado 2
40 violino
41 roxo
42 violoncelo
43 Contra Baixo
44 Corda Tremolo
45 pizzicato
46 Harpa
47 tímpanos
48 Marcado
49 Corda Lenta
50 Pad Analógico
51 Almofada de Corda
52 Coro
53 Voz Doo
54 vozes
55 Sucesso de orquestra
56 trombeta
57 trombone
58 Tuba
59 Trompete Mudo
60 trompa francesa
61 Seção de latão
62 Latão Sintetizado 1
63 Latão Sintetizado 2
64 Sax soprano
65 sax alto
66 Sax Tenor
67 Barítono Sax
68 Sweet Oboé
69 trompa inglesa
70 fagote oboé
71 clarinete
72 Piccolo
73 flauta
Gravador 74
75 Flauta de Pã
Garrafa 76
77 Shakhukuhachi
78 apito
79 Ocarina
80 Chumbo Quadrado
81 serra chumbo
82 Chumbo Caliope
Chiff 83
84 Chumbo Charang
85 Coro Aéreo
86 Rezzo4ths
87 baixo e chumbo
88 Fantasia
89 almofada quente
Almofada de sintetizador poli 90
91 Almofada Fantasma
92 Almofada curvada
93 Almofada de Metal
94 Almofada de halo
95 Almofada de Varredura
96 Chuva de Gelo
97 Soundtrack
98 Cristal
99 Atmosfera
100 brilho
101 Duende
102 Queda de Eco
Tema de 103 estrelas
104 cítara
105 banjo
106 Shamisen
107 Koto
108 Kalimba
109 Escócia
110 violino
111 Shanai
112 Sino Metálico
113 atrás
114 Tambores de Aço
115 Bloco de Madeira
116 Tambor Taiko
117 Tom melódico
118 Sintetizador
119 Prato Reverso
Ruído de 120 trastes
121 Chiff de Ruído
122 Beira-mar
123 pássaros
Telefone 124
125 helicóptero
126 Stadium !!
127 tiro
Se omitido, o valor padrão do instrumento 0 é usado.
canal
Este parâmetro define qual canal Midi será associado ao reprodutor. São 16
canais possíveis. O canal 10 é reservado para instrumentos de percussão. Se omitido, o
o valor 1 do canal padrão é usado.
iterações
Este parâmetro define o número de iterações na geração. Seu significado depende de
o tipo de gramática escolhida, conforme explicado a seguir. Se o parâmetro iterations foi
incluídas nas declarações de composição, a última declaração será ignorada.
Seção que declara as variáveis locais do jogador
As variáveis controlam os parâmetros dos atributos de uma nota, conforme explicado a seguir.
Notas no GRAMofone
COMO AS NOTAS SÃO ESCRITAS NO GRAMofone
As notas são a primeira categoria de símbolos terminais GRAMofone.
GRAMophone usa a notação em inglês para notas:
ABCDEFG
Os nomes das notas devem ser escritos em letras maiúsculas. Os símbolos planos e pontiagudos são
representado por 'b' e '#' respectivamente; nenhum espaço deve aparecer entre esses símbolos e
o nome da nota: A #, Gb, etc.
ATRIBUTOS DE NOTA
As notas podem ter quatro atributos no GRAMofone: oitava, velocidade, duração e liberação. o
O atributo de oitava varia entre -2 e 8, enquanto os atributos de velocidade e liberação variam
de 0 a 127. Se a nota for escrita sem atributos, o seguinte padrão
os valores são usados: 3 para oitava, 64 para velocidade e liberação. O valor padrão atual para
a duração é uma crotchet. No exemplo, "Dê-me A" é escrito simplesmente como A [,,,]. Esse
significa que um A é gerado na terceira oitava, com uma duração de 1/4 e uma velocidade
e lançamento de 64.
DEFININDO OS ATRIBUTOS DE UMA NOTA
Os atributos de uma nota são definidos escrevendo-os dentro dos colchetes que
segue o nome da nota, sem espaços. Uma nota pode ter no máximo quatro atributos e
cada tipo de atributo pode ter apenas um valor.
Os atributos devem ser definidos na seguinte ordem:
oitava
velocidade
duração
liberar
Se todos os três atributos não forem definidos, o valor padrão será usado para os que faltam.
Aqui estão alguns exemplos de notas com atributos:
C [2, 50 + 60/2, 240 * 4,] - toca um C na segunda oitava, com uma velocidade de 80,
duração de 960 (mínimo com uma resolução de 480) e uma versão de 64 (padrão
valor);
Db [4 ,,,] - toca um Ré bemol na quarta oitava, usando os valores padrão para
velocidade, duração e liberação;
F # [,,,] - usa os valores padrão para todos os atributos;
Exemplos incorretos são:
Db [3, 127, 960, 64, x] - muitos atributos (x é uma variável).
PAUSE
As pausas são outra categoria de símbolo de terminal no GRAMofone. Eles são indicados pelo
letra R e só leva um atributo de tipo de duração. Se não for especificado, a resolução padrão
valor é usado. Os atributos são definidos da mesma forma que as notas.
Aqui estão alguns exemplos de pausas:
R [480/2] - pausa com duração de 240;
R [] - use o valor padrão para o atributo de duração do tipo.
ACORDOS
Os acordes são a categoria final do símbolo de terminal usado no GRAMophone. Um acorde é uma série
de notas tocadas simultaneamente. No GRAMophone, as notas tocadas em um acorde são incluídas
entre dois símbolos '^'.
Aqui estão alguns exemplos de acordes:
^ C [,,,] E [,,,] G [,,,] ^ - toca um acorde Dó maior, usando os valores padrão de cada nota.
^ A [2,80,240,] C [2,, 240,] E [2,, 240,] ^ - toca um acorde Lá menor com duração 1/8, com
todas as notas na segunda oitava e velocidade 64 (valor padrão), com a primeira nota
do acorde tocado com uma velocidade de 80 e os dois restantes com uma velocidade de 64
(valor padrão).
O PAPEL DE R EM CORDOS COMPLEXOS
As notas de um acorde nem sempre têm a mesma duração. Por exemplo é possível
que, enquanto a nota C [2, 1920,] de duração 4/4 está tocando, o músico tem que tocar quatro
crotchets na seguinte ordem: C [,,,], E [,,,], G [,,,], Bb [,,,]. Tem que haver um jeito
de dizer ao GRAMophone que as notas C [2,, 1920,] e C [,,,] devem começar ao mesmo tempo,
que E [,,,] deve começar após uma pausa de 1/4, G [,,,] após 2/4 e Bb [,,,] após 3/4. No
GRAMofone é escrito da seguinte forma:
^ C [2,, 1920,] C [,,,] R [] E [,,,] R [960] G [,,,] R [1440] Bb [,,,] ^
Em outras palavras, cada nota do acorde pode ser precedida por uma definição de pausa que representa
o tempo de espera antes de tocar a nota. Não importa a ordem em que você escreve
as notas em um acorde. O acorde no exemplo acima também pode ser escrito:
^ R [] E [,,,] C [2,, 1920,] R [1440] Bb [,,,] C [,,,] R [960] G [,,,] ^
IDENTIFICADORES
Algumas das entidades de linguagem do GRAMophone, variáveis, macros e símbolos não terminais em
A gramática de Chomsky, por exemplo, deve ter nomes pelos quais possam ser identificados. Esses nomes
são chamados de identificadores e são escolhidos pelo compositor. Os identificadores de GRAMophone seguem
o sistema de identificadores usado na linguagem de programação Pascal. Na verdade, um identificador
é composto por uma letra seguida por uma sequência de letras ou dígitos. Do GRAMofone
identificadores também devem ser escritos em minúsculas.
Gramática de Chomsky
SÍMBOLOS NÃO TERMINAIS
Na gramática de Chomsky, os símbolos não terminais são usados para dar uma estrutura ou 'estilo' ao
composição musical. Eles são escritos com um '@' imediatamente seguido por um identificador.
A gramática de Chomsky usada pelo GRAMophone é livre de contexto, então o chefe da produção pode
ser apenas um não terminal.
O SÍMBOLO NÃO TERMINAL @composition
Este símbolo não terminal, que corresponde à composição final de um único jogador,
é obrigatório.
OPERADOR DE PRODUÇÃO
Isso é definido pela sequência de caracteres '->' e separa o chefe da produção
do corpo.
CORPO DA PRODUÇÃO
Isso pode conter sequências de terminais (notas, pausas e acordes) e não terminais
símbolos. Cada produção deve terminar com um ponto e vírgula.
| (OU) OPERADOR
Uma produção pode ser não determinística: ou seja, pode apresentar duas ou mais escolhas
durante a geração. O corpo de uma produção não determinística é feito de várias
escolhas separadas por | operador. Por exemplo
@ non_det-> A [,,,] B [,,,] @ Seq1 | ^ A [,,,] B [,,,] C [,,,] ^ @ Seq2R [] C [,,,];
é uma produção não determinística.
SIGNIFICADO DA ITERAÇÃO NO GRAMÁTICO CHOMSKY
Na gramática de Chomsky, uma produção pode incluir ciclos, ou seja, corpos de produção contendo
símbolos terminais que se referem à produção realmente sendo produzida. Por exemplo:
@ Sequenza1-> B [,,,] A [,,,] C [,,,] @ Sequenza1;
Para evitar um loop infinito durante a geração, o símbolo não terminal @ Sequenza1 é
processado um número igual de vezes para o parâmetro iterations.
Gramática de Lindenmayer
A gramática de Lindenmayer lida apenas com símbolos terminais e a versão do GRAMophone pode ser
livre de contexto ou trabalhar em um contexto polifônico. Portanto, notas únicas ou acordes podem aparecer
à frente da produção. Todas as produções são separadas por ponto e vírgula.
AXIOM
Esta é a produção inicial a partir da qual a geração começa. É obrigatório. PRODUÇÃO
OPERADOR
Isso é definido pela sequência de caracteres '->' e separa o chefe da produção
do corpo.
| (OU) OPERADOR
Uma produção pode ser não determinística: ou seja, pode apresentar duas ou mais escolhas
durante a geração. O corpo de uma produção não determinística é feito de várias
escolhas separadas por | operador. Por exemplo
A [,,,] -> A [,,,] B [,,,] | C [,,,] D [,,,];
é uma produção não determinística.
SIGNIFICADO DAS ITERAÇÕES NO GRAMÁTICA LINDENMAYER
A cada passo, todas as produções da gramática são aplicadas simultaneamente à seqüência de notas.
Neste caso, o parâmetro iterations representa o número de etapas a serem realizadas.
Uso de variáveis
DECLARAÇÃO E INICIALIZAÇÃO DE VARIÁVEIS
GRAMophone é capaz de controlar os atributos de uma nota parametricamente através do uso de
variáveis. Essas variáveis são declaradas na seção de declaração do jogador e podem ser de
os seguintes tipos: oitava, velocidade, duração e msb. Uma variável é declarada por escrito
seu tipo seguido por um ou mais identificadores separados por uma vírgula. A declaração deve
termine com um ponto e vírgula. O identificador de um jogador deve ser declarado apenas uma vez.
A seguir estão as declarações corretas:
velocidade x, y;
oitava oitava, z;
duração w;
O que se segue são declarações incorretas:
velocidade x, x;
oitava z;
duração z;
Após a seção de declaração e antes da gramática, é possível inicializar
variáveis por meio do operador =.
A seguir está um exemplo de declaração e inicialização:
velocidade x;
x = 0;
USANDO VARIÁVEIS COM NOTAS
Variáveis são usadas em expressões de atributos de notas. GRAMophone controla os tipos dentro
expressões, portanto, não é possível adicionar uma variável de oitava a uma variável de velocidade, para
exemplo.
A seguir está um exemplo de uma variável de nota:
velocidade x;
duração z, w;
A [4, x, z + w,].
EXEMPLO
composição "Crescendo" de "Schroeder" {
// esta composição gera notas de 64 A com uma velocidade crescente
gramática chomsky
ritmo 120
assinatura_hora 4/4
iterações 64
%
jogador Schroeder {
instrumento 40
%
velocidade x = 0;
@ composição-> A [, x = x + 1 ,,] @ composição;
}
}
CONDIÇÕES
Nas gramáticas de Chomsky e Lindenmayer, é possível definir condições para o
variáveis no corpo de produção. Se a condição for verdadeira, a produção é executada;
caso contrário, não é. Uma condição é definida imediatamente após o nome da produção
por meio do '?' símbolo, seguido por uma ou mais expressões booleanas.
Os operadores booleanos são:
! não
&& e
|| ou
Os operadores relacionais são:
== guale
! = diverso
<menor
> maggiore
<= minore o uguale
> = maggiore o uguale
A seguir está um exemplo de uma produção condicional.
@battuta? x! = 0-> A [, x = x-10 ,,] @ battuta;
o que significa: enquanto x não for igual a zero, gere a produção de @battuta; caso contrário, faça
não.
Discografia, biblioteca do GRAMophone
GRAMophone pode incluir bibliotecas externas, chamadas discografias. Para incluir um
discografia em um arquivo de origem, use a palavra-chave discografia seguida do nome do arquivo. UMA
a discografia pode ser incluída em qualquer ponto do arquivo de origem, desde que seu conteúdo corresponda
a posição da fonte onde foi incluída.
Macros
As macros podem ser definidas usando a palavra-chave define, seguida por um identificador em minúsculas e um
string colocada entre vírgulas invertidas. As macros devem ser definidas no início da fonte
composição, antes da palavra-chave composição. Por exemplo, para simplesmente escrever um
em vez de A [,,,], a seguinte macro deve ser definida: definir um "A [,,,]"
Funções no GRAMophone
A FUNÇÃO repeat ()
A função repeat () leva um valor de tipo msb mais uma sequência de Chomsky ou Lindenmayer. Isto
permite que a sequência incluída seja repetida um número de vezes igual ao msb
digite o valor.
A FUNÇÃO rand ()
A função rand () recebe uma expressão e retorna um valor aleatório que é menor que o
valor da expressão.
Operadores melódicos em GRAMophone
transpor()
O operador transpose () assume um valor do tipo msb mais uma sequência de Chomsky ou Lindenmayer.
Ele gera uma sequência em que todas as notas na sequência relevante são transpostas por
um número de semitons igual ao valor do tipo msb.
inversão ()
O operador inversion () pega uma sequência de Chomsky ou Lindenmayer. Ele gera uma sequência
em que os intervalos entre a primeira e as outras notas na sequência feita são
calculado ao contrário.
retrógrado()
O operador retrógrado () usa uma sequência de Chomsky ou Lindenmayer. Ele gera uma sequência
que é o contrário da seqüência inserida.
Use gramophone2 online usando serviços onworks.net