0. 前言
在遊戲中加入音訊不只帶動遊戲感,如果加上劇情對話還能帶來劇情張力並引導遊玩速度。
透過 /playsound,趕緊看看如何透過生成工具簡單達成以上的目的吧!
1. 重點
2. 內容
2.1. 解說 – 指令的整體架構
關於 /playsound 的架構也不複雜,但最基本的情況下建議還是使用以下方式,因為在正常情況下我們是從某個地點或物體去發出聲音,所以 Selector 的設定相對重要。而如果製作的地圖中有版權音樂或音效,要讓直播者避開風險,通常建議放在 music 或 record 兩個相對較少人開啟的音軌。
/playsound <聲音特效> <音軌> <SELECTOR>
而除此之外還有一系列的參數可以調整,首先 /playsound 該指令是在「位置」進行傳聲並非跟著物體移動,因此自由活動的情況下並不適合長篇的音檔。音高的部分在 Java 版能從 0.5 ~ 2.0,上下 1 則代表是八度音的距離,而提高同時會讓聲音變得急促,反之拉低會讓音訊延長。
而 volume 的設定從 0.0 ~ 1.0 是調整音量,但超出 1.0 後則會 x16 代表傳聲的距離,而傳聲的最小距離就是 16 格,而在傳聲範圍內離發聲地點越遠漸弱。末端的 minVolume 從 0.0 ~ 1.0 的數值實際上是在撥放範圍之外,玩家所能聽到的音量。所以假設 minVolume = 1.0 的時候,在超出撥放範圍外的音量反而比在圈內外圍還大聲。 這時候最好的限縮方式就是透過 Selector 搭配 distance 標籤進行塞選。
/playsound <聲音特效> <音軌> <SELECTOR> <x> <y> <z> <音量/距離> <音高> <圈外音量>
2.2. 實作 – 為材質包導入自訂義的音檔
在影片中我們有稍微帶過以下這些可用的介面化工具
【音效】Stable Audio, Meta Audiobox
【語音】TTSMaker
那這邊額外補充幾個工具給具有 Python 經驗 + GPU 的朋友
【音效】AudioLDM2, Stable Audio Open
【語音】speecht5_tts
這次需要用到在 versions 檔案看不到的材質包屬性,首先將 .ogg 音檔放入到 sounds 資料夾目錄之中。
另外建立一份 sounds.json 並進行編輯,這份檔案才是實質標註音訊的設定。各位可以參考以下的格式達成最基礎的設定,最主要會要設定 Sound Event ( 識別字串 ) 以及 name ( 檔案路徑 ) 。關於 stream 的串流設定建議設為 true 避免讀取完整大檔導致的 lag 。
{
"識別字串": {
"sounds": [
{
"name": "檔案路徑",
"stream": true
}
]
},
"speeches.opening": {
"sounds": [
{
"name": "rpg:speeches/opening",
"stream": true
}
]
}
}
完成之後來到我們的遊戲之中,裝上材質包,最好再按下 F3 + T 重整一下。此時我們輸入指令應該要能看到我們自訂義的音檔,並可以正常進行撥放。
2.3. 實作 – 將 MIDI 轉為音階盒樂曲
我們透過 Open Note Block Studio 去讀取 MIDI 並轉換成音階盒格式,導入的時候麻煩維持 1x 並記得勾選 Read Note Velocity 進行音量調整。
這邊提供範例使用的千本櫻 MIDI 音檔
完成讀取後,由於通常公開的 MIDI 都已經調整好設定了,我們就透過 File >> Export as datapack ,等待一段時間直到有個視窗彈出才算完成。
接著我們就能將 musicbox 這個資料夾移到我們自己的 Datapack 之中,此時記得將 load 與 tick 添加到 minecraft / tags 的兩份設定之中,最後記得若為 1.21 記得將 Namespace 底下的 functions 改為 function 該新的名稱。
完成後就能到遊戲 /reload 開始測試,我們主要操作就是 play (撥放), pause (暫停), stop (停止) 上述三種,各位能注意影片中的記分板數值。
3. 後話
快速複習下本篇內容,指令的架構與基礎,再來添加自己的音檔,最後轉換 MIDI 並轉為音階盒樂曲。
那下次我們終於要進入到 Ground Crafting,透過 execute 製作視覺化的合成效果。
4. 參考
[1] sounds.json 格式 — Minecraft Wiki
https://minecraft.wiki/w/Sounds.json
[2] playsound — Minecraft Wiki
https://minecraft.wiki/w/Commands/playsound