Osciloscopio laser II (Figuras de Lissajous)

21 de Septiembre de 2008 por cogollo

Ahora que tengo una fuente de alimentación apropiada para el puntero láser de mi osciloscopio y ya he cogido algo de confianza usando Processing no podía pasar mucho tiempo antes de ponerme a fardar.

Para empezar poco a poco he pensado que podríamos hacer unas buenas, viejas, figuras de Lissajous. Son fáciles de implementar, agradables a la vista y nunca pasan de moda.


Proyectando sobre la pared del salón

A continuación te pego el código fuente que mueve esto. Es bastante sencillo y lo he comentado a conciencia, así que espero que, aparte de masajear mi ego, tenga algún valor didáctico. Considérate libre de retorcerlo y mutilarlo como te venga en gana. Tendrás que bajarte la librería de sonido Ess r2 para que funcione, pero por lo demás solo tienes que pulsar play y sentarte a disfrutar.

//Lissajous.pde
//Programa para generar figuras de Lissajous en movimiento
//en un osciloscopio conectado a la salida de audio del PC.
 
import krister.Ess.*;
 
//Este objeto se encargará de manejar el canal izquierdo
AudioStream chanel1;
//Idem con el canal derecho
AudioStream chanel2;
//Onda sinusoidal asociada al canal izquierdo
SineWave Wave1;
//Onda sinusoidal asociada al canal derecho
SineWave Wave2;
 
//Relacion entre la frecuencia de Wave1 y Wave2
int bucles=0;
//Contador con el numero de frames que llevamos
int cont = 0;
 
void setup() {
 
  // Inicializa Ess (la libreria de audio)
  Ess.start(this);
 
  //Creamos dos nuevos streams de audio
  chanel1=new AudioStream();
  chanel2=new AudioStream();
 
  // y dos nuevas ondas a 60 y 61 Hz y rellenamos el buffer de cada
  //canal con una de ellas-
  Wave1=new SineWave(61 ,1);
  Wave1.generate(chanel1);
  Wave2=new SineWave(60,1);
  Wave2.generate(chanel2);
 
  //Comienza a reproducir las ondas a traves de la salida de audio
  chanel1.start();
  chanel2.start();
 
  //Estableciendo el pan del canal uno a 0.3333 conseguimos que
  //su sonido solo salga por el canal izquierdo.
  chanel1.pan(0.3333);
  //Para el canal2 el -0.3333 hace que el sonido salga por el canal derecho.
  chanel2.pan(-0.3333);
}
 
void draw()
{
  cont++;
 
  if(cont > 300)       //Cada 300 frames (10 sg) disminuimos
  {                    //la frecuencia de Wave2 para obtener la
    cont = 0;          // siguiente figura
    bucles++;
    if(bucles >2)      //Cuando hemos hecho esto tres veces volvemos a empezar
      bucles = 0;
    //La nueva frecuewncia sale de dividir por un entero la frecuencia inicial
    //menos un Hz. Ese Hz de diferencia es lo que hace que las figuras giren.
    Wave2.frequency = (Wave1.frequency-1)/(bucles+1);
    //Para un mismo volumen la amplitud de la onda es inversamente proporcional
    //al cuadrado de la frecuencia. Así que para mantener las proporciones de
    //la figura tenemos que cambiar el volumen de Wave2 en consecuencia
    Wave2.volume = Wave1.volume / ((bucles+1)*(bucles+1));
  }
}
 
//Esta funcion se llama automagicamente cuando hay que rellenar algún buffer de audio
void audioStreamWrite(AudioStream theStream) {
  SineWave myWave;
  if(theStream==chanel1){
    myWave=Wave1;
  }
  else{
    myWave= Wave2;
  }
 
  //Genera más onda de sonido
  myWave.generate(theStream);
 
  // Ajustamos la fase para que no se produzcan saltos
  myWave.phase+=theStream.size;
  myWave.phase%=theStream.sampleRate;
}
 
//Al cerrar, para Ess
public void stop() {
  Ess.stop();
  super.stop();
}

Publicado en Nuestros hacks | 2 Comentarios »


2 comentarios


  1. Pax Dice:

    hola, he visto videos de curvas de lissajous en internet y hay unos muy buenos, ponen letras en un osciloscopio, letras ke giran, etc… sabes como puedo hacerlo?? solo me interesa tener el programa y tal vez un archivo de muestra para poder entender como lo crean y cambiarle de poco en poco hasta formar uno diferente mio, te agradezco si me sacas de mi duda


  2. cogollo Dice:

    Pax, supongo que te refieres a esto:

    http://www.youtube.com/watch?v=s1eNjUgaB-g&eurl=http://waxy.org/2008/02/oscilloscope_fu/

    Básicamente, funciona conectando el osciloscopio en modo x-y a la salida de sonido del ordenador, de modo que el canal derecho controle la posición x del punto luminoso y el canal izquierdo la posición y. El principio es el mismo que el que usamos nosotros para manejar nuestro osciloscópio laser, pero con formas de onda mucho más complejas.
    El creador del video también ha colgado el archivo wav que ha utilizado.
    http://mirror.kapsi.fi/koodaa.mine.nu/tvt/youscope-wave.wav
    Para ver esos efectos solo tienes que reproducir el archivo y conectar tu osciloscópio a la toma de auriculares.
    Necesitarás un osciloscópio “de verdad” ,eso sí, porque el nuestro, como tiene que mover físicamente los espejos, no puede responder con la rapidez suficiente.


Deja un comentario

Por favor: La moderación de comentarios está activada y puede ser que los comentarios tarden un poco en aparecer. No es necesario volver a publicar el comentario una segunda vez.