0xAA55
原帖网址:http://www.0xaa55.com/thread-1209-1-1.html
转载请注明出处。

P.S.看着到处张贴的版规我茫然了。全部看过来以后,我决定在这个板块以“资源”的分类发布了。如果还是不对的话请告知,我会积极配合论坛管理员的操作的。

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中对应的文件的哈希值即可。整个修改步骤,大概就是我说的这个。只是我自己并没有亲自尝试。希望对此感兴趣的大家试试看实际的效果如何。

鱼青余
说吧,从哪知道的

丶大逼哥
好难懂的样子{:10_522:}

undefined
貌似挺有道理的

satgo1546
无需转换格式,直接改后缀就行——明明都已经是有ogg格式的文件头了。

15357889879
感谢楼主分享!虽然从来没在游戏中听过音乐,不过还是先收藏了!

Ayamuta
既然有原帖为啥还转...

GhostAngelJQ
感谢楼主分享

卡林
有点难懂的样子

sulu
1.8挺难的- -

zhh0000zhh
virtual.json指向的是1.7.2之前资源文件的格式
assets\virtual\legacy也是为了老版本释放的文件
而1.8.json对应的值才是1.8的资源文件,同时无需assets\virtual\legacy即可工作。

310297903
原来变了啊。。。。

0xAA55
zhh0000zhh 发表于 2015-1-26 11:29
virtual.json指向的是1.7.2之前资源文件的格式
assets\virtual\legacy也是为了老版本释放的文件
而1.8.json ...

貌似我用MCLauncherBN下载MC 1.8.1的时候,它大概自动下载了virtual.json。。求解

0xAA55
satgo1546 发表于 2015-1-26 08:54
无需转换格式,直接改后缀就行——明明都已经是有ogg格式的文件头了。

你的意思大概是说MC会自动根据文件头识别文件的吧?

zhh0000zhh
0xAA55 发表于 2015-1-26 19:37
貌似我用MCLauncherBN下载MC 1.8.1的时候,它大概自动下载了virtual.json。。求解

首先,没有virtual.json这么个东西
其次,请先确认有bug再向我反馈
我每次收到反馈都会认真测试,你反馈不存在的bug会给我额外添加很多麻烦,希望你能理解
经过测试,没有此bug,1.8.1下载的时候不会下载legacy.json

shen丶无语秒
非常感谢~~~

satgo1546
0xAA55 发表于 2015-1-26 19:41
你的意思大概是说MC会自动根据文件头识别文件的吧?

不,Minecraft只支持OGG。
根据legacy文件夹存储声音文件的后缀都是.ogg,我假设Minecraft所有的声音文件其实都是ogg格式编码的。那么我们可以通过判断里面的这些文件是不是ogg格式来判断它是不是声音文件。
方法是用WinHex打开它,看文件前四个字节是不是OggS
那么修改音乐文件的方式就很简单了。首先我们用GoldWave、foobar2000等软件将我们需要的音乐文件转换为ogg格式

既然是OGG你还转换有什么用?

772499649
www.baidu.com里也有。{:10_522:}

0xAA55
satgo1546 发表于 2015-1-26 20:13
不,Minecraft只支持OGG。
那么修改音乐文件的方式就很简单了。首先我们用GoldWave、foobar2000等软件将我们需要的音乐文件转换为ogg格式


意思是说,如果要把自己的音乐替换掉Minecraft的音乐,需要先转换格式为ogg。。。。

0xAA55
772499649 发表于 2015-1-26 20:18
www.baidu.com里也有。

你这个回帖不应该出现在这里,而是应该出现在某求助帖里,用作回答。

0xAA55
本帖最后由 0xAA55 于 2015-1-26 22:45 编辑
zhh0000zhh 发表于 2015-1-26 19:43
首先,没有virtual.json这么个东西
其次,请先确认有bug再向我反馈
我每次收到反馈都会认真测试,你反馈 ...

抱歉。我是从我一直在玩的那个MC文件夹找到的。我的游戏一直都在追随官方的更新脚步所以没注意旧版文件的存在。
另外,感谢你和你的小伙伴们开发了MCLauncherBN启动器,它的自动下载游戏功能和其它附加功能很实用。只是我有如下几个建议:
1、现在你的启动器,是需要玩家先在左边框点选自己要玩的版本,然后才能启动游戏,如果不点选,启动按钮是灰色的。因此有不少人问过我如何才能用它启动Minecraft,甚至有人到某游戏下载站找Minecraft。。。下了个很奇怪的1GB的1.25的懒人包还说加入不了我的服务器。。。我希望这个问题能得到解决。我觉得那个按钮可以不是灰色的,而是点了以后会弹出一个对话框要求用户自己点选版本可能更好些,或者如果玩家只下载了一个版本的话那就自动点选那个版本就行了。
2、下载游戏文件是一个文件一个文件下载的,我觉得如果能一次性下载一整个包可能会好些。。。也许考虑到服务器负载和启动器下载器的编写有点麻烦的话可能不好办。。不过从用户的角度来考虑这个确实是一个可以优化的点。

zhh0000zhh
0xAA55 发表于 2015-1-26 22:43
抱歉。我是从我一直在玩的那个MC文件夹找到的。我的游戏一直都在追随官方的更新脚步所以没注意旧版文件的 ...

第一个问题,,未来的V5我会考虑修改,,类似Lite的样子
第二个问题,,从百度网盘下载功能可以解决问题,我无财力搭建下载服务器提供游戏文件下载。

Hs123y
爱了爱了,兄嘚

ss3413145092
挺难懂  但是很有趣 可以试试

244085495
不清楚还有没用~

沼泽青蛙
以后说不定我会用到

gdzl
6666666666

子有伊兮
可已可以 我会自己换了,自己喜欢的音乐自己玩 ,爽翻天

淀粉彡
MCBBS有你更精彩~

加藤惠吖
好难懂好难懂 一连串的代码我就瞎了

没有昵称怎么玩
**,正在找这个,谢谢楼主

xuanfeng5201314
丶大逼哥 发表于 2015-1-26 08:41
好难懂的样子{:10_522:}

这种东西除非没事做不然懒得弄qwq

不成熟的小柠檬
22222222222222222222222222222222222222

2505210199
阿哲,好像,没看太懂

kekude
一直想把游戏里的音乐换掉,学到了学到了