UU看書

第六十三章 遊戲聲音

天才一秒記住【UU看書】地址:www.uukanshu.co

(觀前提示:此章有部分內容涉及到初中物理的知識)

在之前,我們已經大致瞭解了方塊、實體、狀態效果、粒子效果這四個在Minecraft中相當常見的四種東西,還學習了一部分基礎的遊戲運作機制。接下來,我們就要來看看不管是在Minecraft還是在其他遊戲,都具有十分重要地位的東西——遊戲聲音。

在Minecraft中,遊戲聲音主要包括以下三類:

普通音效——由玩家、生物、物品、實體和方塊發出的聲音,如玩家破壞方塊、鸚鵡學舌、武器損壞、射出的箭落地、熔爐工作。

環境音效——這並不是指背景音樂。一般來說,這是指在特定情況下才會播放的聲音,所以才帶有『環境』二字。比如你在挖礦時突然聽到的怪聲,那其實就是一個環境音效。關於這東西我們會在第一百五十章講除錯介面的Mood值時再次提到。

音樂——一般來說,指的是遊戲背景音樂。(C418的音樂針不戳)

當然,如果要分類得更細一些,那就得按照Minecraft遊戲中的分類,也就是你在設定介面中看到的那十類:主音量(master)、音樂(music)、唱片機音符盒(record)、天氣(weather)、方塊(block)、敵對生物(hostile)、友好生物(neutral)、玩家(player)、環境(ambient)、聲音語音(voice)。

你在Minecraft中聽到的每個聲音,肯定都包括有以下資訊:

①聲音名稱(在soundsjsonJE或sounddefinitionsjsonBE中所規定的聲音名稱。下面會詳細講一下這東西怎麼弄到。)

②聲音類別(按照Minecraft內的分類來分)

③聲音目標(這個聲音給誰聽,也就是能夠被哪些玩家聽到,是一個目標選擇器或玩家名、UUID)

④聲源位置(聲音產生的地點,是一個座標)

⑤音量(音量越大,聲音可聞範圍越大,是一個小數。下面會詳細講解這東西)

⑥音調(自己把物理書或樂理書拿出來翻一下看看,是一個小數。下面也會詳細講解這東西)

⑦最小音量(指定在聲音可聞範圍外的最小音量,是一個小數。下面也會詳細講解這東西)

其中,我們需要詳細講解的東西有四個:聲音名稱、音量、音調和最小音量。

——1聲音名稱

在上面有提到,聲音名稱是在一個叫做soundsjsonJava版或sounddefinitionsjson基岩版的檔案中規定的。那麼這個檔案在哪呢?

想要找到這個檔案可是個技術活,如果你嫌麻煩可以去看MinecraftWiki,我們會在章末討論如何找到這個東西。在此之前,你只需要在MinecraftWiki上查詢聲音名稱即可。

——2音量

聲音的音量在這裡並不只是影響聲音的響度。音量是一個≥00的小數(浮點數)。音量對聲音的影響有兩種情況:

①當00≤音量<10時

音量越小,聲音響度會相對減輕,直到完全沒有(00)。聲音的球狀可聞範圍也會相應減小一些。

②當音量≥10時

聲音響度會不變,但其可聞範圍和音量大小的關係符合下面的函式關係式:

可聞範圍(單位:米)音量×16

比如音量為12時,該聲音的可聞範圍就是12×16192米。

另外,我們還要了解一下聲音的可聞範圍:

聲音的可聞範圍是一個球體,其中心就是聲源位置。越遠離中心,聲音的大小就會越小,直至無聲。

——3音調

音調是什麼?物理學對音調的定義是:聲音訊率的高低叫做音調。在Minecraft中雖然有些不同,但也跟聲音訊率有關。

這個東西要深究起來非常複雜,在這裡我們簡簡單單瞭解一下。

音調的值是個小數(浮點數),在Java版中是一個在0020(含)範圍內的數,其對聲音的影響可以分為兩種情況:

①當00≤音調<05

等同於音調值為05的情況

②當05≤音調≤20

音調越低,聲音的頻率越低,持續時間越長。

音調越高,聲音的頻率越高,持續時間越短。

音調等於10時,聲音的頻率和持續時間均為正常水平。

(如果你並不能很好理解上面的描述,那我就舉個例子:當你在觀看影片的時候,如果你加快播放速度,聲音的波就會擠在一起,頻率變高,使得影片的聲音變得尖銳,而如果你放慢速度,聲音的波反而會離得更開,頻率變低,使得影片的聲音變得低沉。當然,現在諸如B站之類的影片平臺大多都對倍數播放新增了最佳化,使得影片變快或變慢不會影響到影片音調的改變,但你還是可以在諸如PR之類的影片剪輯軟體中體驗到這種效果)

(也就是說,從某種意義上來講,這個音調的作用其實就是讓你像看B站影片一樣倍數播放聲音,只不過沒有最佳化聲音訊率的效果而已)

