Pular para conteúdo

4.3 TimeVar Avançado🔗

TimeVar Singletons🔗

Estas são instâncias do TimeVar que já existem quando o FoxDot é inicializado e representam valores variáveis, como a batida do relógio, e podem ser usadas da mesma forma que outras TimeVar:

Nome da variável Descrição
now Representa a batida atual do relógio
nextbar Representa a batida que iniciará a próxima barra

Funções Avançadas🔗

Compensar a hora de início🔗

Digamos que você queira criar uma sequência de acordes que mude não no início de uma barra, mas após a primeira batida da barra. Como você faria isso com um TimeVar? Vamos dar uma olhada:

# Sequência original de acordes
var([0, 4, 5, 3], 4)

# Atualizar o valor após 1 batida da barra
var([3, 0, 4, 5, 3], [1, 4, 4, 4, 3])

Não é uma solução muito elegante, mas funcionaria. Seria mais fácil apenas deslocar o ponto inicial das durações em uma única batida, não é? Isso pode ser feito usando o parâmetro nomeado start da seguinte maneira:

var([0, 4, 5, 3], start=1)

Isso pode ser combinado com o singleton now para "iniciar" o ciclo de uma variável imediatamente. Por exemplo, podemos aumentar a amplitude de um player de 0 a 1 ao longo de 8 batidas, começando agora:

d1 >> play("x-o-", amp=linvar([0, 1], 8, start=now))

Duração infinita🔗

Às vezes, pode ser preferível que uma TimeVar atinja um valor e permaneça nesse valor. Para fazer isso, usamos uma variável especial chamada inf. É um singleton, o que significa que é uma instância de uma classe, mas existe apenas uma e pode ser usada para informar a uma TimeVar para não alterar seu valor uma vez atingido. Aqui está um exemplo de um linvar aumentando a amplitude para 1 ao longo de 8 batidas e, em seguida, permanecendo nesse valor:

d1 >> play("x-o-", amp = linvar([0, 1], [8, inf]))

Isso também pode ser combinado com os singletons now e nextbar para acelerar imediatamente:

d1 >> play("x-o-", amp = linvar([0, 1], [8, inf], start=now))

Observe: ao calcular a duração total do ciclo a partir do TimeVar, inf é contado como 0 até ser alcançado uma vez que o TimeVar é implementado. Isso significa que o linvar usado acima iniciaria/reiniciaria seu ciclo a cada oitava batida.