GrandMA3'te OSC Mesajlarını Plugin ile İşleme
GrandMA3 plugin sistemi ve Lua dilini kullanarak OSC mesajlarını nasıl alıp işleyeceğinizi adım adım öğrenin.
OSC ve GrandMA3 Plugin Sistemi
OSC (Open Sound Control), sahne ekipmanları arasında gerçek zamanlı veri iletişimi sağlayan hafif bir ağ protokolüdür. GrandMA3, OSC mesajlarını doğrudan konsoldan alabilir; ancak bu mesajları özel mantıkla işlemek için Lua tabanlı plugin sistemi devreye girer. Bu kombinasyon, dış cihazlardan gelen sinyalleri sahne otomasyonuna bağlamanın en esnek yoludur.
GrandMA3'te OSC Alımını Etkinleştirme
Plugin yazmadan önce konsolun OSC trafiğini dinleyecek şekilde yapılandırılması gerekir.
- Menu → Network → OSC bölümüne gidin.
- OSC Input seçeneğini etkinleştirin.
- Dinlenecek UDP port numarasını belirleyin (varsayılan:
8000). - Gerekirse gelen IP adresini filtreleyin.
İpucu: Test aşamasında IP filtresini kapalı bırakın; böylece herhangi bir cihazdan gelen mesajları yakalayabilirsiniz. Canlı kullanımda mutlaka kaynak IP kısıtlaması ekleyin.
Plugin Yapısını Oluşturmak
GrandMA3'te bir plugin, Main ve isteğe bağlı Update fonksiyonlarından oluşur. OSC mesajlarını işlemek için gma.osc.recv() fonksiyonunu düzenli aralıklarla çağıran bir döngü kurmanız gerekir.
Temel plugin iskeletini şöyle oluşturabilirsiniz:
local function Main(display_handle, argument) while true do local path, value = gma.osc.recv() if path then -- mesaj işleme bloğu end coroutine.yield() endend
Önemli: coroutine.yield() çağrısı olmadan döngü konsolu kilitler. Her iterasyonda bu satırın bulunması zorunludur.OSC Mesajını Ayrıştırmak ve Komuta Dönüştürmek
Gelen path değeri, mesajın hangi işlevi tetikleyeceğini belirler. Aşağıdaki örnek, /fixture/dimmer yolundan gelen değeri bir fixture'ın dimmer kanalına uygular:
if path == "/fixture/dimmer" then local level = math.floor(value * 100) gma.cmd("Attribute 'Dimmer' At " .. level)end
Birden fazla OSC yolunu yönetmek için if/elseif zinciri yerine bir dispatch tablosu kullanmak kodu daha okunaklı hale getirir:
local handlers = { ["/cue/go"] = function(v) gma.cmd("Go Seq 1") end, ["/cue/stop"] = function(v) gma.cmd("Stop Seq 1") end, ["/master/dim"] = function(v) gma.cmd("Assign Master At " .. v*100) end}if handlers[path] then handlers[path](value) end
Değer Aralıklarını Normalize Etmek
OSC protokolü değerleri genellikle 0.0 – 1.0 aralığında gönderir. GrandMA3 komutları ise çoğunlukla 0 – 100 tam sayı bekler. Bunu sağlıklı dönüştürmek için:
math.floor(value * 100)ile tam sayıya çevirin.math.max(0, math.min(100, level))ile değeri sınır dışına çıkmaktan koruyun.- Negatif veya
nilgelen değerleriif value thenkontrolüyle filtreleyin.
Hata Ayıklama ve Loglama
Plugin geliştirirken gelen mesajları görünür kılmak, hataları hızla tespit etmenizi sağlar. gma.echo() fonksiyonu mesajı konsol komut satırına yazdırır:
gma.echo("OSC alındı: " .. tostring(path) .. " = " .. tostring(value))
Üretime geçmeden önce bu satırları kaldırın veya bir debug bayrağı değişkeniyle kontrol altına alın; aksi hâlde yüksek frekanslı OSC akışı arayüzü yavaşlatabilir.