0xAA55 发表于 2015-1-26 08:07:46

【文件管理】从Minecraft 1.8中提取、替换游戏音乐

Minecraft 1.8的文件目录结构和之前的版本完全不一样。资源文件在.minecraft\assets文件夹中。
所有的音乐文件都在.minecraft\assets\virtual\legacy\sounds\music里面。音质的话,Ogg格式80 Kbps左右,频谱图可以看到大约16384 Hz以上的频段被全部切断(只是从这点来看感觉和128 Kbps的MP3差不多)。
然后.minecraft\assets\virtual\legacy\records里面是所有的音乐唱片的音乐(比如《13》等)。音乐唱片是骷髅射手击杀鸡鸡怪得到的,也就是说当你同时遇到鸡鸡怪和骷髅射手的时候,你需要先把鸡鸡怪打残,然后躲在它后面让骷髅射手补一箭。。
但是如果要替换音乐文件的话,光修改这些文件是没用的。要修改,就需要修改.minecraft\assets\objects里面的内容。只有这里面的内容才是会被游戏程序读取的内容。
打开.minecraft\assets\objects文件夹我们会发现——


这……好像很棘手。不过在我看来,文件名大概是它本身的哈希值(我猜是SHA1,参考资料点此)。
根据legacy文件夹存储声音文件的后缀都是.ogg,我假设Minecraft所有的声音文件其实都是ogg格式编码的。那么我们可以通过判断里面的这些文件是不是ogg格式来判断它是不是声音文件。
方法是用WinHex打开它,看文件前四个字节是不是OggS
首先我们列出它所有的文件,然后按照文件大小倒序排列(我假设音乐文件一般有一定的体积)

另外经过观察,发现objects的文件存放的规律是——文件名(也就是它的哈希值的16进制值)的前两个字符,就是它所在的文件夹名。
如何确定哪个文件是什么文件呢?
我们试着用记事本打开.minecraft\assets\indexes\legacy.json这个文件。
可以发现它的内容就是文件的哈希值。

那么修改音乐文件的方式就很简单了。首先我们用GoldWave、foobar2000等软件将我们需要的音乐文件转换为ogg格式(Vorbis编码),然后先替换掉.minecraft\assets\virtual\legacy中对应的文件,然后从.minecraft\assets\indexes\legacy.json中找到要替换的文件的哈希值,将objects文件夹中对应哈希值的文件删除。再想办法取得我们的文件的哈希值,将我们的文件一份放到.minecraft\assets\virtual\legacy中,一份重命名为它的哈希值然后放到.minecraft\assets\objects中(子文件夹,选择和文件哈希值前两个字符对应的文件夹)。最后将我们的文件的哈希值替换掉.minecraft\assets\indexes\legacy.json中对应的文件的哈希值即可。整个修改步骤,大概就是我说的这个。只是我自己并没有亲自尝试。希望对此感兴趣的大家试试看实际的效果如何。
页: [1]
查看完整版本: 【文件管理】从Minecraft 1.8中提取、替换游戏音乐