Gibber
Gibber es un entorno de codificación en vivo para la performance audiovisual. Algunas cosas que hacen que Gibber sea diferente incluyen:
- Anotaciones y visualizaciones novedosas dentro del entorno de edición de código.
- Semántica unificada para secuenciar audio e imágenes.
- Soporte para codificación con librerías audiovisuales externas, como p5.js e hydra.
- Soporte para actuaciones de conjunto en red.
Referentes
Groovy CAJ
Mule
Manejo básico
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
- Introducción a Gibber
- Configuración inicial
- Conceptos básicos de programación en Gibber
- Creación de sonidos
- Secuenciación y ritmos
- Efectos y modulación
- Composición y estructura
- Técnicas avanzadas
- Consejos y trucos
- 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:
- Composición algorítmica
- Actuaciones en vivo de música electrónica
- Educación en programación y música
- Experimentación con síntesis de sonido
2. Configuración inicial
Para empezar a usar Gibber, sigue estos pasos:
- Abre tu navegador web (preferiblemente Chrome o Firefox).
- Visita la página oficial de Gibber: http://gibber.cc/
- Haz clic en "Play" para abrir el entorno de programación.
- 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
- Usa
Ctrl + .
para detener todos los sonidos. - Experimenta con diferentes combinaciones de secuencias y efectos.
- Utiliza la función
clear()
para reiniciar tu sesión. - Guarda tu trabajo regularmente usando la función de guardado de Gibber.
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)