我的界乐世界乐器演奏包制作指南
凌晨两点半,咖啡杯见底了,器演突然想起来答应朋友做个《我的奏包世界》乐器演奏包的教程。这玩意儿其实没想象中那么难,界乐就是器演得跟红石电路死磕。我边折腾边记笔记,奏包你们将就着看。界乐
一、器演准备工作
先得搞清楚游戏版本,奏包1.12之后的界乐版本用数据包,老版本得用资源包+命令方块。器演我以Java版1.18为例,奏包你需要准备:
- 文本编辑器(别用记事本,界乐VS Code或者Notepad++都行)
- Audacity这类音频编辑软件
- 至少三种不同音色的器演乐器采样(后面会解释为什么)
昨天试了直接用手机录音,效果跟破锣似的奏包。建议去Freesound.org找专业采样,记得选CC0协议的。
二、音频处理
这里最容易翻车。我上周做的第一个版本,吉他声听起来像放屁,重做了三次才明白门道:
参数 | 推荐值 |
采样率 | 22050Hz |
位深度 | 16bit |
单声道 | 必须的 |
重点来了:每个音符要单独导出成ogg格式,命名规则是note_[音高],比如note_15.ogg。音高范围是0-24,对应钢琴的两个八度。
三、文件结构
凌晨三点半,咖啡续上了。现在来建文件夹,结构要这样:
- sounds
- note_block
- custom_instruments
- assets
- minecraft
别问我为什么这么绕,Mojang的祖传代码就这么设计的。把处理好的音频扔进custom_instruments文件夹,然后在note_block里放个sounds.json。
sounds.json怎么写
这个最折磨人,我直接给你个模板:
{ "block.note_block.custom_instrument": { "sounds": [ { "name": "custom_instruments/note_0", "pitch": 0.5 }, //...其他音符 ] }}
注意每个音高要单独声明,pitch值从0.5到2.0线性分布。昨晚偷懒用Python生成了这段json,代码找不到了...
四、注册乐器
现在到最玄学的部分了。在data/minecraft/tags/items里新建个noteblock.json:
{ "replace": false, "values": [ "minecraft:bone_block" ]}
这个例子是用骨头块当触发器。你肯定发现了,原版有16种乐器音色,我们要挤进去就得替换某个现有乐器的触发方块。
音色对照表
方块类型 | 原版音色 |
黏土/陶瓦 | 长笛 |
沙子 | 小军鼓 |
玻璃 | 电子音 |
我建议替换长笛音色,因为它的频段不容易跟其他乐器打架。当然你要是做重金属包,替换贝斯音色更带感。
五、调试技巧
凌晨四点半,窗外有鸟叫了。说几个血泪教训:
- 音高不准?检查json里的pitch值是不是线性分布的
- 爆音?把音频增益调到-3dB再试试
- 某些音符不响?八成是文件名拼错了
最坑的是游戏不会报错,只能靠耳朵听。建议做个测试地图,摆一排不同音高的音符方块,挨个敲。
对了,如果你要做和弦效果,得用多个音符方块配合红石中继器。这个太复杂了,改天单独写篇红石音乐教程...
六、打包发布
把整个文件夹压缩成zip,改后缀为.mcpack就行。要是给朋友用,记得提醒他们要禁用原版音效包,不然会冲突。
天快亮了,最后唠叨句:别用铜块当触发方块!1.17的铜块音色机制有bug,我排查了两天才发现是这破问题。