Skip to content

项目重构!Project Refactoring! #2

@Comentropy-A-TRB

Description

@Comentropy-A-TRB

项目正遇到一些开发上的问题,我决定重构其编写方式以支持更多功能!

我正尝试在最短时间内实现这些功能!为了支持后期各种参数编辑的加入,计划大致如下:

决定重构 VocalSynth 的代码

后端

前置工具库

FFTW,AudioFiles

参数库

  • 发音参数表

  • (ADSR,弃用,改用参数锚点)

生成

  • 输入参数(共振峰,音符类型,音符长度,前后交融参数,湍流参数,响度参数(ADSR))
  • 输出音符的渲染(两种类型:1. 带前后交融 2. 不带前后交融)规定发音开头必须要在准线上。
  • ADSR 和 共振峰是可变长列表,音符长度设计成小数,拍子时长使用分母记法,渲染的时候再用小数。
  • 直接输出到 Temp 中,目前不考虑性能优化,直接渲染所有音。

前端 GUI

  • 上方栏有:文件,偏好。

    • 文件:
      • 保存
      • 另存为
      • 导出
      • 加载声库
    • 偏好:
      • 默认响度曲线( ADSR)(空则为 (0,100) & (100,100)),此处使用百分数
      • 设置输出设备
      • 量化(节奏线)
      • 采样率
      • 声道
    • 曲谱设置
      • 升降号标记
      • 调性突出(钦定调性,简谱显示,在右侧写简谱)
  • 交互操作:

    • 曲谱 BPM。(仿照 SV)

    • 左边钢琴卷帘,音高线上,会有音高标记,用升号标记(偏好里设置升降号标记)

      • 偏好:辅助音高显示:直接在音符右侧上显示音高。
      • 偏好:默认歌词:a
      • 音符左侧显示音素。(同一个音节音素应当用空格分开,然后由系统自己分别识别)
        • 暂时开发英文和日文的声库。
    • 调性突出

    • 长按左键拖动输入音符,shift+左键,生成单位音符,音符头尾可以拖长缩短,点住音符可以拖拽。

    • 双击音符可以编辑详细信息,实现时可选以下两种方式

      1. 弹出窗口,并阻塞原来进程(V4)
      2. 右侧弹出栏目,(SV)

      需要支持:

      1. 编辑响度锚点。
      2. 编辑音高锚点。
      3. 编辑共振峰。
      4. 编辑 EQ。
      5. 编辑长度占比和过渡(交叉)渲染参数

      编辑思路是:直接在仪表上操作,双击产生新锚点和坐标/输入数字,显示在仪表上。

    • 保存项目文件:使用 .txt 格式。

      • 音符用如下格式保存:
        • 音高 - 长度 - 音节
        • 各种参数,在后面输出。

内部 API 只渲染音符,并输出到文件里面。

外部的工作是:分割音符并且操控锚点,写入曲谱文件,交给内部渲染器。

曲谱文件:

这次重构将很多参数暂时ban掉,不过也会规范写法,方便后期加入功能。

第一行一个 BPM。

一个音符,第一行三个基本信息照旧。

第二行启用响度锚点(ADSR),0 表示使用默认 ADSR,否则是一个 x 后跟 2x 个数的形式,都是百分数

第三行,启用 EQ,0 表示默认,否则是一个 x 后跟 2x 个数的形式,一个表示频点,一个小数(至多保留两位),一个表示相对响度,一个小数。(至多保留三位)

第四行启用音高锚点,0 表示默认,否则是一个 x 后跟 2x 个数的形式,都是小数,一个表示位置,一个表示偏移量。(采用偏移量而不是绝对音高,否则精度和运算量会有点问题)

暂时ban掉共振峰编辑,感觉很神秘,不太好做,不过重写的时候也稍微注意一下。

如果锚点的开头和末尾不存在,则默认为 0.

一行空行分割音符(主要是方便调试)

如此就完成了所有要存的东西。

前端再考虑将同一个音符的不同音素分割开来,并且保持音高锚点的一致性。一个音符是一个音节,包含参数:

  1. 非单音节(即单元音):发音长短占比。(暂时ban掉,有点难写,后期再加)
  2. 双元音:交变参数编辑。(Disabled,暂时ban掉,不过反正要重构代码,稍微写成比较好改的样子)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions