hozuki / libcgss

libcgss is a helper library for THE iDOLM@STER Cinderella Girls Starlight Stage (CGSS/DereSute/デレステ). It currently supports HCA audio decoding and ACB exploring. It also applies to other games like THE iDOLM@STER Million Live! Theater Days (MLTD/MiriShita/ミリシタ).
Other
94 stars 8 forks source link

Not all HCA files are exported from ACB #10

Closed YueLengM closed 4 years ago

YueLengM commented 4 years ago

对同一个 ACB 文件进行解包时,acb2hcas 导出了 170 个 hca 文件,而 VGMToolbox 导出了 174 个文件。 按照软件的命名顺序,缺失了 prd_cv_0001_coop_0022_08.hca prd_cv_0001_send_0153_01.hca prd_cv_0001_send_0153_02.hca prd_cv_0001_send_0153_03.hca 四个文件。

cv_0001.zip -b 00000000 -a C59E7114

hozuki commented 4 years ago

测试了一下,acbunpack 正常导出了命名的文件,不过不会导出未知文件。 ……所以就得融合两种方式的导出结果咯。(sigh 都快忘了当初写的逻辑了。 此外写了一个小脚本,检测了一下重复文件,结果是这样的:

!dup: cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_coop_0022_04.hca | cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_coop_0022_08.hca
!dup: cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_coop_0022_05.hca | cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_send_0153_01.hca
!dup: cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_coop_0022_06.hca | cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_send_0153_02.hca
!dup: cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_coop_0022_07.hca | cv_0001\_vgmt_acb_ext_cv_0001\awb\prd_cv_0001_send_0153_03.hca

嘛所以就是一个cue对应多个waveform了。

hozuki commented 4 years ago

现在应该修好了。我发一个新的release。

YueLengM commented 4 years ago

谢谢!辛苦大佬了。 不过 -n 参数好像默认开启了,不加的时候也会带上名字。(小声

hozuki commented 4 years ago

我傻了,已修复

YueLengM commented 4 years ago

现在不加 -n 会导出 170 个文件,加上了是 174 个。是因为不加名字无法区分了吗。

主要是这个按照顺序导出这 174 个文件的功能对我来说还是挺重要的x 因为 -n 加上的名字只是 131 个 Cue 的名字,但是并不是这 174 个文件的真正名字 (#11),所以我想通过不加 -n 的编号做一个中间状态,之后自己再去修改名字。

YueLengM commented 4 years ago

看了一下对应的 xml 文件,其实是两个 cue 包含了相同的 4 个 wav。 Snipaste_2020-04-16_19-55-33

hozuki commented 4 years ago

少了的原因是文件本身只有170个cue,但是有174个引用。在导出的时候cue做了去重处理(代码),要不确实分不清。这个行为可以考虑改进。

YueLengM commented 4 years ago

那请问能不能提供一个选项,在文件命名的时候加上 CueID 前缀或者只是普通的序号呢,比如 VGMToolbox 的 Snipaste_2020-04-19_10-35-16 (不知道为什么 VGMToolbox 正确标出了 174 个 CueID) 主要就是需要一个顺序去读取导出的文件。没有前缀的话,按照名称顺序的话肯定就乱了,创建时间也不行。

hozuki commented 4 years ago

这个不对,原文件只有131个 cue(就是有名字的那些),同样地,只有131个 cue ID,170个 waveform(实际音频文件),174个 track(逻辑音轨)。synth 表有174项,对应174个 track。 想了想,使用 track index 导出貌似也是可以的。开一个新的issue吧。 一个临时的解决方案可以是建立一个 map(waveform => index),然后对 LinkWaveform 进行去重。从 XML 的文件内容来看仍然是有序的,所以这个方法行得通。

hozuki commented 4 years ago

131个是“有名有姓”的 cue(也就是解析到了附带文件名的 waveform),cue 总数是170个。