Pular para o conteúdo
Untzel
Estreia 09.10
Páginas da documentação

Guia da linguagem

O código Untzel é uma linguagem pequena e fechada, feita para música. Ela é analisada, nunca executada: não tem funções, variáveis, laços nem importações, então o mesmo texto toca sempre a mesma música, no app e onde mais for aberto. Palavras-chave, nomes de instrumento, parâmetros e códigos de erro são em inglês; o app mostra cada mensagem de erro no idioma dele.

Todo exemplo desta página toca como está. Copie, cole no painel Code e mude.

A estrutura de um texto

Um texto tem quatro partes, nesta ordem, e todas são opcionais:

  1. globais: title, tempo, key, swing e loop;
  2. faixas, uma por linha;
  3. seções, com section;
  4. no máximo um song.

Linha vazia é ignorada, e // começa um comentário que vai até o fim da linha.

// globals first, then tracks, then sections, then the songtempo 124key a minorswing 0.08kick: kick x... x... x... x...hat:  hat  ..x. ..x. ..x. ..x.bass: bass a1 . . a1 . . c2 .section intro kick hatsection main  kick hat basssong intro 8, main 16 | loop

Sem song, toda faixa que não tem mute toca em loop.

Tempo, tom, swing e loop

tempo define as batidas por minuto, de 40 a 300; sem ele o texto toca a 132. Um valor fora da faixa é erro, nunca um ajuste silencioso.

key recebe uma tônica, de a a g com b ou # opcional, e uma escala: minor, major, dorian, phrygian ou chromatic. Sem ele o tom é c minor.

swing atrasa as colcheias pares, de 0 até 0,5. Cada global aparece uma vez só.

tempo 126key d dorianswing 0.12hat:  hat  x.x. x.x. x.x. x.x.bass: bass d2 . f2 . a2 . c3 .

Comprimento do loop

loop define quantos compassos dura uma passada do modo Loop, um número inteiro de 1 a 16. Em cada passada todos os padrões e sinais recomeçam do compasso 1: um padrão de 2 compassos toca 4 vezes num loop 8, e um padrão mais longo que o loop toca só os primeiros compassos. Sem loop, cada padrão se repete no próprio tamanho, como antes.

// 8 bars per pass: the 2-bar bass plays 4 times and the cutoff rises across the passtempo 124key c minorloop 8kick: kick x... x... x... x...hat:  hat  ..x. ..x. ..x. ..x.bass: bass . c2 . c2 . c2 . eb2 / . ab1 . ab1 . c2 . g1 | cutoff saw(8) 300..2400

Um comprimento novo entra no próximo compasso e a música nunca para. O modo Song ignora loop: ali mandam as seções e a linha song. loop continua sendo nome de faixa válido e a palavra do fim de song … | loop. O chip Length do transporte escreve essa linha por você (Usar o app).

Título da música

title "Midnight Coast" dá nome à música: até 60 caracteres entre aspas duplas, onde \" escreve uma aspa e \\ uma barra invertida. Ele nunca muda o som. O app mostra o título na barra de cima e na aba do navegador, e ele vai para os nomes dos arquivos, para o vídeo exportado e para o link compartilhado. Renomear a música no app escreve essa linha (Usar o app). Título vazio ou com mais de 60 caracteres é aviso, não erro: a música continua tocando, sem título ou com os 60 primeiros caracteres. Uma segunda linha title é erro, como um segundo tempo. title continua sendo nome de faixa válido.

// the title names the song; it never changes the soundtitle "Midnight Coast"tempo 122key f minorkick: kick  x... x... x... x...keys: piano Fm7 ~ ~ ~ / Dbmaj7 ~ ~ ~

Faixas com nome

Uma linha de faixa tem um nome opcional seguido de dois-pontos, um instrumento, um padrão e modificadores depois de |. O nome é como seções, blocos e mensagens se referem à faixa. Nomes são minúsculos, começam por letra e têm no máximo 24 caracteres.

