audio visualizer

This commit is contained in:
sejo 2021-11-08 07:31:05 -06:00
parent c2a73865cb
commit 909fdef322
1 changed files with 211 additions and 0 deletions

View File

@ -0,0 +1,211 @@
---
title: "Proyecto Final: Audio Visualizer"
---
Utiliza Processing y las herramientas del semestre de Código Creativo para **crear una visualización de audio animada** que consista en al menos **tres estados distintos**.
Aprovecha las **estrategias de repetición** y de **diseño paramétrico**, y las herramientas de **transformación multimedia** (texto, imagen, y/o sonido) para generar y explorar comportamientos complejos en diálogo con el sonido.
Algunas preguntas para tu consideración:
* ¿Es visualizador es para una pieza sonora/musical en específico?
* ¿Qué clase de diálogo entre visuales y sonido quieres construir?
* ¿El cambio entre estados es automático, o tú lo controlas al momento?
* De ser un visualizador interactivo, ¿qué tipo de interacciones te parecería interesante implementar?
* ¿En qué contexto imaginas que puede existir tu creación? ¿La idea es que se repita constantemente o solo suceda una vez?
Realiza el proyecto **individualmente** o **en parejas**.
# Requerimientos técnicos
**Duración mínima** de la visualización en su totalidad: **1 minuto**.
Desde el punto de vista del código, considera cómo los temas del semestre pueden ayudar en tu composición:
* La composición ha de tener **tres estados significativamente distintos**: utiliza enunciados **condicionales** (`if` `else`) para elegir entre ellos, **interactiva o automáticamente**.
* Utiliza estrategias de **dibujo con repetición** (ciclos `for`) en al menos uno de los estados de la composición.
* Utiliza al menos una de las herramientas de **transformación de texto o de imágenes**
* Utiliza al menos una herramienta de visualización de audio: **amplitud** o **frecuencias**
Importante: **no utilices/copies códigos que no hayas escrito tú o que no estén basados en los materiales de clase, en especial cuando contengan conceptos computacionales y/o geométricos que no puedas explicar al resto del grupo**.
## Opcional, pero recomendable
* Utiliza **funciones de dibujo** para organizar tu código.
* Incorpora alguna forma interactiva de **iniciar y reanudar** la visualización
* Experimenta con controles interactivos de parámetros de la composición
# Entrega
La entrega del proyecto consistirá en tres partes:
* Avances del proceso
* Presentación en vivo
* Dossier en PDF
## Avances del proceso
Publica en el foro del Proyecto Final tus referencias, avances, bocetos, código, resultados, dudas, comentarios, etc. al final de cada sesión de trabajo.
**Es indispensable que tengas un post por cada sesión de workshop del proyecto**
## Presentación en vivo
Presentarás tu proyecto al grupo en la última sesión del curso, el **lunes 6 de diciembre de 2021**.
En primer lugar presentarás la visualización en acción, corriendo desde Processing.
Después, utiliza unos 5 minutos para compartirnos:
* Descripción general de tu proyecto: título, descripción, contexto
* Documentación del proceso creativo: referencias, sketches, prototipos, hallazgos, obstáculos
* Conclusiones: lecciones, posible trabajo a futuro
## Dossier en PDF + Video
Complementa tu presentación con un dossier en PDF a entregar a más tardar en la última sesión del curso, en la sección correspondiente de Actividades.
Adjunta además un video de la visualización en funcionamiento.
Incluye en el dossier:
* Descripción general de tu proyecto: título, descripción, contexto
* Demostración del proyecto: imágenes resultantes, enlaces a videos resultantes
* Documentación del proceso creativo: referencias, sketches, prototipos, hallazgos, obstáculos
* Conclusiones: lecciones, posible trabajo a futuro
* Código fuente completo y documentado con comentarios
*Puedes utilizar este dossier como apoyo visual para tu presentación en vivo*
# Workshop
Durante las sesiones de workshop tendremos tiempo para trabajar en el proyecto, resolver dudas individuales o grupales, asesorar posibles soluciones, repasar temas de ser necesario, y documentar los avances en el notebook correspondiente.
Para cualquier duda fuera del horario de clase, entre semana, escríbeme a jvegac arroba centro.edu.mx
# Plantillas de código interactivo
## Dibuja algo distinto según el estado
Este código dibuja una figura distinta según la última tecla que fue presionada:
```java
void setup(){
size(800, 600);
}
void draw(){
background(0);
if( key == '1' ){
noStroke();
square( 350, 250, 100);
}
else if( key == '2' ){
noStroke();
circle( 400, 300, 100);
}
else if( key == '3') {
stroke(255);
strokeWeight(5);
line(0,300, 800, 300);
}
}
```
### Con funciones
Este código es similar pero las acciones a realizar en cada estado se encuentran en sus **propias funciones**:
```java
void setup(){
size(800, 600);
}
void draw(){
background(0);
if( key == '1' ){
uno();
}
else if( key == '2' ){
dos();
}
else if( key == '3') {
tres();
}
}
void uno(){
noStroke();
square( 350, 250, 100);
}
void dos(){
noStroke();
circle( 400, 300, 100);
}
void tres(){
stroke(255);
strokeWeight(5);
line(0,300, 800, 300);
}
```
## Modifica un parámetro con el teclado
Este código utiliza una variable global que corresponde a la separación entre elementos repetidos. Esa variable es decrementada o incrementada con las teclas 'j' y 'k' respectivamente.
Esta plantilla te puede servir de base para modificar otros parámetros de una manera similar.
```java
float separacion = 80; // separación entre círculos
void setup(){
size(800, 600);
}
void draw(){
background( 0 );
stroke(255);
strokeWeight(10);
noFill();
for( float x=0; x<=width; x+= separacion ){
circle( x, 300, 50);
}
}
void keyPressed(){ // se realiza cuando una tecla se presiona
if( key == 'j' ){
separacion -= 10; // decrementa la separación
}
else if( key == 'k' ){
separacion += 10;
}
}
```
## Modifica un parámetro con el mouse
Este código utiliza a la variable `mouseX` como parámetro del ciclo `for` correspondiente al límite de las repeticiones.
```java
void setup(){
size(800, 600);
}
void draw(){
background( 0 );
stroke(255);
strokeWeight(10);
noFill();
for( float x=0; x<= mouseX; x+= 50 ){
circle( x, 300, 50);
}
}
```