第六十三章 游戏声音

(观前提示:此章有部分内容涉及到初中物理的知识)

在之前,我们已经大致了解了方块、实体、状态效果、粒子效果这四个在minecraft中相当常见的四种东西,还学习了一部分基础的游戏运作机制。接下来,我们就要来看看不管是在minecraft还是在其他游戏,都具有十分重要地位的东西——游戏声音。

在minecraft中,游戏声音主要包括以下三类:

普通音效——由玩家、生物、物品、实体和方块发出的声音,如玩家破坏方块、鹦鹉学舌、武器损坏、射出的箭落地、熔炉工作。

环境音效——这并不是指背景音乐。一般来说,这是指在特定情况下才会播放的声音,所以才带有『环境』二字。比如你在挖矿时突然听到的怪声,那其实就是一个环境音效。关于这东西我们会在第一百五十章讲调试界面的mood值时再次提到。

音乐——一般来说,指的是游戏背景音乐。(c418的音乐针不戳)

当然,如果要分类得更细一些,那就得按照minecraft游戏中的分类,也就是你在设置界面中看到的那十类:主音量(master)、音乐(music)、唱片机\/音符盒(record)、天气(weather)、方块(block)、敌对生物(hostile)、友好生物(neutral)、玩家(yer)、环境(ambient)、声音\/语音(voice)。zuqi.org 葡萄小说网

你在minecraft中听到的每个声音,肯定都包括有以下信息:

1声音名称(在[je]或sound_[be]中所规定的声音名称。下面会详细讲一下这东西怎么弄到。)

2声音类别(按照minecraft内的分类来分)

3声音目标(这个声音给谁听,也就是能够被哪些玩家听到,是一个目标选择器或玩家名、uuid)

4声源位置(声音产生的地点,是一个坐标)

5音量(音量越大,声音可闻范围越大,是一个小数。下面会详细讲解这东西)

6音调(自己把物理书或乐理书拿出来翻一下看看,是一个小数。下面也会详细讲解这东西)

7最小音量(指定在声音可闻范围外的最小音量,是一个小数。下面也会详细讲解这东西)

其中,我们需要详细讲解的东西有四个:声音名称、音量、音调和最小音量。

——1.声音名称

在上面有提到,声音名称是在一个叫做[java版]或sound_[基岩版]的文件中规定的。那么这个文件在哪呢?

想要找到这个文件可是个技术活,如果你嫌麻烦可以去看minecraft wiki,我们会在章末讨论如何找到这个东西。在此之前,你只需要在minecraft wiki上查找声音名称即可。

——2.音量

声音的音量在这里并不只是影响声音的响度。音量是一个≥0.0的小数(浮点数)。音量对声音的影响有两种情况:

1当0.0≤音量<1.0时

音量越小,声音响度会相对减轻,直到完全没有(0.0)。声音的球状可闻范围也会相应减小一些。

2当音量≥1.0时

声音响度会不变,但其可闻范围和音量大小的关系符合下面的函数关系式:

可闻范围(单位:米)=音量x16

比如音量为1.2时,该声音的可闻范围就是1.2x16=19.2米。

另外,我们还要了解一下声音的可闻范围:

声音的可闻范围是一个球体,其中心就是声源位置。越远离中心,声音的大小就会越小,直至无声。

——3.音调

音调是什么?物理学对音调的定义是:声音频率的高低叫做音调。在minecraft中虽然有些不同,但也跟声音频率有关。

这个东西要深究起来非常复杂,在这里我们简简单单了解一下。

音调的值是个小数(浮点数),在java版中是一个在0.0~2.0(含)范围内的数,其对声音的影响可以分为两种情况:

1当0.0≤音调<0.5

等同于音调值为0.5的情况

2当0.5≤音调≤2.0

音调越低,声音的频率越低,持续时间越长。

音调越高,声音的频率越高,持续时间越短。

音调等于1.0时,声音的频率和持续时间均为正常水平。

(如果你并不能很好理解上面的描述,那我就举个例子:当你在观看视频的时候,如果你加快播放速度,声音的波就会挤在一起,频率变高,使得视频的声音变得尖锐,而如果你放慢速度,声音的波反而会离得更开,频率变低,使得视频的声音变得低沉。当然,现在诸如b站之类的视频平台大多都对倍数播放添加了优化,使得视频变快或变慢不会影响到视频音调的改变,但你还是可以在诸如pr之类的视频剪辑软件中体验到这种效果)

(也就是说,从某种意义上来讲,这个音调的作用其实就是让你像看b站视频一样倍数播放声音,只不过没有优化声音频率的效果而已)

