OSC-signalen uit Sonic Pi ontvangen in Processing

Inleiding

In deze les leer je hoe je OSC-berichten van Sonic Pi naar Processing kunt verzenden om real-time visualisaties te maken op basis van ontvangen nootwaarden. Sonic Pi stuurt de nootwaarden naar Processing, en Processing gebruikt deze waarden om cirkels te tekenen waarvan de grootte en kleur worden aangepast op basis van de noot.

Benodigdheden

  • Processing geïnstalleerd op je computer
  • Sonic Pi geïnstalleerd en draaiend
  • De OSC-bibliotheek voor Processing (oscP5)

Installatie van oscP5 in Processing

Voordat je aan de slag kunt met OSC in Processing, moet je de oscP5-bibliotheek installeren. Dit doe je als volgt:

  • Open Processing
  • Ga naar Sketch > Import Library > Add Library...
  • Zoek naar oscP5in de bibliotheekbeheerder en klik op Install

Processing Code

Hier is de Processing-code die OSC-berichten ontvangt van Sonic Pi en visualisaties maakt op basis van de ontvangen nootwaarden:

import oscP5.*;
import netP5.*;

OscP5 oscP5;
float noteValue = 0;

void setup() {
  size(800, 600);
  // Start OSC communicatie, luister naar poort 4559
  oscP5 = new OscP5(this, 4559);
}

void draw() {
  background(0);
  
  // Maak visualisaties gebaseerd op de ontvangen nootwaarde
  fill(255);
  ellipse(width/2, height/2, noteValue * 50, noteValue * 50);
  
  // Visualisatie verandert kleur afhankelijk van de nootwaarde
  float colorValue = map(noteValue, 60, 72, 0, 255);
  fill(colorValue, 100, 255 - colorValue);
  ellipse(width/2, height/2, 100 + noteValue, 100 + noteValue);
}

// Deze functie wordt automatisch aangeroepen wanneer een OSC-bericht wordt ontvangen
void oscEvent(OscMessage msg) {
  // Kijk of het bericht het pad "/visualization" heeft
  if (msg.checkAddrPattern("/visualization")) {
    // Controleer of het eerste argument een float is
    if (msg.arguments()[0] instanceof Float) {
      noteValue = msg.get(0).floatValue();  // Haal de floatwaarde op
      println("Ontvangen noot: " + noteValue);
    } else {
      println("Verkeerde datatype ontvangen.");
    }
  }
}

Deze Processing-code doet het volgende:

  • Luistert naar OSC-berichten op poort 4559.
  • Teken een cirkel waarvan de grootte en kleur worden aangepast op basis van de ontvangen nootwaarde van Sonic Pi.
  • De oscEvent() functie ontvangt OSC-berichten en controleert of het bericht een nootwaarde bevat die wordt gebruikt voor de visualisatie.

Sonic Pi Code

Hier is de Sonic Pi-code die OSC-berichten naar Processing stuurt met nootwaarden:

use_osc "localhost", 4559

live_loop :send_osc do
 note = (ring :c4, :e4, :g4, :b4).tick
 osc "/visualization", note.to_f  # Zorg ervoor dat de nootwaarde als float wordt verzonden
 play note
 sleep 1
end

Deze Sonic Pi-code doet het volgende:

  • Stuurt OSC-berichten met nootwaarden naar Processing op poort 4559.
  • Het pad /visualization wordt gebruikt voor het OSC-bericht.
  • Sonic Pi speelt de noot af en stuurt de nootwaarde als float naar Processing.

Uitleg van de visualisatie

Wanneer Sonic Pi een noot speelt, stuurt het de nootwaarde via OSC naar Processing. In Processing wordt een cirkel getekend op het scherm. De grootte van de cirkel is afhankelijk van de nootwaarde, en de kleur verandert op basis van de ontvangen waarde. Lagere nootwaarden resulteren in kleinere en donkerdere cirkels, terwijl hogere nootwaarden grotere en lichtere cirkels genereren.

Test en Uitvoering

Om dit te testen, voer je zowel de Processing-code als de Sonic Pi-code uit. Sonic Pi stuurt dan OSC-berichten met nootwaarden naar Processing, en Processing gebruikt deze om real-time cirkels te visualiseren op het scherm.

Conclusie

Met deze setup kun je eenvoudig OSC-berichten van Sonic Pi naar Processing verzenden om interactieve visualisaties te maken op basis van muzieknoten. Dit opent de deur voor creatieve toepassingen zoals live visuals die reageren op muziek of andere interactieve multimediaprojecten.

Volgende pagina