3.4 PGroups🔗
Básico🔗
Enquanto os padrões são uma lista de valores que são reproduzidos em sequência, os PGroups são grupos de valores que são reproduzidos ao mesmo tempo. Sempre que você usa uma tupla em um Player ou Pattern, ela é automaticamente convertida em um PGroup, que, assim como os padrões, é denotado pela letra maiúscula P no início:
Muitos métodos de padrões também podem ser aplicados a PGroups, como mirror e shuffle. Essa relação também se estende ao "entrelaçamento" de PGroups; usar uma lista ou um padrão como valor em um PGroup criará um padrão de PGroups usando a sequência de valores, como mostrado a seguir:
# Entrelaçando um PGroup
>>> print(P(0, 1, [2, 3]))
P[P(0, 1, 2), P(0, 1, 3)]
# Entrelaçando um PGroup com um padrão
>>> print(P[0, 1, P(2, 3, [4, 5])])
P[0, 1, P[P(2, 3, 4), P(2, 3, 5)]]
# Entrelaçando um PGroup com multiplas listas
>>> print(P(0, [1, 2], [3, 4, 5]))
P[P(0, 1, 3), P(0, 2, 4), P(0, 1, 5), P(0, 2, 3), P(0, 1, 4), P(0, 2, 5)]
PGroups Estendidos🔗
Um PGroup estendido, também conhecido como "PGroup Prime", contém informações adicionais sobre como os valores no PGroup são usados por um objeto Player. Inserir de um operador matemático, como +, ativará um tipo de comportamento quando usado dentro de um Player. Isso geralmente altera as notas de serem tocadas simultaneamente para serem distribuídas ao longo de um período de tempo. Aqui está uma lista de PGroups estendidos e alguns exemplos de código:
PGroup-Star🔗
P*(x, y, z, ...)
Reproduzirá o conteúdo do PGroup distribuído igualmente pelo valor atual de dur do Player.
# Toca 3 notas em 2 batidas, com duração de 2/3 batidas cada
p1 >> pluck(P*(0, 2, 4), dur=2)
# Toca as notas no canal estéreo oposto a cada 4 notas
p1 >> pluck(dur=1/2, pan=PStep(4, P*(-1, 1)))
PGroup-Plus🔗
P+(x, y, z, ...)
Irá tocar o conteúdo do PGroup distribuído igualmente pelo valor atual de sus do Player, independentemente do dur.
# Toca 4 notas sobre uma batida sustentada
p1 >> pluck(P+(0, 2, 4, 6), dur=PDur(3,8), sus=1)
# Varie a sustentação para ouvir a diferença
p1 >> pluck([0, 2, P+(0, 2, 4)], dur=PDur(3,8)*2, sus=var([0.75, 1.5, 3]))
PGroup-DoubleStar🔗
P**(x, y, z, ...)
Igual ao PGroup-Star, mas aleatoriza a ordem em que as notas são tocadas.
PGroup-Div🔗
P/(x, y, z, ...)
Igual ao PGroup-Start, mas apenas atrasa as notas a cada duas vezes que o grupo é tocado.
PGroup-Pow🔗
P^(x, y, z, ..., dur)
Usa o último valor do PGroup para definir o atraso entre cada nota, em vez de utilizar o valor dur ou sus do Player.