符文工房吧 关注:20,122贴子:325,661

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

取消只看楼主收藏回复

想要实现这个功能的话,我们就要思考一下该怎么实现,首先需要在MainForm类中添加相关菜单选项,即导出所有WAV的选项。
我们找到相关的代码,按照它的规范添加一个导出所有WAV的选项即可。



IP属地:云南16楼2025-03-26 01:12
回复
    按照它的规范添加完菜单选项后,它这里显示未包含定义的话不要着急,我们在解决方案资源管理器的Properties中找到Strings.resx添加相关字符串资源即可,添加完成后就不会报错了。





    IP属地:云南17楼2025-03-26 01:17
    回复
      处理完菜单选项我们就可以写批量导出WAV的方法了,先创建CommonOpenFileDialog类的实例,提示用户选择保存目录。



      IP属地:云南19楼2025-03-26 01:25
      回复
        文件夹选择完成后,我们定义两个值为0的int类型变量,用于存储成功导出和失败的计数,再做一些播放状态的记录,例如当前的音乐索引,播放状态,是否淡出,循环次数,再调用Stop方法停止播放。


        IP属地:云南20楼2025-03-26 01:38
        回复
          接着使用for循环遍历所有音乐,使用try…catch结构来捕获可能出现的异常。
          在try块中,可以先对转换失败的情况做一个处理,通过加载音乐检查音轨数据,如果音轨数量为0就是转换失败,可以添加转换失败的计数,再使用continue语句跳过当前迭代继续循环,则跳过转换失败的音乐继续下一个。


          IP属地:云南21楼2025-03-26 01:55
          回复
            然后继续在try块中处理转换成功的情况,定义两个string类型的变量,用于存储音乐名和文件名,音乐名由于我之前提到过这个工具默认保存文件名会带有双引号,所以要调用之前处理非法字符的方法。
            除了这个以外,我们还可以写一个确保导出的WAV文件路径是唯一的方法,防止出现文件名相同的情况,导致文件被覆盖,GetUniqueFilePath方法可以支持在文件名末尾添加递增的序号。



            IP属地:云南23楼2025-03-26 02:19
            回复
              文件名处理完成后就可以导出音乐了,其中Engine.Instance.Player.ShouldFadeOut = true是启用音频淡出效果,NumLoops和音乐循环次数有关,最后调用Record方法生成WAV文件并保存到指定路径,逻辑和之前导出单个WAV逻辑一样,这段代码执行成功的话,则增加转换成功的计数。


              IP属地:云南24楼2025-03-26 02:22
              回复
                catch块则用于处理异常,出现异常则增加转换失败的计数,并提示用户导出失败。
                finally块则恢复导出参数,了解C#中异常处理结构的话,就知道不论程序在执行过程中是否发生异常,finally语句中的代码总是被执行。


                IP属地:云南25楼2025-03-26 02:23
                回复
                  for循环结束后,就可以恢复之前的播放状态,并提示成功导出的音乐的数量和失败的数量了。


                  IP属地:云南26楼2025-03-26 02:28
                  回复
                    完成导出所有WAV的方法后,我们还需要在在FinishLoading方法中启用这个选项,不然这个选项就无法使用。
                    代码的逻辑是判定当前加载音乐的数量,如果大于0就启用。



                    IP属地:云南27楼2025-03-26 02:34
                    回复
                      同样导出所有WAV的选项在DisposeEngine方法中也要禁用,不然在引擎中止时,导出所有WAV的选项依然还可以点击的话,可能会产生异常。


                      IP属地:云南28楼2025-03-26 02:40
                      回复
                        关于解决VGMusicStudio保存的文件名有双引号,还有批量导出的功能就这些了,很久不搞代码现在也生疏了。
                        其中有借助了AI的帮助,不过我还是理解了代码还有这个功能是怎么实现的,感觉我好几年前学的有些东西现在也是过时了,代码水平确实不如AI。
                        这个是我测试批量导出牧场物语双子村的音乐也没问题,有时候确实存在部分没有音轨的音乐导出失败的情况。


                        IP属地:云南29楼2025-03-26 02:49
                        回复
                          说完了怎么提取以后,借这个贴子发点牢骚吧,不喜欢的可以离开了。
                          记得早期在这个贴吧发相关贴子(2017年)的时候,当年我只有16岁,年龄并没有你们想象的那么大,现在已经从学校出来了好几年,距离第一次工作也有四年多了,今年也过第二个本命年了。
                          不知道这个吧现在还有没有人记得我,不过我给很多人的印象都是不太合群,性格糟糕吧。
                          我确实不太擅长与人打交道,性格也的确不好,我这边人生其实也算是挺失败的,小时候学习一直都不好,考试都是垫底,以前来这边发贴其实也算是逃避现实,当时我可能是有点装过头了,让很多人误以为我是大佬,但其实并不是,我只是站在了其他大佬的肩膀上才做到那些东西的,自己是没什么技术的。
                          现在来看自己当年或许确实是在拿一生中最珍贵,最该提升自己的时光,去搞有些无关紧要的东西,最终第一学历就只是个专科,做不了什么技术型的工作,这几年给人家扫地收垃圾也是混日子了,未来几十年都要为那一口苦饭发愁,现在感觉我还不如有个跟我一样住群租房的前辈。
                          或许这就是年少无知,未在正确的时间做该做的事,结果换来了后半辈子的卑微吧。


                          IP属地:云南30楼2025-03-26 02:50
                          回复
                            这几年生活和周围的人际关系都出现了巨大变故,自己也活成了曾经讨厌的模样,低谷期选择主动断绝了大多数人的关系,做法是有点极端,不过也是想着给自己留下最后一点体面,这里还是想给有些以前加过我的人道歉,我现在对很多东西也确实是有心无力,也提供不了什么价值。
                            虽然我也确实热爱计算机专业,前几年读成教混了个本科文凭,后面虽然可以申请学位,不过我那几年还是比较混的,我在2022年去医院确诊过双相,早期认识我的有些人,可能发现我有时候确实不太稳定,没法给别人带来笑容和情绪价值,现在精神状况有时候也不太好。
                            学业方面我也确实荒废了,那几年我其实是一堂课都没有去上过,网课挂机,只是按部就班的完成那边的要求,还有工作要做的事,不过有些东西我以前学过,要做的题复习一下还是能做的,像毕设和论文我用的就是C#写的Windows窗体程序,不过做出来的程序很垃圾,写出来的论文质量也不高,程序方面甚至还不如我当年的水平,我也确实是很多年没有再继续学习了,所以也有点不配得感吧。


                            IP属地:云南31楼2025-03-26 02:51
                            回复
                              这个贴子也没啥技术含量,写这个贴子的过程中居然发现以前提取过了,而我还要发这个贴子,或许是想向自己逝去的青春告别吧。
                              这几年在贴吧活跃越来越少了,大多数时候只是看贴,而不怎么发贴了,关于破解和提取的话,以后可能不会再搞了,就算要搞可能也只是私底下自己玩玩,提取出来的东西只会烂在自己硬盘里,不会再公开发布,因为之前出过类似纠纷,现在精力有限,也就不想再掺和到这类破事中,搞这个某种程度上来说,也确实违反了软件或者游戏的许可条款,是不能在有些公共场合公开发布的。
                              这里还是感谢以前的吧主皮触和现在的吧主舒露露,能够给我这个另类的人一个非常规的空间。


                              IP属地:云南32楼2025-03-26 02:56
                              回复