Pular para conteúdo

1.4 Variáveis Dependentes do Tempo🔗

Programando no tempo🔗

Quando você está fazendo música live coding, muitas vezes vai querer que as coisas mudem ao longo do tempo. Uma boa maneira de demonstrar isso é usando sequências de acordes. Digamos que você tenha a sequência C-F-C-G, que podemos representar como a lista Python [0, 3, 0, 4], e queremos tocar os acordes por 8 batidas cada, mas com um player que toca notas a cada quarto de batida. Como fazemos isso? Uma solução pode ser usar o método Pattern stutter, que repete valores em um padrão "n" vezes:

>>> print(P[0, 3, 0, 4].stutter(4) + (0, 2, 4))
P[P(0, 2, 4), P(0, 2, 4), P(0, 2, 4), P(0, 2, 4), P(3, 5, 7), P(3, 5, 7),
P(3, 5, 7), P(3, 5, 7), P(0, 2, 4), P(0, 2, 4), P(0, 2, 4), P(0, 2, 4),
P(4, 6, 8), P(4, 6, 8), P(4, 6, 8), P(4, 6, 8)]

Então, para tocar a sequência de acordes acima com um som "pluck", podemos fazer algo assim:

p1 >> pluck(P[0, 3, 0, 4].stutter(32), dur=1/4) + (0, 2, 4)

Com 4 notas por batida e 8 batidas por acorde, podemos facilmente calcular que precisamos repetir cada valor de tom 32 vezes. O problema é que temos de alterar esse valor sempre que alteramos a duração. Se alterarmos a nossa duração para [1/2, 1/4, 1/4], precisaremos fazer alguns cálculos mentais (ou usar Python) para calcular quantas vezes repetir os valores de tom. Para evitar isso, podemos usar variáveis que mudam o seu valor ao longo do tempo, de modo que, após 8 batidas, começamos automaticamente a tocar um tom diferente. Estas são conhecidas como "variáveis dependentes do tempo" ou "TimeVar", para abreviar.

Um TimeVar tem uma série de valores entre os quais alterna após um número predefinido de batidas e é criado usando um objeto var com a sintaxe var([lista_de_valores],[lista_de_durações]). Exemplo:

# A duração pode ser um valor único
>>> a = var([0,3],4)
# 'a' inicialmente tem um valor de 0 quando 0 batidas se passaram
>>> print(int(Clock.now()), a)
0 0
# Após 4 batidas, o valor muda para 3
>>> print(int(Clock.now()), a)
4 3
# Após mais 4 batidas, o valor volta a mudar para 0
>>> print(int(Clock.now()), a)
8 0

Portanto, para resolver o nosso problema original com a reprodução de uma sequência de acordes, poderíamos usar o seguinte código com qualquer valor para a duração e ainda ouviríamos a sequência tocar 8 batidas por acorde:

p1 >> pluck(var([0, 3, 0, 4], 8), dur=[1,1/4,1/4,1/2]) + (0, 2, 4)