在基岩版中,其值並沒有任何限制,但必須要在00至2560(含)之間才能有效果。如果大於2560,最終的情況相當於音調等於10的情況,也就是預設情況。如果小於等於00,聲音將會不可聽見。

值在00至2560之間的效果類似於Java版在05和20之間的效果。

——4最小音量

前面我們講音量時提到了可聞範圍,預設情況下聲音會在可聞範圍之外不可聽見。為什麼要說一個『預設情況』呢?因為預設情況下聲音的最小音量的值是00。

上面我們瞭解過,聲音的最小音量是指在聲音可聞範圍外的最小音量,是個小數(浮點數),預設為00,也就是不可聽見。在基岩版中此值無限制,可正也可負,在Java版此值必須在0010(含)之間。

……………

現在我們已經講了很多,但瞭解這些東西有什麼用呢?難不成我們可以用指令來控制遊戲聲音?

答案當然是能啦,不然我寫這個章節幹嘛?

Mojang為Minecraft新增了兩條聲音相關的指令:playsound和stopsound

playsound

作用:播放一段聲音

需要許可權等級:Java2,基岩1

需要作弊:是

格式:

Java版

playsoundlt聲音名稱gtlt類別gtlt目標:目標選擇器gt聲源位置:座標音量音調最小音量

基岩版

playsoundlt聲音名稱gt目標:目標選擇器聲源位置:座標音量音調最小音量

看起來這playsound指令引數很多啊,但如果你仔細一瞧,就會發現這些引數我們上面都講過了。

其中我們唯一要講的就是『類別』這個引數。類別有哪些呢?讓我們來看看前文是怎麼說的:『聲音類別(按照Minecraft內的分類來分)』

那麼Minecraft內部對聲音的分類有哪些?

其實已經寫在了開頭:『主音量(master)、音樂(music)、唱片機音符盒(record)、天氣(weather)、方塊(block)、敵對生物(hostile)、友好生物(neutral)、玩家(player)、環境(ambient)、聲音語音(voice)』

懂了吧,那麼我們現在來看一個例子。

假設你要播放出洞穴的環境音效,該怎麼辦?

第一步,你需要開啟Minecraft中文Wiki,搜尋soundsjson,找到這個叫做soundsjson的條目(或者找到環境音效這個條目也可以)。第二步,往下拉找到資料值,根據你對應的遊戲版本點選展開,往下滑並看著『聲音事件』這一列,找到洞穴環境音效的聲音事件名稱(也就是聲音名稱),複製。第三步,在Minecraft裡執行如下指令:

playsoundambientcaveambienta101000——Java

playsoundambientcavea101000——基岩

然後你就聽到了和你在洞穴裡聽到的一模一樣的聲音。但是如果你多次播放就會發現一個問題:怎麼每次播放都是不同的聲音啊?

其實一個聲音名稱對應的不只是一個聲音檔案,像是ambientcave這個名稱對應的就有19個聲音檔案。遊戲在播放ambientcave這個聲音時其實會在這19個聲音中點兵點將點到誰就播放誰,播放的具體是哪個其實完全是隨機的。當然,雖然說是隨機,但遊戲也有規定權重在其中,哪個聲音檔案權重大就有更高几率抽到那個聲音。

playsound是播放聲音,相對應就還有一個stopsound用來停止播放聲音。

stopsound

作用:停止聲音播放。

需要許可權等級:Java2,基岩1

需要作弊:是(Java版不需要)

格式:

Java

stopsoundlt玩家:目標選擇器gt聲音類別聲音名稱

基岩

stopsoundlt玩家:目標選擇器gt聲音名稱

玩家這個引數在這邊用於指定要停止誰的聲音,也就是讓誰聽不到聲音。

如果僅僅指定了玩家,將會停止該玩家所聽到的所有(遊戲中的)聲音,也就是讓這個玩家的耳朵突然安靜下來。你也可以額外指定聲音類別和聲音名稱兩個引數,來指定具體要停止什麼聲音。

舉個例子:

stopsoundablockentitytntprimed——Java

stopsoundarandomfuse——基岩

這兩條指令都將會停止TNT嘶嘶作響的聲音。

看起來上面的指令沒有絲毫的問題,但僅僅是看起來而已。

如果我們不知道entitytntprimed屬於哪個聲音類別怎麼辦?畢竟Wiki上可沒有標出這個的類別。

答案很簡單,我們只需要:

stopsoundaentitytntprimed

不去管就行了!管它幹什麼?!多管閒事啊?浪費精力又浪費時間。

當你不知道也懶得知道你要停止的聲音的類別是什麼的時候,可以直接選擇填寫星號來全選全部聲音類別。可惜的是,這個版本在低版本行不通(1122就沒有這東西,還得老老實實找類別)。

現在我們已經基本上了解得差不多了,如果你認為可以了就前往下一章或去幹其他事情吧,接下來我們將會討論:如何找到那該死的soundsjson。