Duas faixas podem usar o mesmo instrumento com padrões e sons diferentes: cada faixa é uma instância independente. Uma faixa sem nome recebe o nome do instrumento, ou o próximo número livre.

// two bass tracks: two independent instancessub:  bass c1 . . . c1 . . .   | cutoff 160bass: bass . . c2 . . . eb2 .  | cutoff 900 | pan 0.2// without a name, a track takes the instrument's: hat, then hat2hat ..x. ..x. ..x. ..x.hat x.x. x.x. x.x. x.x.        | gain 0.4

A ordem das linhas é a ordem das faixas na tela.

Padrões: a mini-notação

Um padrão descreve um compasso; / separa os compassos de um padrão mais longo, que se repete quando acaba. Os passos de um compasso dividem o tempo por igual.

EscrevaQuer dizer
x X .uma batida, uma batida acentuada, uma pausa. Numa sequência como x... cada caractere é um passo
~prolonga o passo anterior por mais um passo: x~~~ segura uma batida por quatro passos
c2 eb2 f#1uma nota com a oitava, para instrumentos que tocam notas
[x x]um grupo: subdivide um passo
x? x?0.3toca com uma chance; sem número a chance é 0,5
x*4 [c2 g1]*2repete dentro do mesmo passo
/o próximo compasso do padrão
kick:  kick X... x... X... x...clap:  hat  .... x~.. .... x~..   | open 0.4roll:  hat  x x [x x] x*2         | decay 0.03ghost: hat  x?0.3 x? x? x?        | gain 0.5fill:  kick x... x... x... x... / x... x... x.x. xxxx

Contar passos

Espaços separam elementos, mas numa sequência de batidas cada caractere já é um passo, então x... x... e x...x... são os mesmos oito passos. x... x... x... x... é um compasso de 16 passos, cada um uma semicolcheia; c2 . eb2 c3 . c2 g1 . tem 8 passos, cada um uma colcheia. Um compasso tem no máximo 64 passos e grupos se aninham no máximo 4 níveis.

Notas e acordes

Instrumentos que tocam notas recebem nomes de nota em minúscula com a oitava: c1, eb2, f#1. Um . é pausa e ~ segura a nota.

key c minorsub:  bass c1 ~ . c1 ~ . c1 .         | cutoff 180line: bass c2 eb2 g2 bb2 c3 . g2 .    | cutoff 1200 | decay 0.2

Notas ligadas por + soam juntas num passo, como um acorde que você mesmo abre: c3+eb3+g3. Um ! depois de uma batida ou de uma nota a acentua, como o X na bateria.

key c minorkeys: piano c3+eb3+g3 ~ ~ . bb2+d3+f3 ~ . . | reverb widekick: kick x . . . x . . . x . . . x! . x .lead: lead c4! . eb4 . g4 . bb4! .      | cutoff 2000

Nomes de acorde começam com maiúscula, como Cm7, Abmaj7 ou Gsus4, e precisam de um instrumento do tipo chord. Escrever um acorde para um instrumento que toca notas é o erro PATTERN_KIND_MISMATCH (referência).

Disponível agora Acordes. Nomes de acorde como Cm7 precisam de um instrumento do tipo chord.

A trava de tom

Com key, toda nota fora da escala vai para o grau mais próximo dela, então nota errada é impossível. | free desliga a trava numa faixa, e key c chromatic desliga no texto inteiro.

key c minor// in c minor, e2 plays eb2 and b2 plays bb2locked: bass c2 e2 g2 b2// free plays every note as writtenloose:  bass c2 e2 g2 b2   | free

Modificadores

Modificadores vêm depois do padrão, cada um depois de um |, e são lidos da esquerda para a direita. Se o mesmo modificador aparece duas vezes, vale o último, e o anterior recebe o aviso DUPLICATE_MODIFIER; aviso nunca para a música.

Há modificadores gerais que toda faixa aceita (gain, pan, tone, reverb, delay, duck, transpose, swing, shift, mute, free) e os parâmetros de cada instrumento, como cutoff no bass ou open no hat. A tabela completa com cada faixa está na referência, e cada parâmetro de instrumento está na página Instrumentos.

