GrandMA3 Plugin ile MAnet Üzerinden Veri Alışverişi

GrandMA3 plugin geliştirme ortamında MAnet protokolünü kullanarak konsol ve düğümler arasında veri alışverişini öğrenin.

MAnet ve Plugin Entegrasyonu

MAnet, GrandMA3 ekosisteminin omurgasını oluşturan tescilli ağ protokolüdür. Konsollar, NPU'lar, vizüalizörler ve diğer MA cihazları arasındaki tüm veri trafiğini bu protokol yönetir. Bir plugin yazarken MAnet üzerinden veri okumak veya göndermek, show verisiyle gerçek zamanlı etkileşim kurmanın en doğrudan yoludur.

GrandMA3 Lua ortamı, MAnet katmanına doğrudan erişim sağlayan bir dizi yerleşik fonksiyon sunar. Bu fonksiyonları doğru kullanmak; fixture değerlerini okumak, executor durumlarını takip etmek ve hatta harici sistemlerle veri paylaşmak için kritik öneme sahiptir.

Temel Veri Okuma Fonksiyonları

GetVar ve DataPool Erişimi

Plugin içinden konsol değişkenlerine ulaşmanın en sık kullanılan yöntemi GetVar fonksiyonudur. Ancak MAnet üzerindeki paylaşımlı veriye ulaşmak için önce doğru DataPool referansını almanız gerekir.

  • DataPool() — Aktif show'un veri havuzunu döndürür
  • DataPool().Worlds — Tüm world nesnelerine erişim sağlar
  • DataPool().Executors — Executor listesini getirir
  • DataPool().Fixtures — Fixture patch bilgilerine ulaşır

Executor Durum Sorgusu

Bir executor'ın anlık değerini MAnet üzerinden okumak için aşağıdaki yapıyı kullanabilirsiniz:

local exec = DataPool().Executors[1][5] local faderVal = exec.Fader

Burada [1] page numarasını, [5] ise executor numarasını temsil eder. Fader özelliği 0.0 ile 1.0 arasında normalize edilmiş bir değer döndürür.

Veri Gönderme: SetVar ve Komut Arayüzü

MAnet üzerinden veri göndermek için genellikle iki yöntem tercih edilir. İlki doğrudan Lua komut arayüzü üzerinden konsola komut göndermek, ikincisi ise desteklenen objelere doğrudan değer atamaktır.

  1. Konsol komut satırına yazılan her şeyi Cmd() fonksiyonuyla plugin'den tetikleyebilirsiniz.
  2. Executor fader değeri gibi bazı özellikler doğrudan atama ile değiştirilebilir.
  3. Daha karmaşık senaryolarda osc veya harici protokol köprüleri tercih edilmelidir.
Cmd('Executor 1.5 At 75')
Önemli Not: Cmd() fonksiyonu komutları konsol kullanıcısı adına çalıştırır. Bu nedenle show'un aktif World ve Page ayarları komut sonucunu doğrudan etkiler. Plugin'inizi test ederken her zaman izole bir World üzerinde çalışın.

MAnet Üzerinden Fixture Değeri Okuma

Patch edilmiş bir fixture'ın anlık DMX çıkış değerini okumak, özellikle geri besleme gerektiren otomasyon senaryolarında çok işe yarar. Bunun için GetDmxValue benzeri düşük seviye fonksiyonlar yerine fixture objesinin attribute değerlerine erişmek daha güvenilirdir.

local fix = DataPool().Fixtures[1] local dimVal = fix.Attributes.Dimmer.Value

Bu yaklaşım size preset veya programmer katmanından bağımsız olarak sahne çıkış değerini verir; DMX merge senaryolarında hangi katmanın baskın olduğunu anlamak için oldukça faydalıdır.

Gerçek Zamanlı Döngü ve Performans

MAnet verisiyle sürekli çalışan bir plugin yazıyorsanız, coroutine yapısını mutlaka kullanın. Ana thread'i bloklayan senkron döngüler konsolda performans sorunlarına yol açar.

  • Veri okuma döngüsünü coroutine.yield() ile periyodik olarak uyku moduna alın
  • Gereksiz yere her frame'de sorgu yapmaktan kaçının; değişim tespiti için önceki değeri önbelleğe alın
  • Plugin'i kapatırken açık kalan coroutine'leri temizlemeyi unutmayın
İpucu: Geliştirme sürecinde konsolun yerleşik Lua Console penceresini (Setup → Plugins → Lua Console) kullanarak fonksiyonları canlı test edebilirsiniz. Bu, MAnet verisiyle çalışırken hata ayıklama süresini önemli ölçüde kısaltır.