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 gelir
end
return 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 -- saniye
while (os.clock() - startTime) < duration do
coroutine.yield()
end
gma.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 bekle
gma.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 = 5
local aralik = 10
for i = 1, tekrar do
gma.cmd("Go+ Cue " .. i)
gma.echo("Cue " .. i .. " tetiklendi")
local t = os.clock()
while os.clock() - t < aralik do
coroutine.yield()
end
end
end
return Main

Plugin'i Konsola Yüklemek

  1. GrandMA2 arayüzünde Menu > Plugins ekranını açın.
  2. Yeni bir plugin slotu oluşturun ve Edit butonuna basın.
  3. Lua kodunuzu editöre yapıştırın ve kaydedin.
  4. 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.