strudel resumen

Table of Contents

1. strudel resumen

strudel_icon.png
Símbolo de strudel

1.1. Funciones que se aplican a patrones

1.1.1. Funciones

layer/apply aplican una función: te permiten utilizar funciones que no aceptan method chaining como chooseWithIn
superimpose duplica el sonido actual y aplica la función a una copia

Estas funciones pueden usarse con un numero (absoluto) o con un patrón (relativo)
early, late adelanta/retrasa un patrón
off duplica y retrasa un patrón
echo replica más de una vez, retrasa, y multiplica por un número < 1 la velocidad (echoWith con una función propia)
press y pressBy (retrasa relativo a la duración de la nota, press es pressBy con 0.5)

struct aplica la estructura y mask aplica una máscara
Ojo que se aplican a toda la estructura (da igual dónde estén en la cadena, se aplican “atrás” también)
when aplica una función cuando se cumple la condición (más versátil que struct/mask)

1.1.2. Variaciones rítmicas

euclid
euclidRot

1.2. Funciones que combinan 2 patrones

.add
.sub
.mul
.div
Aunque se suele aplicar un valor fijo, esto también combina 2 patrones:
.fast
.slow
Si sigo ampliando esto las de arriba no admiten también 2 patrones?

1.3. Funciones que combinan Patrones

Pattern.prototype.factories
pure,
stack,
slowcat,
fastcat,
cat,
timeCat,
sequence,
seq,
polymeter,
pm,
polyrhythm,
pr,

1.4. Funciones que se aplican de manera global

compress, fastGap, focus
zoom, linger, ribbon
ply
fast y slow

1.5. Funciones que modifican cómo se aplica una función

Combinadores
inside, outside
lastOf, firstOf

1.5.1. Funciones aleatorias

Si tenemos un stack o un seq antes en la cadena, se aplican a todo de manera homogénea? O puede que se apliquen sólo a un stack y sólo a un seq?
Parece que no se aplica de manera homogénea, y que se puede aplicar a un patrón que está en el futuro, y que suene “ahora”
Combinables con .superimpose
.superimpose(someCyclesBy(0.25, x=>x.fast(2).mul(2)))

Lo que está por debajo de estas funciones es degradeByWith, degradeBy, undegradeBy
sometimesBy y someCyclesBy es stack de dos degradaciones complementarias

sometimesBy (never, almostNever, rarely, sometimes, often, almostAlways, always: number = 0, 0.1, 0.25, 0.5, 0.75, 0.9, 1 respectively)

  • @param {number | Pattern} probability - a number between 0 and 1
  • @param {function} function - the transformation to apply «Function that takes an element of the Pattern as argument»
  • @returns Pattern

someCyclesBy

1.6. Generadores (Funciones que rompen una secuencia en componentes)

Control-related functions en el código

chop, slice, splice, chunk
loopAt, fit, loopAtCps, reset/restart (funciones auxiliares)
arp
chop, striate, slice, splice, fit, loopAtCps

1.7. Funciones de audio

.amp → ganancia lineal
.gain → ganancia exponencial
.jux, .juxBy → juxtapone en un canal sólamente

1.8. Señales

note(saw.range(0,12).segment(24)).add(40)
steady, signal
el 2 indica que van de -1 a 1
el i indica señal invertida
saw y variantes
sine, cosine, square y variantes
rand y variantes
perlin
run

1.9. Funciones de efectos de audio

https://strudel.tidalcycles.org/learn/effects
crush → bitcrusher
reverb → dry, room(mezcla), size, roomsize
delay → delay, delaytime, delayfeedback, o especificar las 3 a la vez separados por “:” .delay(“0.65:0.25:0.9 0.65:0.125:0.7”)

1.10. Funciones de envolvente

.attack, .decay, .sustain

1.11. Funciones de filtro

bpf, hpf, lpf
djf → DJ filter, below 0.5 is low pass filter, above is high pass filter.
bpq