kick: kick x... x... x... x...       | drive 0.4bass: bass c2 . c2 . c2 . eb2 .      | duck 0.7 | tone 0.6echo: bass . . g2 . . . c3 .         | delay 3/16 | reverb sea | gain 0.5 | pan -0.4up:   bass c2 . . . c2 . . .         | transpose 12 | shift 2 | mute

Quando tone e um parâmetro que ele move aparecem juntos, vence o parâmetro escrito.

Sinais

Todo parâmetro numérico que permite pode receber uma onda lenta no lugar de um número: uma forma, um período em compassos e uma faixa. A faixa é obrigatória e fica dentro dos limites do parâmetro; o período é de no máximo 256 compassos.

FormaMove
sine(8)sobe e desce suave
tri(4)sobe e desce em linha reta
saw(4)sobe e recomeça
square(2)alterna entre os dois extremos
rand(1)vai para um valor novo a cada período, o mesmo em toda execução
bass: bass c2 . c2 . c2 . eb2 .   | cutoff sine(8) 300..2400hat:  hat  x.x. x.x. x.x. x.x.    | open tri(4) 0..0.8 | pan rand(1) -0.5..0.5rise: hat  x x x x x x x x        | gain saw(4) 0.1..0.8gate: hat  x*4 x*4 x*4 x*4        | gain square(2) 0.2..0.6

Numa música, o sinal recomeça no início de cada seção, então saw(4) numa seção de 4 compassos sobe exatamente do começo ao fim dela (Receitas).

Seções e a música

section dá nome a um conjunto de faixas que tocam juntas; uma faixa pode estar em quantas seções quiser. Uma seção pode mudar o tempo a partir do seu início e o gain de todas as suas faixas. song toca as seções em ordem, cada uma por um número de compassos, de 1 a 256; a mesma seção pode voltar.

tempo 124key a minorkick: kick x... x... x... x...hat:  hat  ..x. ..x. ..x. ..x.sub:  bass a1 . . a1 . . a1 .     | cutoff 180bass: bass . a2 . a2 . c3 . e2    | cutoff saw(4) 300..1800section intro kick hatsection build kick hat sub bass   | gain 0.8section drop  kick hat sub bass   | tempo 126song intro 8, build 4, drop 16, intro 4

Repetir a música

Uma música para quando acaba. Com | loop no fim da linha song, ela recomeça.

kick: kick x... x... x... x...bass: bass c2 . . c2 . . g1 .section a kicksection b kick basssong a 4, b 8 | loop

Seções sem música

kick: kick x... x... x... x...hat:  hat  ..x. ..x. ..x. ..x.// no song: in Song mode each section plays 8 bars, in order, in a cyclesection first  kicksection second kick hat

Modos Loop e Song

O modo não fica escrito no texto: é um seletor do transporte, como tocar e parar. No modo Loop toda faixa sem mute toca sem fim, em passadas de loop <bars> quando o texto tem, e as seções são ignoradas. No modo Song as partes tocam em ordem; com seções e sem song, cada seção toca 8 compassos, em ordem, em ciclo. mute silencia a faixa nos dois modos, mesmo dentro de uma seção. O trecho de execução também não é escrito: escolher quais compassos ou partes repetem muda como você toca, nunca o texto (Usar o app).

Limites

A linguagem não limita faixas, faixas por instrumento, seções nem partes da música; o aparelho limita, e o medidor de CPU mostra quanto está em uso. Os limites fixos protegem o analisador e mantêm o texto legível: um texto tem no máximo 65.536 caracteres, um padrão no máximo 64 compassos. Todos os limites estão na referência.

Determinismo

A chance (?) e o rand são sorteados a partir de uma semente feita do próprio texto, do nome da faixa e do compasso. O mesmo texto toca as mesmas notas toda vez, em qualquer aparelho. Mude um caractere do texto e o sorteio muda; a linha title é a exceção, então renomear uma música nunca muda o que ela toca.

Conteúdo da documentação do Untzel, sob a licença CPAL-1.0. Ler a licença