mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2025-09-07 04:46:23 +00:00
2.3.0,基于FSQ的完整流式音符信息传输支持。
This commit is contained in:
@ -1,3 +1,37 @@
|
||||
# FSQ 文件格式
|
||||
|
||||
还在设计
|
||||
FSQ 文件是 音·创 库存储音符序列的一种格式,取自 **F**lowing Music **S**e**q**uence 之名。
|
||||
|
||||
现在 音·创 库及其上游软件使用的是在 MSQ 第三版 的基础上进行流式的兼容性变动。
|
||||
|
||||
## FSQ 第一版
|
||||
|
||||
第一版的码头是 `FSQ!` ,这一版中,所有的**字符串**皆以 _**GB18030**_ 编码进行编解码,**数值**皆是以 _**大端字节序**_ 存储的无符号整数。
|
||||
|
||||
码头是文件前四个字节的内容,这一部分内容是可读的 ASCII 字串。因此,这一版的文件前四个字节的内容必为 `FSQ!`。
|
||||
|
||||
因为这一版本是在 MSQ 第三版的基础上演变而来的,因此取自 MSQ 码头的 `MSQ!` 而改作 `FSQ!`。
|
||||
|
||||
### 文件头
|
||||
|
||||
FSQ 第一版的文件头是在 MSQ 第三版的文件头的基础上增加了一个占 5 字节的全曲音符总数。
|
||||
|
||||
也就是说,与 MSQ 第三版一致的,在这一元信息中,**音乐名称长度**和**最小音量**合计共 2 字节;**高精度音符时间控制启用**和**总音调偏移**合计共 2 字节;因此,除**音乐名称**为任意长度,前四字节内容均为固定。而最后增加 5 字节作为全曲音符总数。
|
||||
|
||||
### 音符序列
|
||||
|
||||
FSQ 格式不包含音符的通道信息,在读取处理时默认将同一乐器的音符视为同一通道。也就是说,仅存在一个序列。其中每个音符的信息存储方式与 MSQ 第三版一致。
|
||||
|
||||
音符序列的存储顺序是按照音符的**开始时间**进行排序的。
|
||||
|
||||
但是注意!有可能一个较长的音符的开始到结束时间内还包含有音符,此时如有要适配的读取器,还请继续读取直到下一个音符的开始时间大于此较长音符的结束时间。
|
||||
|
||||
在每 100 个音符后,插入一段 32 位的 XXHASH32 校验码,其所校验的内容为这一百个音符中每个音符的第 6 个字节彼此异或之结果,种子值为这一百个音符中每个音符的第 2 个字节的彼此异或结果。
|
||||
|
||||
若最后不满足 100 个音符,则不插入上述校验码。
|
||||
|
||||
### 文件校验
|
||||
|
||||
在所有有效数据之后,包含一个 128 位的校验值,用以标识整个文件结束的同时,验证整个文件的完整性。
|
||||
|
||||
该 128 位的校验值是 包括码头在内的元信息的 XXHASH64 校验值(种子值是全曲音符数) 对于前述所有 XXHASH32 校验值彼此异或的异或 所得值之 XXHASH128 校验值,以 全曲音符总数 作为种子值。
|
||||
|
@ -1,12 +1,12 @@
|
||||
# MSQ 文件格式
|
||||
|
||||
MSQ 文件是 音·创 存储音符序列的一种格式,取自 MusicSeQuence。
|
||||
MSQ 文件是 音·创 库存储音符序列的一种格式,取自 **M**usic**S**e**Q**uence 类之名。
|
||||
|
||||
现在 音·创 及其上游软件使用的是在 第二版 的基础上增设验证功能的 MSQ 第三版。
|
||||
现在 音·创 库及其上游软件使用的是在 第二版 的基础上增设校验功能的 MSQ 第三版。
|
||||
|
||||
## MSQ 第三版
|
||||
|
||||
第二版的码头是 `MSQ@` ,这一版中,所有的**字符串**以 _**GB18030**_ 编码进行编解码,**数值**以**_大端序_**存储。
|
||||
第二版的码头是 `MSQ@` ,这一版中,所有的**字符串**皆以 _**GB18030**_ 编码进行编解码,**数值**皆是以 _**大端字节序**_ 存储的无符号整数。
|
||||
|
||||
MSQ 第三版的码头是 `MSQ!`。
|
||||
|
||||
@ -48,7 +48,7 @@ MSQ 第三版的码头是 `MSQ!`。
|
||||
| **乐器名称** | sound_name | 依据先前定义 | 最多可支持 31 个中文字符 或 63 个西文字符,其长度取决于先前获知的 “乐器名称长度” 的定义 |
|
||||
| **声像位移**(非必含) | position_displacement | 共三个值,每个值 16 位 共 48 位 | 若前述**是否启用声像位移**已启用,则此值启用;三个值分别代表 x、y、z 轴上的偏移,每个值支持数值 0~65535,注意,这里每个 1 代表最小音量的 0.001 个单位,即取值是此处表示数字的千分倍 |
|
||||
|
||||
### 序列验证
|
||||
### 序列校验
|
||||
|
||||
_第三版新增_
|
||||
|
||||
@ -56,7 +56,7 @@ _第三版新增_
|
||||
在这 128 位里,前 64 位是该通道音符数的 XXHASH64 校验值,以 3 作为种子值。
|
||||
后 64 位是整个通道全部字节串的 XXHASH64 校验值(包括通道开头的音符数),以 该通道音符数 作为种子值。
|
||||
|
||||
### 文件验证
|
||||
### 文件校验
|
||||
|
||||
_第三版新增_
|
||||
|
||||
|
Reference in New Issue
Block a user