1.12. Funciones de MIDI

.velocity
.midi(’UMC404HD 192k MIDI 1’).midichan(1)
midicmd(“clock*2”).midi(’UMC404HD 192k MIDI 1’)

1.13. Funciones tonales

.add funciona mejor, .transpose, .scaleTranspose a veces no funcionan, quizás porque van con .apply(?)

1.15. Funciones de samples/motores de sonido

.bank
.csound
.s

1.16. Cómo utilizar csound?

Está bien como oscilador pero luego no se puede controlar lo que sucede dentro. Cosas como el filtro y la amplitud mejor que vayan fuera, pero es buen generador de señales inicial para síntesis substractiva

1.17. Tiempo global

Si estás trabajando con un tempo global, sin sincronización MIDI, es mejor hacer un .fast/.slow global porque es más preciso que un setCps, creo que por problemas de precisión en javascript
setCps
cpm, .fast, .slow aplicado de manera global también

1.18. Haps

  • whole
  • part
  • value
  • context
  • stateful (función)

1.19. Escalas disponibles (voicing)

1.21. Conversiones entre flujos

  • Funciones que te convierten de un flujo a otro
    voicing → Turns chord symbols into voicings (notes).
    sound → turns notes into sound
    outside(factor, f, pat) → turns functions that affect notes into functions that affects a level “above”
    return f(pat._fast(factor))._slow(factor);
    notes() no se lleva bien con acordes, te lo limita todo a una nota
    Estas conversiones son reversibles o irreversibles? Puedes cambiar la escala después de haberlo convertido a notas? Creo recordar que no, tenías una manera de acceder “por debajo” (creo que puedes acceder a notas después de haber hecho .notes())
  • Flujo subterráneo: note te crea un flujo subterráneo
  • Cadenas concretas
n parece que se puede utilizar indistintamente con ""
n → .add → .scale → .piano
n → .scale → .piano
stack(seq( n → .add → .scale → .piano ))
chords("") → .dict('lefthand') → .voicing → .struct
chords("") → .rootNotes → .struct
"" → .scale('C minor') → .note()

""  → .scale → .note
n("") → .scale
           ↗ .voicing()
chords("")
           ↘ .rootNotes

1.22. Tips para una presentación

https://strudel.cc/?WDa5bsQ4tf4K
https://strudel.cc/?je_8U8zwjTJw

  • Centrarse en la notación mini
  • Explicar con una plantilla que luego se comparte (poder comentar y descomentar cosas)
  • Utilizar unos sonidos fáciles de recordar y curiosos, y que tengan distinto contenido en frecuencia (por ejemplo crow y cow)
  • Explicar notaciones equivalentes para las mismas cosas: hay muchas maneras de hacer una misma cosa
  • Pattern Alignment
  • Sonidos largos vs cortos (envolvente)
  • Que dure como una media hora y luego haga una demo de live coding (partirla en dos, una de ritmo y otra de armonía/melodía)
  • Atento a los saltos de conceptos que no tienen nada que ver
  • Visualización midi?
  • Equivalencias entre funciones y notación mini
    https://strudel.cc/functions/intro
    https://strudel.cc/learn/factories
    Hay algunas que no vienen, por ejemplo chooseCycles ⇔ |
    https://strudel.cc/?JuxyQuVJs02L
  • Strudel interpreta la última expresión completa como un patrón. Si hay una antes se ignora
  • Acabar con .ribbon
  • Mirar los ejemplos para ver lo que es posible
  • Código de la comunidad!
  • Notas como números, +3, +4. +5, +7
cat(x, y) “<x y>”
seq(x, y) “x y”
stack(x, y) “x,y”
timeCat([3,x],[2,y]) “x@3 y@2”
polymeter([a, b, c], [x, y]) “{a b c, x y}”
polymeterSteps(2, x, y, z) “{x y z}%2”
silence “~”

Author: Julian Lopez Carballal

Created: 2024-11-06 mié 13:00