ff14高級觸發(fā)器不正經(jīng)教程(4)-詩人自動演奏觸發(fā)器教程。我愛你們,也深愛著這個世界

樂譜是可移植的!如果制作了樂譜并愿意與大家分享請隨時聯(lián)系我,我會盡可能在第一時間加入觸發(fā)器并更新github。愛你們?
本專欄的前半部分介紹觸發(fā)器以及工作原理,后半部分介紹如何制作與分享樂譜。如果有搞不定的歡迎留言或者私信。后半段附錄是沒什么用的,在看到“正文部分結(jié)束了”這句話時,后面的東西就可以不用看了。晚些時候會上傳演奏效果,視頻鏈接會放在評論區(qū)~
雖然不太可能,但如果能形成一個社區(qū)的話我會開發(fā)遠(yuǎn)程下載譜子的功能。
演奏功能只是6.2.2版本AuraCan的一個組件,目前尚未上傳至github。感興趣的朋友可以私信我,我可以把這個獨立組件拆出來先發(fā)你。
AuraCan的github倉庫:https://github.com/raine01/ff14AuraCan
優(yōu)點:
使用+=-與數(shù)字1-7表示三個八度的白健,使用qwe與數(shù)字1-5表示三個八度的黑鍵。會認(rèn)鋼琴卷就能打譜飛快。
移植性強,無需安裝其他第三方軟件,能運行高級觸發(fā)器(大概)就能自動演奏。
鍵位好記,26個字母+10個數(shù)字即可完成配置,無需特殊符號。
可以后臺演奏。
代碼透明可見,你可以隨時評估其安全性。
你可以在譜子里寫注釋。
缺點:
沒法長按琴鍵,小提琴或者鋼琴的延音無法復(fù)現(xiàn)。
導(dǎo)入觸發(fā)器時會報警告,如果有不法分子篡改了觸發(fā)器的代碼極端情況下可能會搞崩電腦或者造成數(shù)據(jù)泄露。

我愛你-Ayasa絢沙(節(jié)選)
曲譜改編自
https://www.bilibili.com/video/BV1FT411577g/
原視頻
【Ayasa】原創(chuàng)曲目《我愛你》
我想將這份感動分享給大家,哪怕只有其中的35個小節(jié)~我愛你們,也深愛著這個世界。
高級觸發(fā)器官方文檔(執(zhí)行腳本章節(jié))
https://github.com/paissaheavyindustries/Triggernometry/wiki/Triggernometry-FAQ-and-examples#scripting
感謝在我第一期不正經(jīng)系列觸發(fā)器教程下評論回復(fù)的朋友提醒我觸發(fā)器內(nèi)執(zhí)行腳本的動作,由衷感謝。

早在6.1.4版本的AuraCan就已經(jīng)制作出自動演奏的觸發(fā)器了。但由于移植性較為糟糕因此6.1.5開始不再集成自動演奏,6.1.4版本也并未上傳至github。現(xiàn)已加入6.2.2!這篇專欄將會介紹該觸發(fā)器的實現(xiàn)原理,含有較大部分的C#代碼,但并不太需要懂得C#的知識或準(zhǔn)備編輯器。

該組觸發(fā)器分為兩部分:樂譜集與演奏。

先來簡單說下演奏的原理

循環(huán)執(zhí)行同一個觸發(fā)器,這個觸發(fā)器只做兩件事:
在若干毫秒后,使用兩個參數(shù)(樂譜名與行序號)調(diào)用自身。
向觸發(fā)器發(fā)送某一按鍵。
具體發(fā)送哪個按鍵取決于名為“rp_piano_樂譜名”的持久化表格變量的第一列的第index行的數(shù)據(jù)。具體等待多久則要取決于第二列。(見下圖)

對于圖中的示例,觸發(fā)器會向游戲發(fā)送76(對應(yīng)的按鍵為字母L),等待340毫秒后發(fā)送77(對應(yīng)M),340毫秒后發(fā)送76,340毫秒后發(fā)送77,340毫秒后發(fā)送81……直到將整張樂譜(整個rp_piano_我愛你變量)處理完畢。名為演奏的觸發(fā)器別勾選計劃任務(wù)中的順序執(zhí)行按鈕,否則發(fā)送按鍵的命令會大大拖慢演奏的節(jié)奏。

如果你使用和我相同的演奏觸發(fā)器,并且計劃手搓樂譜,這個網(wǎng)址會給你一些幫助,它展示了按鍵與keycode的關(guān)系:(點擊上圖右下方藍(lán)色的地球圖標(biāo)也可以打開網(wǎng)頁)
https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.keys?view=windowsdesktop-7.0

再來看看樂譜集:(遇到問題可以參考我的這篇專欄)

