教程:制作附加包/声音

From Minecraft基岩版开发Wiki
声音
系列教程
所属系列
难度
初级
前置知识
实践设备
WindowsAndroid
所需软件
  • 假日创作者功能
  • 自定义生物群系

引言[edit]

声音(Sound) 包含了游戏中所能听到的由各种音频文件所播放出的内容,例如游戏背景音乐、生物音效、方块音效、环境音效等。
接下来我们将帮助您:

  • 了解声音的文件结构
  • 修改已有声音
  • 添加自定义声音
 在此之前请先下载官方的 示例资源包 ,它能方便您接下来的操作

文件结构[edit]

  •  资源包文件夹
    •  manifest.json:清单文件
    •  sounds.json:声音的 游戏事件对应 管理文件
    •  sounds:声音主文件夹
      •  music_definitions.json:音乐注册文件
      •  sound_definitions.json:声音注册文件
      •  wiki.ogg:自定义声音文件
      •  music
        •  game
          •  calm1.ogg:需要修改的声音

声音目前支持三种文件格式 .wav .ogg .fsb ,您需要明确 音乐音效 是不同的,而 声音 是它们的总称。
此处我们修改的声音是最典型的 音乐

 注意:如果您修改了上述的任何一个文件,都需要重启游戏客户端才能起效。/reload 和 重启世界 是无效的。

开始[edit]

声音定义[edit]

接下来您需要打开 sound_definitions.json 如果没有,请先创建一个
接下来我们来观察这个文件的基本格式:

{
	"format_version": "1.14.0",   //格式版本
	"sound_definitions": {    //声音定义区
		"example.wiki": {   //名称
			"category": "neutral",  //类型
			"sounds": ["sounds/wiki"]   //声音路径
		}
	}
}

可以看到它有两个顶级属性(这里将关键字译作属性),分别是 format_versionsound_definitions,显而易见,format_version 就是版本格式,不需要我们多说了,我们来看另一个顶级属性 sound_definitions ,在上的例子中,它下面有一个 example.wiki,我们称它为短名,它并非一个 命名空间 ,但是它可以在 music_definitions.json 和 sounds.json 引用,也可以使用 /playsound 播放,但现在它还会跟游戏中的事件绑定,也没有一个有效的命名空间。
接下来我们看看下面这些属性(都在同一位置):

  • category:类型,类型由播放引擎内部使用,以决定如何播放每个声音
声音类型表
类型 含义 注意
weather 天气
block 方块
bucket
bottle 瓶子
ui 用户界面 播放时不受空间限制(即没有最大/最小距离选项)
player 玩家
hostile 敌对生物
music 音乐
record 唱片
neutral 其他
<any_string> 任何字符串 自定义你自己的声音类型
  • max_distance:最大距离(浮点值),在此距离后达到最低音量,类型错误时忽略此选项
  • min_distance:最小距离(浮点值),在此距离后,音量开始衰弱,类型错误是忽略此选项
  • sounds:管理此声音的一些特殊属性

接下来我们重点介绍 sounds 这个属性下的内容:
从上面那个json例子可以看出 sounds 有一种简单的写法,仅包含声音路径,我们接下来介绍复杂的写法:

{
	"format_version": "1.14.0",
	"sound_definitions": {
		"example.wiki": {
			"category": "neutral",
			"sounds": [
                {
                    "name": "sounds/wiki",
                    "is3D": false,
                    "stream": true,
                    "volume": 1.0,
                    "load_on_low_memory": true,
                    "pitch": 1.0,
                    "interruptible": true,
                    "weight": 1
                },
                "sounds/wiki2"  //如没有,请创建一个
            ]
		}
	}
}

观察上面的 json 范例,我们便能发现两个要点:

  • sounds 下的属性既可以为字符串,也可以为对象。当为字符串时,直接代表路径;当为对象时,则可以添加其他内容 路径 成为 name 属性 的 值
  • sounds 下面有多个属性时,随机抽取一个属性对应的路径下的音乐播放



那么 sounds 下面对象中的属性有哪些作用呢,接下来让我向您介绍:

  • name:必要的,用于表示音乐路径
  • stream:流线播放(布尔值),将这个声音修改为 缓存播放 的形式,即一次提取少部分音乐播放,而不是整段音乐直接提取到内存中,从而使用较少的内存。可以提高性能
  • volume:强度(浮点数),用来定义在游戏尝试播放声音之前,声音可以在多远的距离内。默认情况下,在引擎尝试播放声音之前,收听者必须距离声源<= 16个方块(也就是为1.0的情况)
  • load_on_low_memory:强加载到内存(又称 低内存加载 ,布尔值),即使在内存低的情况下也强制播放音乐
  • pitch:音调(浮点数) (默认为1.0)
  • is3D:立体声(又称 3D音乐 ,布尔值),是否采用立体声播放( music 和 ui 不使用)
  • weight:权重(整数值),当前权重占总权重的百分之比,就表示着有多少的概率被选中播放,上面 例子 中,wiki 的播放概率是50%,wiki2 的播放概率是50%

这样我们就成功的学会定义声音了

修改已有声音[edit]

修改已有声音很简单
在Minecraft中,音频文件储存于sounds文件夹内。通过修改sounds文件夹内对应的.ogg音频文件,便可以更改原版音乐。
具体方法也很简单,首先,在与manifest.json同层的地方,创建一个名字为sounds的文件夹,将准备好的音频文件改名为 你想要修改的原版音频文件名,后缀改为.ogg即可。
要注意的是不同的音频文件放在不同的文件夹内,如add_candle1.fsb就放在/sounds/block/cake/路径下。

定义音乐[edit]

定义音乐需要修改 music_definitions.json 文件,我们来看一下它的基本格式:

{
  "game": {
    "event_name" : "music.game",
    "min_delay": 600,   //最小延迟
    "max_delay": 1200   //最大延迟
}

可惜的是,游戏现在还不允许自定义音乐

绑定游戏事件[edit]

如果我们想让声音自动运行,我们可以将它们添加到 sounds.json 文件中。这将把声音定义直接绑定游戏事件。
我们可以看一下基本格式:

{
	"entity_sounds": {
		"entities": {
			"wiki:elephant": {  //命名空间
				"volume": 1,
				"pitch": [0.9, 1.0],
				"events": {
					"step": {
						"sound": "elephant.step",  //短名
						"volume": 0.18,
						"pitch": 1.1
					},
					"ambient": {
						"sound": "elephant.trumpet",   //短名
						"volume": 0.11,
						"pitch": 0.9
					}
				}
			}
		}
	}
}

参考[edit]

  1. 官方文档:Introduction to Resource Packs
  2. 官方文档:Creating and Adding Custom Sounds to Minecraft
  3. 官方文档:Introduction to Sounds
  4. 我的世界wiki:声音
  5. 我的世界wiki:sounds.json