符文工房吧 关注:20,114贴子:325,540

【资源重发】NDS符文工房1到3音乐和音效提取

只看楼主收藏回复

楼主之前整理硬盘的时候,发现了以前用过的一些别人的开源工具,就突然回想到了以前的时光,不过想着以前提取NDS平台符文工房音乐的音质不是很好,有些音乐也有失真的情况,就想做一个补档,虽说现在我基本上不搞这些了,以后也不会再发布相关的东西,但还是想弥补一下当年的遗憾,并提出一点解决方案,希望对这方面有需求或者感兴趣的有一点点帮助。


IP属地:云南1楼2025-03-25 23:48回复
    这次发布的BGM提取音质比以前的更好,失真的情况也有改善,除了序列音乐SSEQ以外,还有STRM,也附带了其他音效和人物的语音。
    以前我记得好像就3代发布过STRM,1和2没发过,以前提取的音乐有失真的情况,所以心血来潮就想补个档,对1代和2代人物语音有兴趣的可以看看。




    IP属地:云南2楼2025-03-25 23:50
    收起回复
      提取的方法我这边也简单说明一下,不想下载的话也可以自己操作,该方法也适用于音乐使用SDAT封包的其他NDS游戏,如果不知道我说的是什么意思,可以看我好几年前发的相关贴子,里面有相关的解释,以前说过的东西只简单提一嘴,就不详细说明了。


      IP属地:云南3楼2025-03-25 23:53
      回复
        提取SDAT的话不用多解释了,使用支持解包或者查看NDS游戏内部文件的工具就行,我用的是MKDS Course Modifier,这个工具可以识别SDAT文件,并把它归类为Sound类型,直接导出就行。


        IP属地:云南4楼2025-03-25 23:55
        回复
          把SDAT导出以后,我们就可以根据需求提取里面的音乐和语音了,先拿STRM举例。
          NDS平台的符文1到3人物语音是以STRM封装的,导出STRM的话非常简单,只要把SDAT解包,我用的是老牌开源工具Tinke,这个工具可以支持SDAT并提取出里面的STRM,STRM使用安装了vgmstream插件的foobar2000就可以播放和转换,不过我记得也可以直接使用vgmstream程序来转换,喜欢哪种方式就用哪种方式吧。


          IP属地:云南5楼2025-03-26 00:00
          回复
            SSEQ的导出这个就复杂一些,这个东西我在2016年就在学习怎么搞了,记得最早期我使用过ndssndext直接提取,并没有做音色库的处理,所以那样提取出来的音乐失真是最严重的。
            后面才知道想要完美提取出序列音乐,必须将MID搭配音色库文件(例如DLS或者SF2)才能提取,记得以前使用过VGMTrans可以导出音色库,不过这个软件我记得非常远古的版本只支持将音色导出为DLS,不支持SF2,SF2是后面的版本才支持的,所以那会我还折腾过Audio Compositor来进行MID和DLS的处理。



            IP属地:云南6楼2025-03-26 00:14
            回复
              不过我这次使用的方法当然与这个无关,只是回忆了一下以前的折腾过程,后面我发现了一个很好用的开源工具,也就是来自Kermalis的VGMusicStudio,这个工具以前我好像也发贴介绍过,不过当时也没仔细用,之前整理硬盘在一系列文件夹中又找到了这个工具,就在想能不能给它添加一个批量导出所有音乐的功能,并解决一些问题。


              IP属地:云南7楼2025-03-26 00:15
              回复
                由于VGMusicStudio的开源协议是GPLV3,所以还是有保留原作者名和公开修改后代码的义务。
                但我改的地方比较低级,就不在Github发布了,就简单在这个贴子里提一下是怎么改,批量导出的功能该怎么实现就行。
                记得以前乱改EveryFileExplorer的代码结果被老外Fork过去了,当时我改的那个版本其实问题很多,就属于是脸都丢到国外了。


                IP属地:云南8楼2025-03-26 00:17
                回复
                  首先是这个工具保存WAV会自带双引号的问题,这样会导致文件名无效,我们知道在Windows系统中,文件名是有命名规则的,双引号被用来表示字符串,因此就不能做为文件名。



                  IP属地:云南9楼2025-03-26 00:24
                  回复
                    要解决这个问题的话很简单,我们先使用git clone这个项目,再使用Visual Studio打开这个项目,找到主窗体MainForm的代码文件。



                    IP属地:云南10楼2025-03-26 00:29
                    回复
                      打开MainForm.cs后,我们查找导出WAV的方法,也就是ExportWAV,并注意一下代码是怎么写的。


                      IP属地:云南11楼2025-03-26 00:34
                      回复
                        想解决这个问题的话,我们自然要注意的是DefaultFileName这里,这一行代码是导致文件名自带双引号的原因。


                        IP属地:云南12楼2025-03-26 00:41
                        回复
                          我们可以写一个清理文件名中非法字符的方法,使用Path.GetInvalidFileNameChars方法,获取包含不允许在文件名中使用的字符的数组,将字符数组转换为字符串,对字符串中的特殊字符进行转义,再将转义后的无效字符包裹在正则表达式的字符类里,最后使用正则表达式将fileName中所有匹配的非法字符,替换为空字符串即可。
                          写完这个方法后,在ExportWAV的DefaultFileName那里,调用这个方法就可以了,这样保存的文件名就不自带双引号了。




                          IP属地:云南13楼2025-03-26 00:47
                          回复
                            翻以前的贴子才发现我好像在23年做过了,有点尴尬了,这个贴子就当无意义的水贴吧
                            毕竟是重复的内容,这次发的内容也比较混乱,吧主看到的话也最好不要加精了。


                            IP属地:云南14楼2025-03-26 00:56
                            回复
                              然后就是给这个工具添加批量导出WAV的功能,即一次全部导出SDAT里面的所有音乐,这次我是用这个方法来批量提取的,所以包含了一些以前未提取过的音效。
                              记得以前我发的似乎是一个一个的手动保存,那样效率较低,且浪费时间,所以这里就介绍一下为这个工具添加批量导出的方法。


                              IP属地:云南15楼2025-03-26 00:59
                              回复