UI控件變量與初始化回調函數:創建一個簡單的自動和聲器
現在我們來對前例中的簡單代碼進行拓展:
我們希望打造一個旋鈕,它可以控制伴奏音與原始音符間的距離,标簽爲“Interval”(音程)。請讀者将下列代碼輸入進Kontakt:
on init declare ui_knob $Interval (-12,12,1) $Interval := 7 end on on note play_note($EVENT_NOTE + $Interval,$EVENT_VELOCITY,0,-1) end on
現在演奏的音符,都會有一個上方五度的伴奏音。但界面中還有一些改變,請看腳本模塊區域:
出現了一個旋鈕,标簽爲“Interval”。讀者可以嘗試将旋鈕調整爲不同值,此時演奏時的伴奏音就是用戶自定義的了。前例中的八度和音器已經變爲了一個簡單的自動和聲器。
這段代碼是如何運作的呢?我們在用戶界面中創建了一個用戶界面元素(本例中爲旋鈕),我們通過代碼定義了這個旋鈕的範圍:-12~12,初始值爲7,并且KSP會把這個值加給輸入音符的序号,以新值生成音符。
本利包含了三個新概念:init(initialization,初始化)回調函數、UI控件變量的聲明與變量的賦值。
on init … end on |
初始化回調函數,腳本正确解析後執行。 |
用戶點擊“Apply”按鈕後,初始化回調函數就會執行。初始化回調函數中包括了初始化操作、變量定義、UI元素等等事宜。因此初始化回調函數隻會被執行一次,音符回調函數則不然。如果用戶想在界面中創建旋鈕,必然要事先定義,但是隻能定義一次。on init标記了此回調函數的開始,end on标記了其的結束。
UI控件變量是一類用戶定義變量。KSP可以區分内建變量與用戶定義變量。本例中的旋鈕理論上是一個用戶定義變量,用戶在腳本模塊區域中做出的調整,會影響到變量值。
旋鈕控件的定義法如下:
declare ui_knob $<變量名> (<最大值>,<最小值>,<分度值>) |
創建旋鈕 |
參數的意義會在後面解釋。我們來回頭分析代碼的第三行:
$Interval := 7
“:=”進行賦值操作,用自然語言解釋便是:将7作爲值賦給名爲Interval的變量。
初始化函數執行時,KSP會創建一個旋鈕,初始值爲7。這個值會加在輸入音符的序号中。所以當變量值爲-12時,C3(60)會變成C2(48),因爲$EVENT_NOTE + $Interval equals 60 + (-12)=48。
通過上面的學習,相信讀者已經不難讀懂下面的代碼了:
on init declare ui_knob $Interval (-12,12,1) $Interval := 7 declare ui_knob $Velocity (1,127,1) $Velocity := 60 end on on note play_note($EVENT_NOTE + $Interval,$Velocity,0,-1) end on
總結
點擊“Apply”按鈕後,若腳本正确解析,初始化回調函數就會執行。旋鈕是UI控件,即用戶定義變量的一種。UI元素在初始化回調函數中聲明。“:=”是賦值運算符,符号右邊的值被賦給左邊。