/* abril, 2024
thiare gonzalez
versión 1
referencia de código: https://www.youtube.com/watch?v=96HVTZa4-PA&ab_channel=AirRoom
revisar el ejemplo frequenncyModulation (proveniente de processing) creado por Damien Di Frede
*/
//bibliotecas necesarias para generar sonido
import ddf.minim.*;
import ddf.minim.ugens.*;
// mensaje transmitido en pantalla
String mensaje = "RAGE";
// crear una lista que ingrese cada carácter individualmente
ArrayList<Caracter> caracteres = new ArrayList<Caracter>();
float kerling = 20;
PFONT = fuente;
//variables que serán utilizadas durante el código
Minim minim;
AudioOutput out;
Oscil fm;
void setup()
{
// dibujar la pantalla donde se proyectará la visualización de las ondas
size( 1000, 1000, P3D);
fuente = loadFont("HelveticaNeue-Bold-200.vlw");
// iniciar los objetos que responden a las variables minim y out
minim = new Minim( this );
out = minim.getLineOut();
// crear la onda oscilatoria que se escuchará
// parámetros/Argumentos: frecuencia, amplitud, forma de la onda
Oscil rojo = new Oscil( 400, 0.8, Waves.TRIANGLE );
fm = new Oscil( 15, 5, Waves.SINE);
fm.offset.setLastValue( 200 );
fm.patch( rojo.frequency );
rojo.patch( out );
// parámetros para el texto
textFont(fuente);
fill(220);
textAlign(CENTER, CENTER);
float x = width/3;
float y = height/2;
// volver cada caracter en un objeto
for (int i = 0; 1 < mensaje.length(); i++) {
char c = mensaje.charAt(i);
Caracter caracter = new Caracter(c, x, y);
caracteres.add(caracter);
x -= kerling;
x += textWidth(c);
}
}
class Caracter {
char valor;
float x, y;
float homeX, homeY;
float velocidad = 0.05;
Caracter(char valor, float x, float y) {
this.valor = valor;
this.x = x;
this.y = y;
this.homeX = x;
this.homeY = y;
}
void display() {
text(valor, x, y);
}
void shake() {
x += random(-10, 10);
y += random(-10, 10);
}
void returnHome() {
x = lerp(x, homeX, velocidad);
y = lerp(y, homeY, velocidad);
}
}
void draw()
{
background( 255, 0, 0 );
stroke( 0 );
for (int i = 0; i < out.bufferSize() - 1; i++)
{
float x1 = map( i, 0, out.bufferSize(), 0, width);
float x2 = map(i+1, 0, out.bufferSize(), 0, width);
line( x1, 50 + out.left.get(i)*50, x2, 150 + out.right.get(i+1)*50);
line( x2, 150 + out.left.get(i)*50, x2, 150 + out.right.get(i+1)*50);
}
text( "Modulation frequency: " + fm.frequency.getLastValue(), 5, 15 );
text( "Modulation amplitude: " + fm.amplitude.getLastValue(), 5, 30 );
}
void mouseMoved()
{
float modulateAmount = map( mouseY, 0, height, 220, 1 );
float modulateFrequency = map( mouseX, 0, width, 0.1, 100 );
fm.setFrequency( modulateFrequency );
fm.setAmplitude( modulateAmount );
}
Después de agregar el texto, aparece constantemente el error de que no están bien puestos los murciélagos ({})
Sí se puede ejecutar el código y “escuchar” el color rojo al mover el mouse
Se escucha el color, ya que la longitud de onda del color rojo es de 400 hz, con una amplitud decente para escuchar y no ensordecer. Al mover el mouse, se alteran los Hz y se escuchan dentro de un rango (se debe investigar más a fondo esa parte del código)