Gibber

Gibber es un entorno de codificación en vivo para la performance audiovisual. Algunas cosas que hacen que Gibber sea diferente incluyen:

Referentes

Groovy CAJ

Mule

Manejo básico

Correr código

hit alt+enter para correr todo el código.
ctrl+enter, para correr una línea.
ctrl+period, Parar todos los sonidos.

Tutorial Completo de Gibber

Índice

  1. Introducción a Gibber
  2. Configuración inicial
  3. Conceptos básicos de programación en Gibber
  4. Creación de sonidos
  5. Secuenciación y ritmos
  6. Efectos y modulación
  7. Composición y estructura
  8. Técnicas avanzadas
  9. Consejos y trucos
  10. Recursos adicionales

1. Introducción a Gibber

Gibber es un entorno de programación musical en vivo basado en navegador. Fue creado por Charlie Roberts y permite a los usuarios crear música y gráficos en tiempo real utilizando JavaScript. Gibber es ideal para:

2. Configuración inicial

Para empezar a usar Gibber, sigue estos pasos:

  1. Abre tu navegador web (preferiblemente Chrome o Firefox).
  2. Visita la página oficial de Gibber: http://gibber.cc/
  3. Haz clic en "Play" para abrir el entorno de programación.
  4. Verás una interfaz con un editor de código a la izquierda y una consola a la derecha.

No se requiere instalación adicional, ya que Gibber se ejecuta directamente en el navegador.

3. Conceptos básicos de programación en Gibber

Gibber utiliza JavaScript como lenguaje de programación. Aquí hay algunos conceptos básicos:

Variables

let synth = Synth('bleep')
let beat = Drums('x*o*')

Funciones

const playMelody = () => {
  synth.note.seq( [0,2,4,5], 1/4 )
}

Bucles

loop( 4, () => {
  synth.note( rndi(0,12) )
})

4. Creación de sonidos

Gibber ofrece varios objetos para generar sonidos:

Sintetizadores

let synth = Synth('square')
synth.play(440) // Toca la nota A4

Samples

let kick = Sample('kick.wav')
kick.trigger()

FM (Modulación de frecuencia)

let fm = FM('brass')
fm.play('C4')

5. Secuenciación y ritmos

Gibber tiene potentes herramientas para crear patrones rítmicos:

Secuencias básicas

let seq = Seq( () => synth.play( rndi(0,12) ), 1/4 )

Euclidean Rhythms

let euclid = Euclid(3,8)
kick.trigger.seq( euclid, 1/8 )

6. Efectos y modulación

Puedes añadir efectos a tus sonidos:

synth.fx.add( Delay(1/6) )
synth.fx.add( Reverb() )

Y modular parámetros:

synth.cutoff = LFO( 2, .25, .75 )

7. Composición y estructura

Organiza tu composición usando funciones y objetos Score:

const intro = () => {
  synth.note.seq([0,2,4,7], 1/4)
}

const chorus = () => {
  synth.note.seq([7,5,4,0], 1/8)
}

Score([
  { name:'intro', duration:8, action:intro },
  { name:'chorus', duration:8, action:chorus },
])

8. Técnicas avanzadas

Generación algorítmica

const melody = gen() {
  let scale = Scale.major
  while(true) {
    yield scale.pickRandomInRange(-7, 7)
  }
}

synth.note.seq( melody, 1/8 )

Manipulación de audio en tiempo real

let buffer = Audio('path/to/sample.wav')
buffer.pan = Mouse.x
buffer.pitch = Mouse.y

9. Consejos y trucos

10. Recursos adicionales

Este tutorial te ha proporcionado una visión general completa de Gibber. Recuerda que la mejor manera de aprender es experimentar y practicar. ¡Diviértete creando música con código!

Synth().notef(440)
Synth().note(0)
Theory.root = 'c3' Theory.mode = 'ionian'
s = Synth()
s.note.seq([0, 1, 2, 3, 4, 5], 1/4)
s.stop()
s.note.seq([0, 1, 2, 3, 4, 5].rnd(),1/4)
k = Kick() 
k.notef.seq(75, 1/4)
h = Hat() 
h.trigger.seq(0.4,1/16)
d = Drums() 
d.tidal('kd sd kd sd')
d.tidal('[kd, ch] ch [sd, ch] ch [kd, ch] ch [sd, ch] oh')
b = FM('bass') 
b.note.seq(-7, 1/16)
b.index.seq([2,3,4,5,6],1/16)
s.note.seq(Rndi(0,7), Euclid(7,16))

Clock.bpm = 120
Theory.root = 'c4'
Theory.mode = 'aeolian'

s = Synth("bleep").fx.add(Reverb())
s.note.seq(sine(btof(7.6),7,0), Euclid(5,16))

s.stop()

k = Kick()
k.notef.seq(70, 1/4)

k.stop()

h = Hat()
h.trigger.seq(sine(3,0.6,0.05), [1/16,1/8].rnd())
h.tune.seq(Rndf(0.5,0.7), 1/16)

h.stop()

c = Clave().fx.add(Reverb())
c.trigger.seq(sine(0.2,.1,.4), Euclid(6,16))
c.note.seq(sine(5.01,4,5), Euclid(6,16))

c.stop()

cl = Clap().fx.add(Reverb())
cl.trigger.seq(0.6,1,0,1/4)

b = FM('bass')
b.note.seq(-7,1/16)
b.index.seq([2,3,4,5,6],1/16)