20.11.2008

Open Sound Control ile Processing – Pure Data Haberleşmesi

Yeni Formlar: Reaktif Müzik yazısında konu Pure Data‘dan (PD) açılmışken, işlemsel ses ve müzik konusunda oldukça kuvvetli olan bu gerçek-zamanlı grafiksel programlama ortamını, şahsen grafik ve video işleme konusunda daha doğrudan kontrol sağladığını düşündüğüm Processing ile haberleştirmenin ve bu iki alemin güçlerini birleştirmenin yolunu gösteren bir yazı yazmaya karar verdim. Burada vereceğim örneği elbette sadece Processing veya sadece Pure Data (pd-extended paketinin içinde gelen veya PD’ye ayrıca ekleyebileceğiniz OSCx ve GEM kütüphanelerini kullanmak suretiyle) ile yapmak da mümkün ama daha karmaşık uygulamalar için (mesela ağ üzerinden, değişik platformlarda yazılmış programların entegrasyonu) bir örnek olma amacı taşıyor.

Hem PD hem de Processing (Python, Ruby, Java, Microsoft.Net, vvvvMaxMSPLiveAPI, OSCulator vb. sayısız ortam gibi) Open Sound Control – OSC protokolünü destekliyor. OSC, bilgisayarlar, synthesizer’lar ve bilimum çeşit multimedya cihazını birbirine bağlamayı kolaylaştırmak için geliştirilmiş, modern ağ teknolojileri ile hatasız, birlikte çalışan, esnek sistemler kurmak için birebir bir protokol. Bunun yanında ağlar üzerinde çalıştığı icin MIDI’nin sunamadığı yeni türden etkileşimlere de (İnternet üzerinden gerçek-zamanlı etkileşim, değişik veri tiplerini ve donanımları birbirine bağlamak gibi) imkan sağlıyor.

İşin Processing ayağından başlayalım:

Önce oscP5 kütüphanesini indirmek gerekiyor. Normalde yapılanın aksine, sıkıştırılmış dosyaları açtıktan sonra libraries klasörüne değil, sketches klasörü içine atıyoruz. Bu kütüphane birçok örnekle gelse de, buradaki amacımız için aşağıdaki gibi sade bir kod yazabiliriz:

import oscP5.*;
import netP5.*;

OscP5 oscP5;
NetAddress myRemoteLocation;

void setup() {
size(400,200);
frameRate(25);
stroke(255);
oscP5 = new OscP5(this,12000);
myRemoteLocation = new NetAddress("127.0.0.1",9999);
}

void draw() {
background(0);
}

void mouseDragged() {
line(mouseX, 0, mouseX, height);

OscMessage msg1 = new OscMessage("/msg1");
OscMessage msg2 = new OscMessage("/msg2");

msg1.add(map(mouseX, 0, width, 69, 100));
msg2.add(50);

oscP5.send(msg2, myRemoteLocation);
oscP5.send(msg1, myRemoteLocation);
}

void mouseReleased(){
OscMessage msg2 = new OscMessage("/msg2");
msg2.add(0);
oscP5.send(msg2, myRemoteLocation);
}

Bu örnek tek bilgisayarda lokal olarak çalışıyor ama IP adresini değiştirerek ağ üzerinde çalışır hale getirmek de olası. Burada 9999 numaralı porta iki mesaj yolluyoruz. Birincisi mouse’un x koordinatını okuyarak 69 ile 100 arasında bir değer ile eşleştiriyor. Daha sonra PD, bu değerleri MIDI girişi olarak alıp frekansa çevirecek.

Bu program çalışırken PD’yi açıp oynamaya başlayabiliriz. Herşeyin düzgün çalışabilmesi için PD_extended–>Preferences–>Startup içinde “oscx”in olması gerekiyor. Pure Data ile haşır neşir olmamış ama bu vesileyle girişmeye niyetlenmiş olan varsa buradan ve buradan başlayabilirler. Temel nesneler dışında dumpOSC ve OSCroute nesnelerini kullanıyoruz ve 9999 no’lu portu dinleyip Processing’den gelen mouse değerine göre frekansı değişen bir kosinüs dalgası yaratıyoruz:

PD kodunu da aşağıya ekleyip ilk eğitsel-öğretsel yazımı burada noktalıyorum:

Diğer yönde, PD’den Processing’e mesaj göndererek, Processing ekranına daire veya kare çizdiren örnek kod:

Düğümküme’de yayımlanan ilgili yazılar:

Etiketler

, , , , , , , , , , , , , , , ,

1 Yorum

  1. arikan

    OSC MIDI’nin önde gideni (Internet üzerinden) diye de tarif edilebilir.

Yorum Yaz