在基岩版中,其值并没有任何限制,但必须要在0.0至256.0(含)之间才能有效果。如果大于256.0,最终的情况相当于音调等于1.0的情况,也就是默认情况。如果小于等于0.0,声音将会不可听见。

值在0.0至256.0之间的效果类似于java版在0.5和2.0之间的效果。

——4.最小音量

前面我们讲音量时提到了可闻范围,默认情况下声音会在可闻范围之外不可听见。为什么要说一个『默认情况』呢?因为默认情况下声音的最小音量的值是0.0。

上面我们了解过,声音的最小音量是指在声音可闻范围外的最小音量,是个小数(浮点数),默认为0.0,也就是不可听见。在基岩版中此值无限制,可正也可负,在java版此值必须在0.0~1.0(含)之间。

……………

现在我们已经讲了很多,但了解这些东西有什么用呢?难不成我们可以用指令来控制游戏声音?

答案当然是能啦,不然我写这个章节干嘛?

mojang为minecraft添加了两条声音相关的指令:\/ysound和\/stopsound

\/ysound

作用:播放一段声音

需要权限等级:java-2,基岩-1

需要作弊:是

格式:

java版

\/ysound <声音名称><类别><目标:目标选择器>[声源位置:坐标][音量][音调][最小音量]

基岩版

\/ysound <声音名称>[目标:目标选择器][声源位置:坐标][音量][音调][最小音量]

看起来这\/ysound指令参数很多啊,但如果你仔细一瞧,就会发现这些参数我们上面都讲过了。

其中我们唯一要讲的就是『类别』这个参数。类别有哪些呢?让我们来看看前文是怎么说的:『声音类别(按照minecraft内的分类来分)』

那么minecraft内部对声音的分类有哪些?

其实已经写在了开头:『主音量(master)、音乐(music)、唱片机\/音符盒(record)、天气(weather)、方块(block)、敌对生物(hostile)、友好生物(neutral)、玩家(yer)、环境(ambient)、声音\/语音(voice)』

懂了吧,那么我们现在来看一个例子。

假设你要播放出洞穴的环境音效,该怎么办?

第一步,你需要打开minecraft中文wiki,搜索,找到这个叫做的条目(或者找到环境音效这个条目也可以)。第二步,往下拉找到数据值,根据你对应的游戏版本点击展开,往下滑并看着『声音事件』这一列,找到洞穴环境音效的声音事件名称(也就是声音名称),复制。第三步,在minecraft里运行如下指令:

\/ysoun ambient ~~~ 1.0 1.0 0.0 ——java

\/ysoun ~~~ 1.0 1.0 0.0 ——基岩

然后你就听到了和你在洞穴里听到的一模一样的声音。但是如果你多次播放就会发现一个问题:怎么每次播放都是不同的声音啊?

其实一个声音名称对应的不只是一个声音文件,像是这个名称对应的就有19个声音文件。游戏在播放这个声音时其实会在这19个声音中点兵点将点到谁就播放谁,播放的具体是哪个其实完全是随机的。当然,虽然说是随机,但游戏也有规定权重在其中,哪个声音文件权重大就有更高几率抽到那个声音。

\/ysound是播放声音,相对应就还有一个\/stopsound用来停止播放声音。

\/stopsound

作用:停止声音播放。

需要权限等级:java-2,基岩-1

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

格式:

java

\/stopsound <玩家:目标选择器>[声音类别][声音名称]

基岩

\/stopsound <玩家:目标选择器>[声音名称]

玩家这个参数在这边用于指定要停止谁的声音,也就是让谁听不到声音。

如果仅仅指定了玩家,将会停止该玩家所听到的所有(游戏中的)声音,也就是让这个玩家的耳朵突然安静下来。你也可以额外指定声音类别和声音名称两个参数,来指定具体要停止什么声音。

举个例子:

\/stopsound bloc ——java

\/stopsound ——基岩

这两条指令都将会停止tnt嘶嘶作响的声音。

看起来上面的指令没有丝毫的问题,但仅仅是看起来而已。

如果我们不知道属于哪个声音类别怎么办?毕竟wiki上可没有标出这个的类别。

答案很简单,我们只需要:

\/stopsound *

不去管就行了!管它干什么?!多管闲事啊?浪费精力又浪费时间。

当你不知道也懒得知道你要停止的声音的类别是什么的时候,可以直接选择填写星号来全选全部声音类别。可惜的是,这个版本在低版本行不通(1.12.2就没有这东西,还得老老实实找类别)。