對於Java版,我們首先需要來到Minecraft的根目錄,也就是找到minecraft資料夾。對於非官方啟動器來說,一般它和啟動器位於同一個目錄下;對於官方啟動器來說,不同系統的情況不一樣:

Windows:系統盤使用者(User)你的使用者名稱AppData(這是個隱藏資料夾)Roamingminecraft

MacOS:系統盤使用者(User)你的使用者名稱資源庫(Library)ApplicationSupportminecraft

Linux:系統盤你的使用者名稱minecraft

注:在MacOS中,你預設是看不到資源庫(Library)這個資料夾的。這時候你就要確保此時訪達正選擇你的使用者資料夾,然後點選左上方的前往→前往資料夾,然後在跳出的視窗中輸入『資源庫』或『Library』三個字,就可以臨時顯示出這個資料夾了。

然後,我們需要來到如下的位置:

minecraftassetsindexes或minecraftassetsindexes

在這裡,你會發現一堆名稱是json的檔案。這是什麼東西呢?

你不用管他,也不需要管它是什麼東西,用記事本或文字編輯開啟你需要的版本即可。開啟後,使用CtrlF或Command⌘F開啟查詢模式,然後輸入soundsjson,你就會找到一個唯一的結果:“minecraftsoundsjson““hash““xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx“,“size“xxxxxx

是不是感覺這似乎在哪裡見過?其實這就是JSON,和之前講過的JSON文字的格式是一模一樣的。

接下來,你需要將hash的值複製下來,然後來到如下資料夾:

minecraftassetsobjects或minecraftassetsobjects

你會看到一大堆不明意義的資料夾,不用擔心,直接使用搜素功能,搜尋你剛剛複製的內容,稍等片刻,你就會找到一個檔名和你複製內容一模一樣的檔案。雖然它沒有字尾名,但其實它就是我們要找的soundsjson檔案。右擊使用記事本或文字編輯開啟它,如果你找對的話,你就會看到開頭寫著:

“ambientcave“

“sounds“

“ambientcavecave1“,

“ambientcavecave2“,

……

如果你的訪達或檔案管理器遲遲找不到檔案,那也別擔心,你只需要看看你複製內容的開頭兩個字元,然後找到相對應的資料夾。比如開頭是『97』就找叫做97的資料夾,找到後,你再仔細翻一翻就可以找到了。

soundsjson的JSON結構大致是這樣的:

“聲音名稱”“聲音檔案”聲音檔案列表,”聲音字幕本地化鍵名””一個本地化鍵名”,……

懂了吧?當然,soundsjson只是在172版本後才被弄到如此離譜的地方。在172版本,soundsjson很好找,它就在這裡:

minecraftassets或minecraftvirtuallegacy

而且檔名就叫soundsjson

如果你同時安裝了172和更新的版本,那麼兩類soundsjson檔案都將會同時存在。

(那對於比172更老的版本呢?)

(根本不用找,因為沒有soundsjson。這東西是在172才被新增進來的)

另外,對於Java版的資源包來說,其也有soundsjson檔案,就在資源包的assetslt名稱空間gt下,且就叫soundsjson。

soundsjson找到了,那麼基岩版的sounddefinitionsjson在哪呢?

很好找………個屁!但至少沒有那麼多彎彎繞繞的。

對於Windows10版本來說,你需要找到:

系統盤ProgramFilesWindowsAppsMicrosoftMinecraftUWP應用版本號x648wekyb3d8bbwedataresourcepacks

開啟resourcepacks,你會發現裡面有一大堆叫做vanillalt遊戲版本gt的資料夾。不用管這些,你只需要找到沒有字尾的『vanilla』資料夾,點進去,再找到sounds資料夾,再向下滑,就是sounddefinitionsjson檔案了。整個目錄下來是這樣的:

CProgramFilesWindowsAppsMicrosoftMinecraftUWP應用版本號x648wekyb3d8bbwedataresourcepacksvanillasoundssounddefinitionsjson

對於Android版本來說,最簡單的辦法是安裝一個MT管理器,然後將你手機上的Minecraft打包成安裝程式apk檔案,然後再使用MT管理器透過zip檢視開啟,再開啟splitinstallpackapk,來到assetsresourcepacksvanillasounds,就可以找到sounddefinitionsjson了。

對於IOS和其他版本來說……抱歉,我不清楚。

現在我們兩個檔案都找到了,本章也就到此結束。

歷史

Java

161——加入了playsound

172——加入了soundsjson

19——playsound支援Tab自動補全了,並開始要求使用source引數。更改了許多聲音名稱。

193——加入了stopsound

攜帶版

104——加入了sounddefinitonsjson

105——加入了stopsound和playsound

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

醫毒雙絕,一睜眼竟然生了雙胎! 我玩了個假的MC? 全職高手之白風沐雪 吳小凡重生籃球生涯 我在全息遊戲中錦鯉出圈 什麼叫瀟灑型中鋒啊 又玩克蘇魯跑團網遊