Creative Coding
Taller introductivo a conceptos y herramientas de programación y programación visual, presentación y estudio de entornos de scripting y live-coding, entre los cuales Sonic PI, Mosaic, VCV Rack y Hydra. Unos primeros pasos en los territorios de los lenguajes orientados a la creación audiovisual generativa para web, instalaciones o live performance.
[La máquina analítica] podría actuar sobre otras cosas además del número ... suponiendo, por ejemplo, que las relaciones fundamentales de los sonidos en la ciencia de la armonía y de la composición musical fueran susceptibles de tal expresión y adaptaciones, el motor podría componer piezas de música elaboradas y científicas de cualquier grado de complejidad o medida.
Ada Lovelace, 1843
Sobre la programación creativa
Fechas
Desde el 8 de julio hasta el 25 de julio 2024
Aula A.4.2 de la facultad de Bellas Artes, Universitat Politècnica de València
Lunes 8, martes 9, miércoles 10, jueves 11 | de 10:00h a 13:00h
Lunes 15, miércoles 17, jueves 18 | de 10:00h a 13:00h
Lunes 22, miércoles 24, jueves 25 | de 10:00h a 13:00h
Programa
- Teoría. Presentación del taller, panoramica general de las herramientas de programación y programación visual que se usarán en la parte práctica. 2H
- Taller. Descarga e instalación del software ( Parte 1 ), ajustes para los distintos sistemas operativos, resolución de problemas. 1H
-
Teoría. Introducción a VCV Rack, principios básicos de síntesis modular, interactividad con teclado, introducción a interfaces MIDI. 2H
-
Taller. Descarga e instalación del software ( Parte 2 ), ajustes para los distintos sistemas operativos, resolución de problemas. 1H
- Teoría. Introducción a la programación visual con Mosaic, panorámicas de objetos básicos, tipologías de cableado, interactividad con teclado. 2H
- Taller. Practicas de live patching con Mosaic, ejemplos básicos de manipulación de video con webcam. 1H
- Teoría. Introducción al live coding con Sonic Pi, interfaz, aprender código jugando con el sonido. 2H
- Taller. Practicas de live coding con Sonic PI, los primeros synths, secuencias y efectos. 1H
Material
Ejemplos
Links
- Inside The Coder Art At Google's Cultural Institute | Digital Trends
- Quasimondo | Mario Klingemann, Artist
- VCV Library - AS
- VCV Library - Audible Instruments
- VCV Library - Autodafe
- VCV Library - Befaco
- VCV Library - Bogaudio
- VCV Library - Count Modula
- VCV Library - Impromptu
- VCV Library - MindMeld
- VCV Library - NYSTHI
- VCV Library - Surge XT
- VCV Library - Valley
VCV Rack Modules Basics
VCO ( Voltage Controlled Oscillator )
Oscilador controlado por voltaje, es una fuente de voltaje continuo, que emitirá una señal cuya frecuencia es una función de los ajustes. En su forma básica, estas pueden ser formas de onda simples (generalmente una onda cuadrada o una onda de diente de sierra, pero también incluyen ondas de pulso, triángulo y sinusoidal), sin embargo, se pueden cambiar dinámicamente a través de controles como la sincronización, la modulación de frecuencia y la auto-modulación.
Noise
La fuente de ruido: es una fuente que genera un voltaje aleatorio. Los tipos comunes de ruido que ofrecen los sintetizadores modulares incluyen el ruido blanco, rosado y de baja frecuencia.
VCA ( Voltage Controlled Amplifier )
Amplificador controlado por voltaje, generalmente es un amplificador de ganancia unitaria que varía la amplitud de una señal en respuesta a un voltaje de control aplicado. La curva de respuesta puede ser lineal o exponencial. También se llama un multiplicador de dos cuadrantes.
VCF ( VOltage Controoled Filter )
Es un filtro controlado por voltaje, que atenúa las frecuencias por debajo de una determinada frecuencia (paso alto), por encima (paso bajo) o por debajo y por encima (paso de banda). Los VCF también pueden configurarse para proporcionar rechazo de banda (notch), por lo que las frecuencias altas y bajas permanecen mientras que las frecuencias medias se atenúan. La mayoría de los VCF tienen resonancia variable, a veces controlada por voltaje.
LFO ( Low-Frequency Oscillator )
Es un oscilador de baja frecuencia puede estar o no controlado por voltaje. Puede operarse con un período de tiempo desde un cuadragésimo de segundo hasta varios minutos. Generalmente se usa como voltaje de control para otro módulo. Por ejemplo, la modulación de un VCO producirá una modulación de frecuencia, y puede crear vibrato, mientras que la modulación de un VCA(ver abajo) producirá modulación de amplitud y puede crear un tremolo, dependiendo de la frecuencia de control. La onda rectangular se puede utilizar como una función lógica / temporal / disparador.
Mixer
Un módulo que combina voltajes.
Envelope Generator
El generador de envolvente es una fuente de voltaje transitorio. Un disparador ante una compuerta de un generador de envolvente, produce una transición de voltaje en relación con el tiempo. A menudo configurado como ADSR (Attack (ataque), Decay(Decaimiento), Sustain (sostenimiento), Release(liberación)) proporciona un voltaje transitorio que sube y baja. Puede ser activado por un teclado o por otro módulo en el sistema que produce un disparo de rápido aumento en presencia de una puerta. Por lo general, controla la amplitud de un VCA o la frecuencia de corte de un VCF, pero la estructura de conectores del sintetizador hace posible utilizar el generador de envolvente para modular otros parámetros, como la frecuencia o el ancho de pulso del VCO. A veces están disponibles EGs más simples (AD o AR) o más complejos (DADSR: Retardo, Ataque, Decaimiento, sostenimiento, Liberación).
Sequencer
El secuenciador, también llamado a veces secuenciador de pasos analógicos, es una familia de tipos de módulos compuestos que pueden ser una fuente o un procesador. Como fuente, dependiendo de la configuración, puede producir una secuencia de voltajes, que generalmente se establecen ajustando los valores en los mandos del panel frontal. El secuenciador también puede generar un disparador, y/o puerta, en cada paso (etapa). Los secuenciadores pasan por un disparador que se aplica a la entrada del disparador. Los distintos diseños pueden permitir avanzar o retroceder, patrones oscilantes, patrones en orden aleatorio o solo usar un número limitado de etapas.
Quantizer
En su forma más simple, un cuantificador es un módulo que toma un voltaje de control y genera el mismo voltaje redondeado a la nota más cercana.
Clock generator
Un generador de reloj produce un reloj estable que puede usarse como maestro para todos los módulos dependientes del reloj en un sistema.
MIDI ( Musical Instrument Digital Interface )
Es un estándar tecnológico que describe un protocolo, una interfaz digital y conectores que permiten que varios instrumentos musicales electrónicos, ordenadores y otros dispositivos relacionados se conecten y comuniquen entre sí.
OSC ( Open Sound Control )
Es un protocolo para conectar en red sintetizadores, ordenadores y otros dispositivos multimedia con fines como la interpretación musical o el control de espectáculos. Las ventajas de OSC son la interoperabilidad, la precisión, la flexibilidad y una mejor organización y documentación.
Links
- VCV Rack Library
- Omri Cohen Rack video tutorials
- Studio Brootle VCV Rack Patches
- Music Theory Cheat Sheet
- MIDI <--> NOTES <--> CV conversions
References
Ejemplos
Links
- Medios Digitales e Interactivos ( Asignatura BBAA )
- Erkki Kurenniemi DIMI Ballet (Dimi O showcase & performance) 1971
- Pan Sonic plays Kurenniemi (Full Film) LIVE
- Tech Talk: Jessica Kert talks Modular Synthesizer (Electronic Beats TV)
- Claude Debussy "Clair de Lune" // a modular reflection
- Frequencies of musical notes
- Scientific Pitch Notation ( Wikipedia )
- Music Theory Cheat Sheet
- MIDI conversion Table ( note - midi note - frequency)
Ejemplos
osc().out()
osc(20).color(0,1,1).scale( 1 ).out()
shape(3).color(0.5,0,1).scale( 1 ).out()
shape(6).color(0.5,0,1).scale(1,1,()=>window.innerWidth/window.innerHeight).out()
noise(2).rotate(0.3,0.3).color(1,0,0.5).out()
voronoi(10).color(0,1,1).out()
voronoi(10).color(0,() => (Math.sin(time)+1) / 2,1).out()
voronoi(10,1).colorama(10).hue(0.5).saturate([0,1,4,11]).scale(() => 0.5+(0.001*mouse.x)).out()
voronoi(10,1).colorama(10).hue(0.5).saturate([0,1,4,11]).scale(() => 0.5+0.2*a.fft[0]).out()
voronoi(10).color(0,() => a.fft[0] *2,1).out(o0) noise(() => a.fft[1] *200).rotate(1,1).color(1,0,0.5).out(o1) osc(40).color(0,1,1).scale( () => a.fft[2] *2 ).out(o2) shape(7).color(0.5,0,1).scale( () => a.fft[3] *2 ).out(o3) render()
s0.initCam() src(s0).scale(1.5).out()
s0.initCam() src(s0).scale(1.5).pixelate(60,60).saturate(11).out(o1)
s0.initScreen() src(s0).saturate([0,1,4,11]).scale(1.75).kaleid(16).scale(() => 0.5+0.2*a.fft[0]).out()
s0.initScreen() src(s0).scale(1.65).kaleid(8).rotate(0.1,0.1).scale(1.3,1.3,()=>window.innerWidth/window.innerHeight).invert().out(o1) src(s0).mult(o1).saturate(0.5).add(src(o1).modulate(voronoi(15,2)).saturate(0.13)).out()
var test = 0 var func = function(){if(cc[1] == 0) test += Math.PI/12;return test} osc(10).rotate(func).scale(10).out()
// multiples texturas independientes ( MAX 4 ) osc().out(o0) osc(33,0.3,0.3).out(o1) src(o2).modulate(noise(3),0.005).blend(shape(4),0.01).out(o2) osc(3,0.3,33).out(o3) render()
// multiples texturas combinadas ( MAX 4 ) osc().modulateRotate(o0,0.3).out(o0) src(o0).mult(o0,5).blend(o1,0.98).kaleid(3).rotate(() => time/10).out(o1) render(o1)
// ejemplo de feedback osc(10,0.02,0.1).colorama().rotate(3.14/2) .modulate(src(o0).scrollX(0,0.03,0.06),0.09) .blend(o0,0.98) .contrast(1.01) .out(o0)
// MIDI input await loadScript("https://creativecoding.d3cod3.org/material/Hydra/midiInput.js") osc().color(() => cc[3],0,0).out()
// OSC receiving example ( use it with "13_breakcore_live_midi_hydra.txt" example from the SonicPi section ) // check this: https://github.com/ojack/hydra-osc // or this: https://github.com/colinbdclark/osc.js/ await loadScript("https://cdn.jsdelivr.net/gh/ojack/hydra-osc/lib/osc.min.js") _osc = new OSC() _osc.open() _osc.on("*", (m) => { /*console.log(m.address, m.args)*/ }) freq = 0 _osc.on("/cmaster1", (m) => { //console.log(m) freq = m.args[0]/127.0 }) crush = 0 _osc.on("/crush", (m) => { //console.log(m) crush = m.args[0] }) octa = 0 _osc.on("/octa", (m) => { //console.log(m) octa = m.args[0] }) osc(8, () => -0.5*freq, 1) .color(-1.5, -1.5, -1.5) .blend(o0).rotate(-0.5, -0.5) .modulate(shape(4) .rotate(0.5, 0.5) .scale(2) .repeatX(() => (octa*2)+0.1, 2) .modulate(o0, () => crush * 0.5) .repeatY(2, 2)) .out(o0)
Links
- Olivia Jack || Live Coding Visuals with HYDRA Interview
- What is Hydra?
- Hydra Book
- Hydra Functions
- Hydra Functions List
- Hydra Video Synth | Blog and Documentation Portal
- Hydra Internet Garden | Community database of resources
- Naoto Hieda's Hydra tutorials | youtube channel
- Collaborative console for Hydra Synth
- Mastodon Hydra Wall
Ejemplos
Links
Referencias
El live-coding es una nueva dirección en la música y el vídeo electrónicos, y está llegando a un lugar interesante. Los codificadores en vivo exponen y reconfiguran las entrañas del software mientras este genera música y/o imágenes improvisadas.