现在我们已经基本上了解得差不多了,如果你认为可以了就前往下一章或去干其他事情吧,接下来我们将会讨论:如何找到那该死的。

对于java版,我们首先需要来到minecraft的根目录,也就是找到.minecraft文件夹。对于非官方启动器来说,一般它和启动器位于同一个目录下;对于官方启动器来说,不同系统的情况不一样:

windows:系统盘\\用户(user)\\你的用户名\\appdata(这是个隐藏文件夹)\\roaming\\.minecraft\\

mac os:系统盘\/用户(user)\/你的用户名\/资源库(library)\/application support\/minecraft\/

linux:系统盘\/你的用户名\/.minecraft\/

注:在mac os中,你默认是看不到资源库(library)这个文件夹的。这时候你就要确保此时访达正选择你的用户文件夹,然后点击左上方的前往→前往文件夹,然后在跳出的窗口中输入『资源库』或『library』三个字,就可以临时显示出这个文件夹了。

然后,我们需要来到如下的位置:

.minecraft\/assets\/indexes\/或minecraft\/assets\/indexes\/

在这里,你会发现一堆名称是.json的文件。这是什么东西呢?

你不用管他,也不需要管它是什么东西,用记事本或文本编辑打开你需要的版本即可。打开后,使用ctrl+f或mand?+f开启查找模式,然后输入,你就会找到一个唯一的结果:“minecraft\/“:{“hash“:“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx“,“size“: xxxxxx}

是不是感觉这似乎在哪里见过?其实这就是json,和之前讲过的json文本的格式是一模一样的。

接下来,你需要将hash的值复制下来,然后来到如下文件夹:

.minecraft\/assets\/objects\/或minecraft\/assets\/objects\/

你会看到一大堆不明意义的文件夹,不用担心,直接使用搜素功能,搜索你刚刚复制的内容,稍等片刻,你就会找到一个文件名和你复制内容一模一样的文件。虽然它没有后缀名,但其实它就是我们要找的文件。右击使用记事本或文本编辑打开它,如果你找对的话,你就会看到开头写着:

““:{

“sounds“:[

“ambient\/cave\/cave1“,

“ambient\/cave\/cave2“,

…….

如果你的访达或文件管理器迟迟找不到文件,那也别担心,你只需要看看你复制内容的开头两个字符,然后找到相对应的文件夹。比如开头是『97』就找叫做97的文件夹,找到后,你再仔细翻一翻就可以找到了。

的json结构大致是这样的:

{“声音名称”:{“声音文件”:[声音文件列表],”声音字幕本地化键名”:”一个本地化键名”},……}

懂了吧?当然,只是在1.7.2版本后才被弄到如此离谱的地方。在1.7.2版本,很好找,它就在这里:

.minecraft\/ assets\/或.minecraft \/virtual\/legacy\/

而且文件名就叫

如果你同时安装了1.7.2和更新的版本,那么两类文件都将会同时存在。

(那对于比1.7.2更老的版本呢?)

(根本不用找,因为没有。这东西是在1.7.2才被添加进来的)

另外,对于java版的资源包来说,其也有文件,就在资源包的\/assets\/<命名空间>\/下,且就叫。

找到了,那么基岩版的sound_在哪呢?

很好找……….个屁!但至少没有那么多弯弯绕绕的。

对于windows10版本来说,你需要找到:

系统盘:\\program files\\windowsapps\\_应用版本号_x64__8wekyb3d8bbwe\\data\\resource_packs

打开resource_packs,你会发现里面有一大堆叫做vani_<游戏版本>的文件夹。不用管这些,你只需要找到没有后缀的『vani』文件夹,点进去,再找到sounds文件夹,再向下滑,就是sound_文件了。整个目录下来是这样的:

c:\\program files\\windowsapps\\_应用版本号_x64__8wekyb3d8bbwe\\data\\resource_packs\\vani\\sounds\\sound_

对于android版本来说,最简单的办法是安装一个mt管理器,然后将你手机上的minecraft打包成安装程序apk文件,然后再使用mt管理器通过zip视图打开,再打开split_install_,来到assets\/resource_packs\/vani\/sounds,就可以找到sound_了。

对于ios和其他版本来说…….抱歉,我不清楚。

现在我们两个文件都找到了,本章也就到此结束。

历史

java

1.6.1——加入了\/ysound

1.7.2——加入了

1.9——\/ysound支持tab自动补全了,并开始要求使用source参数。更改了许多声音名称。

1.9.3——加入了\/stopsound

携带版

1.0.4——加入了sound_

1.0.5——加入了\/stopsound和\/ysound

上一章目录+书架下一章