這個觸發(fā)器甚至沒有打算使用日志觸發(fā),在我的預(yù)期中它只需要右鍵然后執(zhí)行即可。接下來我會附上該C#腳本的完整內(nèi)容并稍稍做一些講解。
對于技術(shù)力足夠的朋友,我建議去github上拉一份高級觸發(fā)器的源碼,并經(jīng)常更新。前輩們更新高級觸發(fā)器的速度實在是太快了,我的不正經(jīng)系列的教程跟不上高級觸發(fā)器更新的速度。

接下來是樂譜的編寫與移植
很遺憾,觸發(fā)器并非上手即用,與多數(shù)自動演奏工具一樣,我們需要先設(shè)置鍵位

無需設(shè)置鍵位的觸發(fā)器我也做過一版,但是局限性實在是太大了,幾乎演奏不了稍稍厲害一些的譜子。因為原本一個按鍵就能做到的工作按照默認(rèn)鍵位需要使用兩個按鍵。

上圖來自視頻https://www.bilibili.com/video/BV1FT411577g/請多多支持原作者。
我們來看看視頻中樂譜的第一頁,這個樂譜以四分音符為一拍,每小節(jié)四拍(每個下方?jīng)]有橫線的數(shù)字代表一個四分音符,有1條橫線的音符代表一個8分音符,兩條橫線的代表16分音符)。bpm為88,樂譜名為我愛你。
樂譜的前兩行分別是名字和bpm:
之后我們開始看樂譜的第一小節(jié),上方為主旋律下方為伴奏,伴奏的四個音符都為0,我們不用管0。
第一小節(jié)的每個音符下方都有一條橫線,代表他們?yōu)樵鹃L度的一半。因此第一小節(jié)的每個音符后都要以逗號分割,并且后面有一個2。
樂譜第一小節(jié)第五個八分音符的3上面有一個點,代表這個音符需要升一個八度。我們在樂譜中使用+表示升八度,用-表示降八度。完整的對應(yīng)關(guān)系如下:
如:
-1表示按下鍵盤上的A,對應(yīng)的keycode為65
=4表示按下鍵盤上的K,對應(yīng)的keycode為75
!1比較特殊,按下的是shift+O的組合鍵,對應(yīng)的keycode是“16,79”(注意是英文逗號)
研究過觸發(fā)器與上方C#代碼的光呆可能已經(jīng)注意到了,多個按鍵只需要把keycode使用逗號進行分割就可以一起發(fā)送到游戲內(nèi)執(zhí)行。沒錯,是這樣。但注意一點,以組合鍵發(fā)送的時候功能鍵會貫穿整個命令,也就是說“!1=2-3”演奏出來的實際效果會是“!1+2=3”(2和3升了一個8度)所以打譜時建議把!1放在每一行的最后面。
代碼中有一行校驗:
這行校驗的意思是:含有01234567qwe+=-,!之外字符的行不會被處理,這有什么用呢?請看下面一小段譜子:
我喜歡用漢字來表示接下來的幾行是第幾小節(jié)的內(nèi)容,同時我喜歡用#來表示這一行被我注釋掉了(以備之后需要修改的情況)。25小節(jié)使用鋼琴演奏效果很棒,但使用ff14內(nèi)的樂器感覺就不太好了,因此我刪掉了這一小節(jié)并修改了26小節(jié)。
26小節(jié)同樣是空音符的示例,本小節(jié)中有三個僅做停頓的四分音符,還有兩個8分音符。
第4小節(jié)的00,0.5與兩行相鄰的00,1理論上有相同的效果。同理,你可以在每一行的逗號后寫任何(不太離譜)的數(shù)字,以供觸發(fā)器計算發(fā)送下一按鍵前等待的時長。
在編寫完樂譜后使用下劃線替換每個換行符,并將其放入代碼中string piano后面的字符串中,下面是觸發(fā)器中的樂譜:
如果想要在觸發(fā)器中保留多個譜子的源代碼,請復(fù)制動作而非觸發(fā)器。觸發(fā)器根據(jù)隱式id判斷,不熟悉的情況下復(fù)制觸發(fā)器是很危險的行為。

同時我很推薦大家在描述內(nèi)寫上譜子相關(guān)的信息,不然可能一時間分辨不出加載的是哪首曲子的譜子~

如何演奏譜子呢?超簡單,切換詩人拿出樂器,然后在聊天框中輸入宏命令:
我愛你是譜子的名字,也就是持久化表格變量的名字,也就是樂譜中第一個下劃線前的字符。
正文部分結(jié)束了,下面是附錄:
放上編譯后的持久化表格變量,如果你生成后想要核對一下,可以使用這一份。注意,變量是持久化表格變量,變量名為樂譜名(第一列與第二列使用tab進行分割):
預(yù)祝情人節(jié)快樂~