GrandMA2'de Zamanlayıcı Plugin Yazımı: Adım Adım Rehber
GrandMA2 konsolunda Lua diliyle zamanlayıcı plugin nasıl yazılır? Timer fonksiyonları ve pratik kullanım örnekleriyle tam rehber.
GrandMA2 Plugin Sistemi ve Lua Dili
GrandMA2, kullanıcıların kendi otomasyon araçlarını geliştirmesine olanak tanıyan güçlü bir plugin altyapısına sahiptir. Bu altyapı, Lua 5.1 programlama dilini kullanır. Zamanlayıcı (timer) tabanlı pluginler; otomatik sahne geçişleri, belirli aralıklarla tekrar eden efektler veya gösteriyle senkronize komut dizileri için vazgeçilmez bir araçtır.
Temel Plugin Yapısı
Her GrandMA2 plugini, belirli bir fonksiyon iskeleti üzerine kurulur. Zamanlayıcı pluginleri için en önemli yapı taşı coroutine kullanımıdır. GrandMA2, Lua'nın doğrudan os.time() fonksiyonunu desteklemediğinden zamanlama işlemleri coroutine ve coroutine.yield() kombinasyonuyla gerçekleştirilir.
Temel bir plugin dosyası şu yapıda başlar:
local function Main(displayHandle, argument)-- Ana kod bloğu buraya gelirendreturn Main
Zamanlayıcı Yazmanın İki Yöntemi
1. Coroutine ile Bekleme (Önerilen Yöntem)
GrandMA2 pluginlerinde zaman kontrolü için en güvenilir yöntem coroutine.yield() fonksiyonudur. Bu fonksiyon, pluginin bir sonraki frame'e kadar beklememesini sağlar ve konsol performansını korur.
local function Main(displayHandle, argument)local startTime = os.clock()local duration = 5 -- saniyewhile (os.clock() - startTime) < duration docoroutine.yield()endgma.cmd("Go+ Cue 10")end
Önemli Not: coroutine.yield() çağrısını döngü içinde kullanmazsanız konsol donabilir. Her bekleme döngüsünde mutlaka yield ekleyin.2. gma.sleep() Fonksiyonu
GrandMA2'nin yerleşik gma.sleep() fonksiyonu daha basit bir zamanlama yöntemi sunar. Parametre olarak saniye cinsinden bekleme süresi alır.
gma.sleep(3.5) -- 3.5 saniye beklegma.cmd("Go+ Cue 20")
Bu yöntem basit senaryolar için pratik olsa da uzun ve tekrarlı döngülerde coroutine yaklaşımı daha kararlı çalışır.
Pratik Örnek: Otomatik Cue Döngüsü
Aşağıdaki plugin, 10 saniyede bir belirtilen cue'yu tetikler ve bu işlemi 5 kez tekrar eder:
local function Main(displayHandle, argument)local tekrar = 5local aralik = 10for i = 1, tekrar dogma.cmd("Go+ Cue " .. i)gma.echo("Cue " .. i .. " tetiklendi")local t = os.clock()while os.clock() - t < aralik docoroutine.yield()endendendreturn Main
Plugin'i Konsola Yüklemek
- GrandMA2 arayüzünde Menu > Plugins ekranını açın.
- Yeni bir plugin slotu oluşturun ve Edit butonuna basın.
- Lua kodunuzu editöre yapıştırın ve kaydedin.
- Plugin'i çalıştırmak için ilgili slota tıklayın veya bir executor'a atayın.
Sık Yapılan Hatalar
- Sonsuz döngüye yield eklememek: Konsolu tamamen kitler, her zaman
coroutine.yield()ekleyin. - Çok kısa aralık değerleri: 0.1 saniyenin altındaki döngüler konsol yükünü artırır.
- gma.cmd() sözdizimi hataları: Komut stringlerini her zaman GrandMA2 komut satırında önce manuel test edin.
- Değişken kapsamı karıştırmak: Global ve local değişkenleri bilinçli kullanın; istenmeyen yan etkilerden kaçının.
İpucu: Plugin geliştirme sürecinde gma.echo() fonksiyonunu debug aracı olarak kullanın. Mesajlar GrandMA2 komut satırında görünür ve hata ayıklamayı kolaylaştırır.