VOCALOID/UTAU调声;歌词翻译
http://sdercolin.com

【调声相关】关于CeVIO如何复制音轨以及工程文件ccs简要分析

其实我刚才才发现原来参数可以复制,那么其实复制音轨也不是很有必要了。

但是还是随便敲几个字说一下吧。


【2015.11.2追记】

复制音轨其实可以保存音轨单位,再读取就可以了所以后面的没啥用,不用看了。不删是因为我好歹写了这么多觉得删了可惜(喂

不过想要了解一下格式还是可以看看的(x



想必使用CeVIO的大家一定都发现了编辑器并没有提供复制音轨的功能,于是我们可以通过直接修改工程文件的方法来进行这个动作。

下面我先来简单介绍一下ccs工程文件的结构。

如果你并没有兴趣可以跳过下面这段,直接看最后的步骤概括即可。


ccs与vsqx相同,是一个XML的文档,所以基本就是一个节点树的结构。

即:

主节点包含子节点,然后每个子节点下面又包含自己的子节点。

每个节点有自己的名称,属性等。


用记事本打开ccs工程,第二行就是工程的母节点<Scenario>。

<Scenario>下有两个子节点,分别是<Generation>和<Sequence>。其中<Generation>包含的是一些引擎及音源库的版本信息,这次我们不展开介绍。<Sequence>仅包含一个子节点<Scene>,<Scene>则包含了几乎所有我们需要的信息。(所以我也不知道它要写Sequence这一级是干什么用的)于是让我们来重点看一下<Scene>。

<Scene>下包含<Units>、<Groups>、<SoundSetting>。其中<SoundSetting>没有子节点并且一看就懂,我就不解释了。

与VOCALOID不太一致的是,CeVIO没有把序列作为音轨的一部分,而是分别编组,然后用id进行对应。<Units>包含的是工程中的全部序列,也就是承载实际发声信息的片段。<Groups>则包含了所有的音轨。


先来看看<Groups>:

<Groups>下面有数个<Group>子节点,分别对应编辑器中看到的音轨。

以下是一个实例:

<Group Version="1.0" Id="548cfee5-46d3-4d76-b3f1-23aef6356dda" Category="SingerSong" Name="ソング 1" Color="#FFAF1F14" Volume="0" Pan="0" IsSolo="false" IsMuted="false" CastId="XSV-JPF-W" Language="Japanese" />

这里我挑最重要的三个进行说明:

1.Name,显然这是显示在编辑器中的音轨名称

2.Category,这是标记这个音轨是歌唱/语音/外部音频的参数

3.Id,这是这个音轨在程序中的名称标示,Name是可以重复的,而Id并不会重复,是由程序按照某种规则随机生成的。

另外我们发现,音轨并没有类似Number的表示顺序的属性,经确认,音轨在编辑器中的顺序决定于<Groups>下各个<Group>节点的排列顺序。


再来看看<Units>:

<Units>下面则有数个<Unit>节点,分别对应编辑器中看到的序列片段。

目前编辑器只允许每个音轨有一个序列,且起始时间固定,因此序列和音轨是一一对应的。

让我们来看一个<Unit>的实例:

<Unit Version="1.0" Id="" Category="SingerSong" Group="548cfee5-46d3-4d76-b3f1-23aef6356dda" StartTime="00:00:00" Duration="00:00:18" CastId="XSV-JPF-W" Language="Japanese">

其中属性Group即是这个Unit所对应的Group的Id。


<Unit>仅含有一个<Song>子节点。(所以我还是不知道为什么要有这一级)

<Song>还有以下四个子节点:<Tempo>、<Beat>、<Score>、<Parameter>,分别对应BPM的变化点,节拍的变化点,音符,参数的信息。

其中<Tempo>和<Beat>非常简单,不作赘述。<Parameter>我还没搞懂,也不讨论(滚吧你)。

<Score>中的每个<Note>子节点都代表一个音符,其最主要的属性含义如下:

Clock:音符的起始位置(以tick为单位,480tick=1个4分音符)

PitchStep:音名的前半部分,C、C#、D……依次对应0~11

PitchOctave:音名的后半部分,为一个整数,如C6的PitchOctave就是6,而PitchStep为0

Duration:持续长度(以tick为单位)

Lyric:歌词

另外<Score>还包含<Key>子节点,表示调号变更,但实际并没有什么卵用。


到此我们应该了解了CeVIO的音轨、序列和音符的关系,总结如下:

1.<Groups>下各个<Group>节点确定了工程中的音轨。它们没有序号,只有一个乱码形式的Id标示它们的身份。显示在工程中的顺序由节点的排列顺序决定。

2.<Units>下面的<Unit>节点决定了工程中的序列。目前编辑器的限制导致<Unit>和<Group>是一一对应的。其对应依赖<Unit>的Group属性和<Group>的<Id>属性,当它们相同时即配对。

3.音符信息存在于<Unit>→<Song>→<Note>。


最后我们来总结一下如何快速地复制一个音轨。

0.备份你的ccs文件,不然万一出错你就该哭了。

1.用记事本打开ccs文件(如果你有Notepad++或者类似程序,请选择Xml语言模式进行操作,因为可以折叠节点)

2.按照<Scenario>→<Sequence>→<Scene>→<Groups>→<Group>的顺序找到你要复制的音轨。

3.复制那个<Group>子节点,将其Id属性略微修改(尽量少,比如挑一个数字改成0)。

4.按照<Scenario>→<Sequence>→<Scene>→<Units>→<Unit>的顺序找到你要复制的序列,它的Group属性(那行乱码)应该和之前找到的<Group>的Id属性是相同的。

5.复制这个<Unit>节点(注意从<Unit>到</Unit>都要复制),并修改Group属性(那行乱码),和之前的修改方式相同。

6.保存工程,关闭,用CeVIO打开工程。

(啊,好像还是挺麻烦的,不如乖乖把参数都复制过来是吧wwww)


总之希望本文对大家有所帮助。如果我能够看懂参数部分,到时候会再写出来,以帮助各位大佬开发一些辅助调声的小程序。

谢谢!

评论(5)
热度(6)

© 科林S.der | Powered by LOFTER