├── .gitignore ├── README.md ├── babel.config.js ├── docs ├── api │ ├── about.md │ ├── classes │ │ ├── arrangement_selection_state.md │ │ ├── arrangement_view.md │ │ ├── automation.md │ │ ├── coordinate_system.md │ │ ├── group_selection.md │ │ ├── main_editor_view.md │ │ ├── nested_object.md │ │ ├── note.md │ │ ├── note_group.md │ │ ├── note_group_reference.md │ │ ├── playback_control.md │ │ ├── project.md │ │ ├── selection_state_base.md │ │ ├── sv.md │ │ ├── time_axis.md │ │ ├── track.md │ │ └── track_inner_selection_state.md │ ├── tutorials │ │ ├── a_minimal_example.md │ │ ├── custom_dialogs.md │ │ ├── localization.md │ │ └── memory_management.md │ └── usage_summary.md ├── download │ ├── editor.md │ ├── other.md │ ├── script.md │ └── voice.md ├── main_docs │ ├── arrangement │ │ ├── play.md │ │ ├── top.md │ │ └── track.md │ ├── menu │ │ ├── about.md │ │ ├── auto_process.md │ │ ├── edit.md │ │ ├── file.md │ │ ├── misc.md │ │ ├── modify.md │ │ ├── project.md │ │ ├── script.md │ │ ├── transport.md │ │ └── view.md │ ├── parameters │ │ ├── bottom.md │ │ ├── breathiness.md │ │ ├── gender.md │ │ ├── loudness.md │ │ ├── pitch_deviation.md │ │ ├── tension.md │ │ ├── top.md │ │ ├── vibrato_envelope.md │ │ └── voicing.md │ ├── piano_roll │ │ ├── play.md │ │ ├── roll.md │ │ └── top.md │ └── sidebar │ │ ├── about.md │ │ ├── dictionary.md │ │ ├── library.md │ │ ├── licence_and_updates.md │ │ ├── note_properties.md │ │ ├── render.md │ │ ├── settings.md │ │ └── voice.md ├── other │ └── author.mdx └── speed_start │ ├── about.md │ ├── install.md │ └── voice_data │ ├── chinese.md │ ├── english.md │ └── japanese.md ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src ├── components │ ├── HomepageFeatures.js │ ├── HomepageFeatures.module.css │ └── TeamProfileCards │ │ └── index.tsx ├── css │ └── custom.css ├── pages │ ├── index.js │ └── index.module.css └── theme │ └── Mermaid.js ├── static ├── .nojekyll ├── docs │ ├── download │ │ ├── other │ │ │ └── empty │ │ └── script │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ └── empty │ ├── main_docs │ │ ├── arrangement │ │ │ ├── play │ │ │ │ └── empty │ │ │ ├── top │ │ │ │ └── empty │ │ │ └── track │ │ │ │ └── empty │ │ ├── menu │ │ │ ├── about │ │ │ │ ├── 1.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ └── 7.png │ │ │ ├── auto_process │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ └── 4.png │ │ │ ├── edit │ │ │ │ └── 1.png │ │ │ ├── file │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ └── 3.png │ │ │ ├── misc │ │ │ │ ├── 1.png │ │ │ │ └── 2.png │ │ │ ├── modify │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ └── 3.png │ │ │ ├── project │ │ │ │ └── 1.png │ │ │ ├── script │ │ │ │ └── 1.png │ │ │ ├── transport │ │ │ │ └── 1.png │ │ │ └── view │ │ │ │ ├── 1.png │ │ │ │ └── 2.png │ │ ├── parameters │ │ │ ├── bottom │ │ │ │ └── empty │ │ │ ├── breathiness │ │ │ │ └── empty │ │ │ ├── gender │ │ │ │ └── empty │ │ │ ├── loudness │ │ │ │ └── empty │ │ │ ├── pitch_deviation │ │ │ │ └── empty │ │ │ ├── tension │ │ │ │ └── empty │ │ │ ├── top │ │ │ │ └── empty │ │ │ ├── vibrato_envelope │ │ │ │ └── empty │ │ │ └── voicing │ │ │ │ └── empty │ │ ├── piano_roll │ │ │ ├── play │ │ │ │ └── empty │ │ │ ├── roll │ │ │ │ └── empty │ │ │ └── top │ │ │ │ └── empty │ │ └── sidebar │ │ │ ├── about │ │ │ └── 1.png │ │ │ ├── dictionary │ │ │ └── empty │ │ │ ├── library │ │ │ └── empty │ │ │ ├── licence_and_updates │ │ │ └── empty │ │ │ ├── note_properties │ │ │ └── 1.png │ │ │ ├── render │ │ │ └── empty │ │ │ ├── settings │ │ │ └── empty │ │ │ └── voice │ │ │ ├── 1.png │ │ │ └── 2.png │ └── speed_start │ │ └── install │ │ ├── 1.png │ │ ├── 10.png │ │ ├── 11.png │ │ ├── 12.png │ │ ├── 13.png │ │ ├── 14.png │ │ ├── 15.png │ │ ├── 16.png │ │ ├── 17.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── 9.png └── img │ ├── ai.svg │ ├── favicon.ico │ ├── logo.svg │ ├── render.svg │ ├── script.svg │ └── svstudio.svg └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | [![Contributors][contributors-shield]][contributors-url] 6 | [![Forks][forks-shield]][forks-url] 7 | [![Stargazers][stars-shield]][stars-url] 8 | [![Issues][issues-shield]][issues-url] 9 | 10 | 11 |
12 |

13 | 14 | Logo 15 | 16 | 17 |

Synthesizer V Studio Docs

18 | 19 |

20 | 关于 Syntheszier V Studio 的内容 都在这里 21 |
22 | 探索 Wiki » 23 |
24 |
25 | 报告问题 26 | · 27 | 添加内容 28 |

29 |

30 | 31 | 32 |
33 | 概要 34 |
    35 |
  1. 36 | 关于 Synthesizer V Studio Docs 37 | 40 |
  2. 41 |
  3. 42 | 开始构建 43 | 47 |
  4. 48 |
  5. 贡献
  6. 49 |
  7. 联系我们
  8. 50 |
51 |
52 | 53 | 54 | 55 | ## 关于 Synthesizer V Studio Docs 56 | 57 | Synthesizer V Studio Docs 是一个 Synthesizer V Studio 的综合站点,您可以将其理解为 Wiki,但它并不完全是 Wiki。在提供快速上手、详细文档说明的同时,我们还有脚本 API 的中文翻译以及软件下载。 58 | 59 | ### 开发环境 60 | 61 | 我们使用 [Docusaurus v2](https://docusaurus.io/) 构建该文档。 62 | 63 | 64 | 65 | ## 开始构建 66 | 67 | ### 依赖 68 | 69 | [Node.js **14**](https://nodejs.org/download/release/v14.19.0/) 70 | 71 | ### 本地测试 72 | 73 | 1. 运行 `yarn install` 安装程序包; 74 | 2. 运行 `yarn start`; 75 | 3. 浏览器打开 `http://localhost:3000` 76 | 77 | > 在使用时,你可能会发现搜索功能无法正常使用。这是正常情况,请直接忽视这个问题。 78 | 79 | 80 | 81 | ## 贡献 82 | 83 | 所有的文档都位于 `docs` 文件夹里,您只需在相应地方添加 Markdown 文件,其他的均由我们处理。同时您可以在 `static\docs` 文件夹内的相应地方增加图片,在 Markdown 中对应添加即可。 84 | 85 | 您的每一条 Issue 和 Pull Request 我们都会认真阅读,因此,如果您有任何的意见或者想要完善文档的地方,请直接提交 Issue 或者 Pull Request 即可! 86 | 87 | 88 | 89 | 90 | [contributors-shield]: https://img.shields.io/github/contributors/linyuansup/synthesizer-v-r2-docs.svg?style=for-the-badge 91 | [contributors-url]: https://github.com/linyuansup/synthesizer-v-r2-docs/graphs/contributors 92 | [forks-shield]: https://img.shields.io/github/forks/linyuansup/synthesizer-v-r2-docs.svg?style=for-the-badge 93 | [forks-url]: https://github.com/linyuansup/synthesizer-v-r2-docs/network/members 94 | [stars-shield]: https://img.shields.io/github/stars/linyuansup/synthesizer-v-r2-docs.svg?style=for-the-badge 95 | [stars-url]: https://github.com/linyuansup/synthesizer-v-r2-docs/stargazers 96 | [issues-shield]: https://img.shields.io/github/issues/linyuansup/synthesizer-v-r2-docs.svg?style=for-the-badge 97 | [issues-url]: https://github.com/linyuansup/synthesizer-v-r2-docs/issues 98 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/api/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 了解脚本 3 | --- 4 | 5 | Synthesizer V Studio Pro 支持脚本。用户可以通过脚本为编辑器加入新功能。 6 | 7 | 脚本类似于加载一个插件,与之不同的是脚本不加载动态链接库(比如 `dll` ),Synthesizer V Studio 从中加载代码,因此你需要一个文本编辑器来编写脚本。脚本是可以跨平台(Windows, Linux, macOS)使用的。 8 | 9 | ## 语言支持 10 | * JavaScript ( ECMAScript 5.1 ) 11 | * Lua 5.4 12 | 13 | ## 功能 14 | 15 | 哪些功能是可以通过脚本编写实现的呢? 16 | * 读取、添加、编辑、移除音符、音符组、参数、轨道 17 | * 访问和修改当前选择的音符、音符组 18 | * 浏览整个项目(例如滚动并放大到某个范围) 19 | * 回放控制 20 | * 通过可自定义的对话框与用户进行交互 21 | * 异步回调(例如,调用 [`SV#setTimeout`](classes/sv.md) 超时以延迟执行功能),这意味着脚本可以无限制地在后台运行 22 | 23 | ## 如何开始 24 | * [一个最小的例子](tutorials\a_minimal_example.md) 25 | * [一个更先进的例子](https://github.com/Dreamtonics/svstudio-scripts/tree/master/HelloWorld) 26 | * [从测试脚本中学习](https://github.com/Dreamtonics/svstudio-scripts/tree/master/Tests) 27 | * 如果您不理解,请查看类参考 28 | * 在脚本中使用 [本地化](tutorials\localization.md) 29 | * 了解 [内存管理](tutorials\memory_management.md)(高级用户) 30 | 31 | ## 编程概念 32 | 33 | Synthesizer V Studio 的脚本 API 面向对象。JavaScript 和 Lua 脚本共享相同的 API,尽管调用的方式有不同。 34 | 35 | 用户可以与两种类型的对象进行交互:数据对象和 UI 状态对象。 36 | 37 | * 数据对象是项目的一部分,可以是轨道、音符、参数... 38 | * UI 状态对象更有趣。它们是抽象的用户界面。例如,[`PlaybackControl`](classes/playback_control.md) 管理播放、暂停、循环。 39 | 40 | ## 与 VOCALOID 的不同 41 | 42 | VOCALOID 同样支持 Lua 脚本,但 VOCALOID 的脚本与 Synthesizer V Studio 不兼容。主要区别是: 43 | * 在 VOCALOID 中,所有 API 都为全局功能:在 Synthesizer V Studio API 中,唯一的全局对象是主机对象 SV,大多数与数据结构的交互都是通过数据类型的方法进行。 44 | * VOCALOID API 使用基于事件的数据模型。例如,必须按顺序访问音符。Synthesizer V Studio API 提供随机访问音符、参数、音符组和轨道的能力。 45 | 46 | ## JavaScript 和 Lua 之间的重要区别 47 | 48 | ### 索引 49 | JavaScript 使用零基索引,Lua 使用单基索引。这也适用于脚本 API。 50 | 51 | 例如,在 JavaScript 中 `NoteGroup.getNote(0)` 与 Lua 中 `NoteGroup:getNote(1)` 相同。 52 | 53 | ### 调用方法 54 | 面向对象的编程基于 JavaScript API 的原型,这意味着调用方式是 `Class.Method(...)` 。 55 | 56 | Lua API 基于元表,调用方式是 `Class:Method(...)` 。 57 | 58 | 但是,即使在 Lua(例如 [`SV#QUARTER`](classes/sv.md))中,成员对象仍可以使用点访问。 59 | 60 | }>{() => } 68 | 69 | 70 | import Gitalk from 'gitalk'; 71 | import 'gitalk/dist/gitalk.css'; 72 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 73 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/arrangement_selection_state.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ArrangementSelectionState 3 | --- 4 | 5 | ## 编曲区选择状态 6 | 7 | 编曲区域内的选择状态。 8 | 9 | 如需使用该对象,请: 10 | * 在 JavaScript 中使用 `SV.getArrangement().getSelection()` 11 | * 在 Lua 中使用 `SV:getArrangement():getSelection()` 12 | 13 | ## 扩展 14 | 15 | * [嵌套对象](nested_object.md) 16 | * [选择状态](selection_state_base.md) 17 | * [音符组选择](group_selection.md) 18 | 19 | ## 方法 20 | 21 | ### clearAll 22 | 23 | ```js 24 | clearAll() → {boolean} 25 | ``` 26 | 27 | >继承自:[选择状态 - clearAll](selection_state_base.md) 28 | 29 | 取消选择支持的所有对象类型。如果所选内容已更改,则返回 true。 30 | 31 | #### 返回: 32 | 类型:布尔 33 | 34 | ### clearGroups 35 | 36 | ```js 37 | clearGroups() → {boolean} 38 | ``` 39 | 40 | >继承自:[音符组选择 - clearGroups](group_selection.md) 41 | 42 | 取消选择所有的 [音符组引用](note_group_reference.md) 。如果所选内容已更改,则返回 true。 43 | 44 | #### 返回: 45 | 46 | 类型:布尔 47 | 48 | ### getIndexInParent 49 | 50 | ```js 51 | getIndexInParent() → {number} 52 | ``` 53 | 54 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 55 | 56 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 57 | 58 | #### 返回: 59 | 60 | 类型:数字 61 | 62 | ### getParent 63 | 64 | ```js 65 | getParent() → {NestedObject|undefined} 66 | ``` 67 | 68 | >继承自:[嵌套对象 - getParent](nested_object.md) 69 | 70 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 71 | 72 | #### 返回: 73 | 74 | 类型:[嵌套对象](nested_object.md) | **undefined** 75 | 76 | ### getSelectedGroups 77 | 78 | ```js 79 | getSelectedGroups() → {array} 80 | ``` 81 | 82 | >继承自:[音符组选择 - getSelectedGroups](group_selection.md) 83 | 84 | 按照选择顺序获取所选的 [音符组引用](note_group_reference.md) 数组。 85 | 86 | #### 返回: 87 | 88 | 一个 [音符组引用](note_group_reference.md) 数组。 89 | 90 | 类型:组 91 | 92 | ### hasSelectedContent 93 | 94 | ```js 95 | hasSelectedContent() → {boolean} 96 | ``` 97 | 98 | >继承自:[选择状态 - hasSelectedContent](selection_state_base.md) 99 | 100 | 检测是否有内容被选中。 101 | 102 | #### 返回: 103 | 104 | 类型:布尔 105 | 106 | ### hasSelectedGroups 107 | 108 | ```js 109 | hasSelectedGroups() → {boolean} 110 | ``` 111 | 112 | >继承自:[选择状态 - hasSelectedGroups](selection_state_base.md) 113 | 114 | 检测是否有音符组被选中。 115 | 116 | #### 返回: 117 | 118 | 类型:布尔 119 | 120 | ### hasUnfinishedEdits 121 | 122 | ```js 123 | hasUnfinishedEdits() → {boolean} 124 | ``` 125 | 126 | >继承自:[选择状态 - hasUnfinishedEdits](selection_state_base.md) 127 | 128 | 检测选中的内容是否有未完成的编辑。例如,如果用户正在拖动一些音符 / 绘制一些控制点但是没松开鼠标,则返回 true。 129 | 130 | #### 返回: 131 | 132 | 类型:布尔 133 | 134 | ### isMemoryManaged 135 | 136 | ```js 137 | isMemoryManaged() → {boolean} 138 | ``` 139 | 140 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 141 | 142 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 143 | 144 | #### 返回: 145 | 146 | 类型:布尔 147 | 148 | ### SelectedGroup 149 | 150 | ```js 151 | selectGroup(reference) 152 | ``` 153 | 154 | >继承自:[音符组选择 - selectGroup](group_selection.md) 155 | 156 | 向选择的内容添加一个 [音符组引用](note_group_reference.md) 对象。 157 | 158 | 该参数必须是当前打开的项目的一部分。 159 | 160 | #### 参数: 161 | 162 | | 参数名 | 类型 | 描述 | 163 | | --- | --- | --- | 164 | | `reference` | [音符组引用](note_group_reference.md) | | 165 | 166 | ### unselectGroup 167 | 168 | ```js 169 | unselectGroup(reference) → {boolean} 170 | ``` 171 | 172 | >继承自:[音符组选择 - unselectGroup](group_selection.md) 173 | 174 | 取消选择一个 [音符组引用](note_group_reference.md) 对象。如果选择改变则返回 true。 175 | 176 | #### 参数: 177 | 178 | | 参数名 | 类型 | 描述 | 179 | | --- | --- | --- | 180 | | `reference` | [音符组引用](note_group_reference.md) | | 181 | 182 | #### 返回: 183 | 184 | 类型:布尔 185 | 186 | }>{() => } 194 | 195 | 196 | import Gitalk from 'gitalk'; 197 | import 'gitalk/dist/gitalk.css'; 198 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 199 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/arrangement_view.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ArrangementView 3 | --- 4 | 5 | ## 编曲区界面 6 | 7 | 编曲区的 UI 对象。 8 | 9 | ## 扩展 10 | 11 | * [嵌套对象](nested_object.md) 12 | 13 | ## 方法 14 | 15 | ### getIndexInParent 16 | 17 | ```js 18 | getIndexInParent() → {number} 19 | ``` 20 | 21 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 22 | 23 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 24 | 25 | #### 返回: 26 | 27 | 类型:数字 28 | 29 | ### getNavigation 30 | 31 | ```js 32 | getNavigation() → {CoordinateSystem} 33 | ``` 34 | 35 | 获取轨道编辑窗口的坐标系 36 | 37 | #### 返回: 38 | 39 | 类型:[坐标系](coordinate_system.md) 40 | 41 | ### getParent 42 | 43 | ```js 44 | getParent() → {NestedObject|undefined} 45 | ``` 46 | >继承自:[嵌套对象 - getParent](nested_object.md) 47 | 48 | 获取父级 [嵌套对象](nested_object.md) 对象。如果不存在则返回 `undefined`。 49 | 50 | #### 返回: 51 | 52 | 类型:[嵌套对象](nested_object.md) | **undefined** 53 | 54 | ### getSelection 55 | 56 | ```js 57 | getSelection() → {ArrangementSelectionState} 58 | ``` 59 | 60 | 获取编曲窗口的选择状态对象 61 | 62 | #### 返回: 63 | 64 | 类型:[ArrangementSelectionState](arrangement_selection_state.md) 65 | 66 | ### isMemoryManaged 67 | 68 | ```js 69 | isMemoryManaged() → {boolean} 70 | ``` 71 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 72 | 73 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 74 | 75 | #### 返回: 76 | 77 | 类型:布尔 78 | 79 | }>{() => } 87 | 88 | 89 | import Gitalk from 'gitalk'; 90 | import 'gitalk/dist/gitalk.css'; 91 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 92 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/automation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Automation 3 | --- 4 | 5 | ## 自动化 6 | 7 | 控制 [音符组](note_group.md) 内特定参数类型(如音高偏差)的一组点。 8 | 9 | “自动化”这个名字来自于 DAW 软件。在 DAW 中,每个轨道都有一个由可以拖动的控制点组成的音量包络线。在一些更高级的情况下,这些包络线还可以控制插件的属性。一个值得注意的问题是,在 Synthesizer V Studio 中,`自动化` 是为 [音符组](note_group.md) 创建的,而不是 [轨道](track.md) 创建的。 10 | 11 | ## 扩展 12 | 13 | * [嵌套对象](nested_object.md) 14 | 15 | ## 方法 16 | 17 | ### add 18 | 19 | ```js 20 | add(b, v) → {boolean} 21 | ``` 22 | 23 | 在位置 `b` (blicks) 添加一个数值为 `v` 的控制点。如果在 `b` 已经存在控制点,该控制点将会被更新到数值 `v`。 24 | 25 | 如果创建了新点,则返回 true。 26 | 27 | #### 参数 28 | 29 | | 参数名 | 类型 | 说明 | 30 | | --- | --- | --- | 31 | | b | number | | 32 | | v | number | | 33 | 34 | #### 返回: 35 | 36 | 类型:布尔 37 | 38 | ### clone 39 | 40 | ```js 41 | clone() → {Automation} 42 | ``` 43 | 44 | 对当前对象进行深拷贝。 45 | 46 | #### 返回: 47 | 48 | 类型:[自动化](automation.md) 49 | 50 | ### get 51 | 52 | ```js 53 | get(b) → {number} 54 | ``` 55 | 56 | 获取在位置 `b` (blicks) 的插入参数值。如果位置 `b` 处存在点,则无论插值方式如何,都返回该点的值。 57 | 58 | #### 参数 59 | 60 | | 参数名 | 类型 | 说明 | 61 | | --- | --- | --- | 62 | | b | number | | 63 | 64 | #### 返回: 65 | 66 | 类型:数 67 | 68 | ### getAllPoints 69 | 70 | ```js 71 | getAllPoints() → {array} 72 | ``` 73 | 74 | [自动化 - getPoints](automation.md) 的没有限制的版本。 75 | 76 | #### 返回: 77 | 78 | 类型:由 `数字` 组成的 `数组` 组成的 `数组`。 79 | 80 | ### getDefinition 81 | 82 | ```js 83 | getDefinition() → {object} 84 | ``` 85 | 86 | 获取具有以下属性的参数对象。 87 | 88 | * `名称`: `字符串` 89 | * `类型名`: `字符串` 90 | * `范围`: 2 个 `数字` 91 | * `默认值`: `数字` 92 | 93 | | `参数名` | `类型` | `范围` | 单位 / 参数含义 | `默认值` | 94 | | --- | --- | --- | --- | --- | 95 | | "音高偏差" | "音高偏差" | -1200, 1200 | 音分 | 0 | 96 | | "颤音包络" | "颤音包络" | 0, 2 | x | 1 | 97 | | "响度" | "响度" | -48, 12 | 分贝 | 0 | 98 | | "张力" | "张力" | -1.0, 1.0 | 紧张 <-> 放松 | 0 | 99 | | "气声" | "气声" | -1.0, 1.0 | 气声 <-> 清晰 | 0 | 100 | | "发声" | "发声" | 0.0, 1.0 | 有声 <-> 无声 | 1 | 101 | | "性别" | "性别" | -1.0, 1.0 | 男性 <-> 女性 | 0 | 102 | | "音区偏移" | "音区偏移" | -400, 400 | 音分 | 0 | 103 | 104 | :::tip 105 | 以下为原版英文表格,请酌情参考: 106 | 107 | | `displayName` | `typeName` | `range` | units/parameter value meaning | `defaultValue` | 108 | | --- | --- | --- | --- | --- | 109 | | "Pitch Deviation" | "pitchDelta" | -1200, 1200 | cents | 0 | 110 | | "Vibrato Envelope" | "vibratoEnv" | 0, 2 | x | 1 | 111 | | "Loudness" | "loudness" | -48, 12 | dB | 0 | 112 | | "Tension" | "tension" | -1.0, 1.0 | Tense <-> Relaxed | 0 | 113 | | "Breathiness" | "breathiness" | -1.0, 1.0 | Breathy <-> Clean | 0 | 114 | | "Voicing" | "voicing" | 0.0, 1.0 | Voiced <-> Unvoiced | 1 | 115 | | "Gender" | "gender" | -1.0, 1.0 | Masculine <-> Feminine | 0 | 116 | | "Tone Shift" | "toneShift" | -400, 400 | cents | 0 | 117 | ::: 118 | 119 | #### 返回: 120 | 121 | 类型:对象 122 | 123 | ### getIndexInParent 124 | 125 | ```js 126 | getIndexInParent() → {number} 127 | ``` 128 | 129 | > 继承自 [嵌套对象 - getIndexInParent](nested_object.md) 130 | 131 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 132 | 133 | #### 返回: 134 | 135 | 类型:数 136 | 137 | ### getInterpolationMethod 138 | 139 | ```js 140 | getInterpolationMethod() → {string} 141 | ``` 142 | 143 | 返回两个控制点之间的连接方式 144 | 145 | * `linear`: 线性插值 146 | * `cubic`: 三次样条插值 147 | * `Cosine`: 余弦插值 148 | 149 | #### 返回: 150 | 151 | 类型:字符串 152 | 153 | ### getLinear 154 | 155 | ```js 156 | getLinear(b) → {number} 157 | ``` 158 | 159 | [自动化 - get](automation.md) 的另一个版本。无论如何都返回线性插值。 160 | 161 | #### 参数 162 | 163 | | 参数名 | 类型 | 说明 | 164 | | --- | --- | --- | 165 | | b | number | | 166 | 167 | #### 返回: 168 | 169 | 类型:数 170 | 171 | ### getParent 172 | 173 | ```js 174 | getParent() → {NestedObject|undefined} 175 | ``` 176 | 177 | >继承自:[嵌套对象 - getParent](nested_object.md) 178 | 179 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 180 | 181 | #### 返回: 182 | 183 | 类型:[嵌套对象](nested_object.md) | **undefined** 184 | 185 | ### getPoints 186 | 187 | ```js 188 | getPoints(begin, end) → {array} 189 | ``` 190 | 191 | 获取从 `begin` 到 `end`(blicks) 的点数组。数组中的每一个元素是由两个元素组成的数组,一个是点的位置 (blicks),一个是点的值。例如,`[[0, 0.1], [5000, 0], [10000, -0.1]]`。 192 | 193 | #### 参数 194 | 195 | | 参数名 | 类型 | 说明 | 196 | | --- | --- | --- | 197 | | begin | number | | 198 | | end | number | | 199 | 200 | #### 返回: 201 | 202 | 类型:由 `数字` 组成的 `数组` 组成的 `数组`。 203 | 204 | ### isMemoryManaged 205 | 206 | ```js 207 | isMemoryManaged() → {boolean} 208 | ``` 209 | 210 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 211 | 212 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 213 | 214 | #### 返回: 215 | 216 | 类型:布尔 217 | 218 | ### remove 219 | 220 | ```js 221 | remove(b) → {boolean} 222 | ``` 223 | 224 | 移除位于 b (blicks) 的控制点。如果控制点不存在,则返回 false。 225 | 226 | #### 返回: 227 | 228 | 类型:布尔 229 | 230 | --- 231 | 232 | ```js 233 | remove(begin, end) → {boolean} 234 | ``` 235 | 236 | 移除从 `begin` 到 `end`(blicks) 的控制点。如果控制点不存在,则返回 false。 237 | 238 | #### 参数: 239 | 240 | | 参数名 | 类型 | 说明 | 241 | | --- | --- | --- | 242 | | begin | number | | 243 | | end | number | | 244 | 245 | #### 返回: 246 | 247 | 类型:布尔 248 | 249 | ### removeAll 250 | 251 | ```js 252 | removeAll() 253 | ``` 254 | 255 | 移除 `自动化` 中所有控制点 256 | 257 | ### simplify 258 | 259 | ```js 260 | simplify(begin, end, threshold) → {boolean} 261 | ``` 262 | 263 | 删除对曲线形状没有显著贡献的控制点。范围为 `begin`(blicks)到 `end`(blicks)。threshold 的值越高,简化越狠。如果未提供,则将其设置为 0.002。 264 | 265 | 如果删除了任何点,则返回 true。 266 | 267 | #### 参数: 268 | 269 | | 参数名 | 类型 | 说明 | 270 | | --- | --- | --- | 271 | | begin | number | | 272 | | end | number | | 273 | | threshold | number | 可选 | 274 | 275 | #### 返回: 276 | 277 | 类型:布尔 278 | 279 | }>{() => } 287 | 288 | 289 | import Gitalk from 'gitalk'; 290 | import 'gitalk/dist/gitalk.css'; 291 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 292 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/coordinate_system.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CoordinateSystem 3 | --- 4 | 5 | ## 坐标系 6 | 7 | 用于浏览二维可滚动区域的一个 UI(用户界面)状态对象,该区域的x轴为时间,y轴为数值。 8 | 9 | 其被应用于 [钢琴卷帘](main_editor_view.md) 和 [编辑区域](arrangement_view.md) 。以上两种情况中,x 轴的单位均为 blicks。但编辑区域仅使用 `坐标系` 的 x 轴。 10 | 11 | ## 扩展 12 | 13 | * [嵌套对象](nested_object.md) 14 | 15 | ## 方法 16 | 17 | ### getIndexInParent 18 | 19 | ```js 20 | getIndexInParent() → {number} 21 | ``` 22 | 23 | > 继承自:[嵌套对象 - getIndexInParent](nested_object.md) 24 | 25 | 获取当前对象在其父对象中的索引。对 Lua,该索引值从 1 开始。对 JavaScript,该索引值从 0 开始。 26 | 27 | #### 返回: 28 | 29 | 类型:数字 30 | 31 | ### getParent 32 | 33 | ```js 34 | getParent() → {NestedObject|undefined} 35 | ``` 36 | 37 | > 继承自:[嵌套对象 - getParent](nested_object.md) 38 | 39 | 获取父 [嵌套对象](nested_object.md)。如果当前对象未连接到一个父对象,则返回 `undefined` 。 40 | 41 | #### 返回: 42 | 43 | 类型:[嵌套对象](nested_object.md) | **undefined** 44 | 45 | ### getTimePxPerUnit 46 | 47 | ```js 48 | getTimePxPerUnit() → {number} 49 | ``` 50 | 51 | 获取水平方向上的比例系数。 52 | 53 | 其单位为像素 / blicks,因此应该会是一个很小的数。 54 | 55 | #### 返回: 56 | 57 | 类型:数 58 | 59 | ### getTimeViewRange 60 | 61 | ```js 62 | getTimeViewRange() → {array} 63 | ``` 64 | 65 | 获取当前可见的时间范围。其会返回一个包含两个 `number` 元素的数组,分别对应起始和结束时间。时间单位为 blicks。 66 | 67 | #### 返回: 68 | 69 | 一个 `number` 型数组。 70 | 71 | 类型:组 72 | 73 | ### getValuePxPerUnit 74 | 75 | ```js 76 | getValuePxPerUnit() → {number} 77 | ``` 78 | 79 | 获取竖直方向上的比例系数。 80 | 81 | 对于钢琴卷帘,其单位为“像素 / 半音”。 82 | 83 | #### 返回: 84 | 85 | 类型:数 86 | 87 | ### getValueViewRange 88 | 89 | ```js 90 | getValueViewRange() → {array} 91 | ``` 92 | 93 | 获取当前可见的数值范围。其会返回一个包含两个 `number` 元素的数组,分别对应最下端和最上端对应的值。对钢琴卷帘,其单位为 MIDI 数值(半音);对编辑界面,其值没有意义。 94 | 95 | #### 返回: 96 | 97 | 一个 `number` 型数组 98 | 99 | 类型:组 100 | 101 | ### isMemoryManaged 102 | 103 | ```js 104 | isMemoryManaged() → {boolean} 105 | ``` 106 | 107 | > 继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 108 | 109 | 检查当前对象是否被内存管理(即垃圾是否被脚本环境所收集)。 110 | 111 | #### 返回: 112 | 113 | 类型:布尔 114 | 115 | ### setTimeLeft 116 | 117 | ```js 118 | setTimeLeft(time) 119 | ``` 120 | 121 | 将可见区域移动至其左端位于 `time` 。 122 | 123 | #### 参数: 124 | 125 | | 参数名 | 类型 | 描述 | 126 | | --- | --- | --- | 127 | | `time` | number | | 128 | 129 | ### setTimeRight 130 | 131 | ```js 132 | setTimeRight(time) 133 | ``` 134 | 135 | 将可见区域移动至其右端位于 `time` 。 136 | 137 | #### 参数: 138 | 139 | | 参数名 | 类型 | 描述 | 140 | | --- | --- | --- | 141 | | `time` | number | | 142 | 143 | ### setTimeScale 144 | 145 | ```js 146 | setTimeScale(scale) 147 | ``` 148 | 149 | 将水平比例系数设置为 `scale` 。 150 | 151 | 其单位为像素 / blick,因此应该会是一个很小的数。 152 | 153 | #### 参数: 154 | 155 | | 参数名 | 类型 | 描述 | 156 | | --- | --- | --- | 157 | | `scale` | number | | 158 | 159 | ### setValueCenter 160 | 161 | ```js 162 | setValueCenter(v) 163 | ``` 164 | 165 | 将当前可见区域移动至竖直方向中心在 `v` 处。 166 | 167 | #### 参数: 168 | 169 | | 参数名 | 类型 | 描述 | 170 | | --- | --- | --- | 171 | | `v` | number | | 172 | 173 | ### snap 174 | 175 | ```js 176 | snap(b) → {number} 177 | ``` 178 | 179 | 根据捕获的设定,对时间点 `b` 进行四舍五入。 180 | 181 | #### 参数: 182 | 183 | | 参数名 | 类型 | 描述 | 184 | | --- | --- | --- | 185 | | `b` | number | | 186 | 187 | #### 返回: 188 | 189 | 类型:数 190 | 191 | ### t2x 192 | 193 | ```js 194 | t2x(t) → {number} 195 | ``` 196 | 197 | 将一个时间点转换为一个 x 轴位置(单位为像素)。 198 | 199 | #### 参数: 200 | 201 | | 参数名 | 类型 | 描述 | 202 | | --- | --- | --- | 203 | | `t` | number | | 204 | 205 | #### 返回: 206 | 207 | 类型:数 208 | 209 | ### v2y 210 | 211 | ```js 212 | v2y(v) → {number} 213 | ``` 214 | 215 | 将一个数值转换为一个 y 轴位置(单位为像素)。 216 | 217 | #### 参数: 218 | 219 | | 参数名 | 类型 | 描述 | 220 | | --- | --- | --- | 221 | | `v` | number | | 222 | 223 | #### 返回: 224 | 225 | 类型:数 226 | 227 | ### x2t 228 | 229 | ```js 230 | x2t(x) → {number} 231 | ``` 232 | 233 | 将一个 x 轴位置(单位为像素)转换为一个时间点。 234 | 235 | #### 参数: 236 | 237 | | 参数名 | 类型 | 描述 | 238 | | --- | --- | --- | 239 | | `x` | number | | 240 | 241 | #### 返回: 242 | 243 | 类型:数 244 | 245 | ### y2v 246 | 247 | ```js 248 | y2v(y) → {number} 249 | ``` 250 | 251 | 将一个 y 轴位置(单位为像素)转换为一个数值。 252 | 253 | #### 参数: 254 | 255 | | 参数名 | 类型 | 描述 | 256 | | --- | --- | --- | 257 | | `y` | number | | 258 | 259 | #### 返回: 260 | 261 | 类型:数 262 | 263 | }>{() => } 271 | 272 | 273 | import Gitalk from 'gitalk'; 274 | import 'gitalk/dist/gitalk.css'; 275 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 276 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/group_selection.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: GroupSelection 3 | --- 4 | 5 | ## 音符组选择 6 | 7 | 音符组选择行为的一个集合。 8 | 9 | 继承自 [`编曲区选择状态`](arrangement_selection_state.md) 和 [`轨道内部选择状态`](track_inner_selection_state.md). 10 | 11 | ## 方法 12 | 13 | ### clearGroups 14 | 15 | ```js 16 | clearGroups() → {boolean} 17 | ``` 18 | 19 | 取消选作所有的 [`音符组引用`](note_group_reference.md)。如果被选中集合改变了,则返回 true。 20 | 21 | #### 返回: 22 | 23 | 类型:布尔 24 | 25 | ### getSelectedGroups 26 | 27 | ```js 28 | getSelectedGroups() → {array} 29 | ``` 30 | 31 | 获取被选中的 [`音符组引用`](note_group_reference.md) 数组,顺序为选择时的顺序。 32 | 33 | #### 返回: 34 | 35 | 一个 [`音符组引用`](note_group_reference.md) 数组 36 | 37 | 类型: 数组 38 | 39 | ### hasSelectedGroups 40 | 41 | ```js 42 | hasSelectedGroups() → {boolean} 43 | ``` 44 | 45 | 检查是否有至少一个 [`音符组引用`](note_group_reference.md) 被选中了。 46 | 47 | #### 返回: 48 | 49 | 类型:布尔 50 | 51 | ### selectGroup 52 | 53 | ```js 54 | selectGroup(reference) 55 | ``` 56 | 57 | 添加一个 [`音符组引用`](note_group_reference.md) 至选中集合中。 58 | 59 | #### 参数 60 | 61 | | 参数名 | 类型 | 描述 | 62 | | --- | --- | --- | 63 | | `reference` | [音符组引用](note_group_reference.md) | | 64 | 65 | ### unselectGroup 66 | 67 | ```js 68 | unselectGroup(reference) → {boolean} 69 | ``` 70 | 71 | 取消选择一个 [`音符组引用`](note_group_reference.md). 如果被选中集合改变了,则返回 true。 72 | 73 | #### 参数: 74 | 75 | | 参数名 | 类型 | 描述 | 76 | | --- | --- | --- | 77 | | `reference` | [音符组引用](note_group_reference.md) | | 78 | 79 | #### 返回: 80 | 81 | 类型:布尔 82 | 83 | }>{() => } 91 | 92 | 93 | import Gitalk from 'gitalk'; 94 | import 'gitalk/dist/gitalk.css'; 95 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 96 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/main_editor_view.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: MainEditorView 3 | --- 4 | 5 | ## 主编辑器界面 6 | 7 | 钢琴卷帘的 UI(用户界面)状态对象。 8 | 9 | ## 扩展 10 | 11 | * [嵌套对象](nested_object.md) 12 | 13 | ## 方法 14 | 15 | ### getCurrentGroup() 16 | 17 | ```js 18 | getCurrentGroup() → {NoteGroupReference} 19 | ``` 20 | 21 | 获取用户当前正处于的 [`音符组引用`](note_group_reference.md) 。如果用户还未进入一个 [`音符组引用`](note_group_reference.md) 中,则返回当前音轨的主音符组。 22 | 23 | #### 返回: 24 | 25 | 类型:[音符组引用](note_group_reference.md) 26 | 27 | ### getCurrentTrack 28 | 29 | ```js 30 | getCurrentTrack() → {Track} 31 | ``` 32 | 33 | 获取当前在钢琴卷帘中打开的音轨。 34 | 35 | #### 返回: 36 | 37 | 类型:[轨道](track.md) 38 | 39 | ### getIndexInParent 40 | 41 | ```js 42 | getIndexInParent() → {number} 43 | ``` 44 | 45 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 46 | 47 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 48 | 49 | #### 返回: 50 | 51 | 类型:数字 52 | 53 | ### getNavigation 54 | 55 | ```js 56 | getNavigation() → {CoordinateSystem} 57 | ``` 58 | 59 | 获取钢琴卷帘的 [`坐标系`](coordinate_system.md) (坐标系统对象)。 60 | 61 | #### 返回: 62 | 63 | 类型:[坐标系](coordinate_system.md) 64 | 65 | ### getParent 66 | 67 | ```js 68 | getParent() → {NestedObject|undefined} 69 | ``` 70 | 71 | > 继承自:[嵌套对象 - getParent](nested_object.md) 72 | 73 | 获取父 [嵌套对象](nested_object.md) 。如果当前对象未连接到一个父对象,则返回 `undefined` 。 74 | 75 | #### 返回: 76 | 77 | 类型:[嵌套对象](nested_object.md) | **undefined** 78 | 79 | ### getSelection 80 | 81 | ```js 82 | getSelection() → {TrackInnerSelectionState} 83 | ``` 84 | 85 | 获取钢琴卷帘中选择状态的对象。 86 | 87 | #### 返回: 88 | 89 | 类型:[轨道内部选择状态](track_inner_selection_state.md) 90 | 91 | ### isMemoryManaged 92 | 93 | ```js 94 | isMemoryManaged() → {boolean} 95 | ``` 96 | 97 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 98 | 99 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 100 | 101 | #### 返回: 102 | 103 | 类型:布尔 104 | 105 | }>{() => } 113 | 114 | 115 | import Gitalk from 'gitalk'; 116 | import 'gitalk/dist/gitalk.css'; 117 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 118 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/nested_object.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: NestedObject 3 | --- 4 | 5 | ## 嵌套对象 6 | 7 | `NestedObject` 是所有可在宿主(Synthesizer V Studio)和客户端(脚本环境)之间传递的对象的基类。其实现了一个用于索引项目内任何内容的树状结构。此外,部分UI(用户界面)元素同样通过 `NestedObject` 接口对外连接。 8 | 9 | ## 方法 10 | 11 | ### getIndexInParent 12 | 13 | ```js 14 | getIndexInParent() → {number} 15 | ``` 16 | 17 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 18 | 19 | #### 返回: 20 | 21 | 类型:数字 22 | 23 | ### getParent 24 | 25 | ```js 26 | getParent() → {NestedObject|undefined} 27 | ``` 28 | 29 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 30 | 31 | #### 返回: 32 | 33 | 类型:[嵌套对象](nested_object.md) | **undefined** 34 | 35 | ### isMemoryManaged 36 | 37 | ```js 38 | isMemoryManaged() → {boolean} 39 | ``` 40 | 41 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 42 | 43 | }>{() => } 51 | 52 | 53 | import Gitalk from 'gitalk'; 54 | import 'gitalk/dist/gitalk.css'; 55 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 56 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/note.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Note 3 | --- 4 | 5 | ## 音符 6 | 7 | 一个由音高 (pitch)、歌词 (lyrics)、起始时间 (onset)、时长 (duration) 等定义的音符。其会被置于一个 [`音符组`](note_group.md) 中。 8 | 9 | ## 扩展 10 | 11 | * [嵌套对象](nested_object.md) 12 | 13 | ## 方法 14 | 15 | ### clone 16 | 17 | ```js 18 | clone() → {Note} 19 | ``` 20 | 21 | 对当前对象进行深复制。 22 | 23 | #### 返回: 24 | 25 | 类型:[音符](note.md) 26 | 27 | ### getAttributes 28 | 29 | ```js 30 | getAttributes() → {object} 31 | ``` 32 | 33 | 获取一个包含音符属性的对象。该对象拥有如下属性。 34 | 35 | | 属性 | 类型 | 描述 | 36 | | --- | --- | --- | 37 | | `tF0Offset` | 数字 | 音高转变 - 偏移(秒)| 38 | | `tF0Left` | 数字 | 音高变化 - 时长 - 左(秒) | 39 | | `tF0Right` | 数字 | 音高变化 - 时长 - 右(秒) | 40 | | `dF0Left` | 数字 | 音高变化 - 深度 - 左(半音) | 41 | | `dF0Right` | 数字 | 音高变化 - 深度 - 右(半音) | 42 | | `tF0VbrStart` | 数字 | 颤音 - 开始(秒) | 43 | | `tF0VbrLeft` | 数字 | 颤音 - 左(秒) | 44 | | `tF0VbrRight` | 数字 | 颤音 - 右(秒) | 45 | | `dF0Vbr` | 数字 | 颤音 - 深度(半音) | 46 | | `pF0Vbr` | 数字 | 颤音 - 相位(弧度,-π ~ π) | 47 | | `fF0Vbr` | 数字 | 颤音 - 频率(Hz) | 48 | | `tNoteOffset` | 数字 | 时间和音素 - 音符偏移(秒) | 49 | | `exprGroup` | 字符串 | 表现力分组 | 50 | | `dur` | 数字字符串 | 音素时长尺度 | 51 | | `alt` | 数字字符串 | 可替换的音素发音 | 52 | 53 | 如果该音符使用的是该[`音符组引用`](note_group_reference.md)的默认值,则对应属性的取值为 NaN。 54 | 55 | #### 返回: 56 | 57 | 类型:object 58 | 59 | ### getDuration 60 | 61 | ```js 62 | getDuration() → {number} 63 | ``` 64 | 65 | 获取音符的持续时间。单位为 blicks。 66 | 67 | #### 返回: 68 | 69 | 类型:数字 70 | 71 | ### getEnd 72 | 73 | ```js 74 | getEnd() → {number} 75 | ``` 76 | 77 | 获取音符的结束位置(起始 + 持续时间)。单位为 blicks。 78 | 79 | #### 返回: 80 | 81 | 类型:数字 82 | 83 | ### getIndexInParent 84 | 85 | ```js 86 | getIndexInParent() → {number} 87 | ``` 88 | 89 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 90 | 91 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 92 | 93 | #### 返回: 94 | 95 | 类型:数字 96 | 97 | ### getLyrics 98 | 99 | ```js 100 | getLyrics() → {string} 101 | ``` 102 | 103 | 获取当前音符的歌词。 104 | 105 | #### 返回: 106 | 107 | 类型:字符串 108 | 109 | ### getOnset 110 | 111 | ```js 112 | getOnset() → {number} 113 | ``` 114 | 115 | 获取当前音符的起始位置。单位为 blicks。 116 | 117 | #### 返回: 118 | 119 | 类型:数字 120 | 121 | ### getParent 122 | 123 | ```js 124 | getParent() → {NestedObject|undefined} 125 | ``` 126 | 127 | >继承自:[嵌套对象 - getParent](nested_object.md) 128 | 129 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 130 | 131 | #### 返回: 132 | 133 | 类型:[嵌套对象](nested_object.md) | **undefined** 134 | 135 | ### getPhonemes 136 | 137 | ```js 138 | getPhonemes() → {string} 139 | ``` 140 | 141 | 返回用户指定的音素,用空格分隔。如,”hh ah ll ow“。 142 | 143 | 如果没有指定音素,其会返回一个空字符串而非默认发音(见 [`SV - getPhonemesForGroup`](sv.md) )。 144 | 145 | #### 返回: 146 | 147 | 类型:字符串 148 | 149 | ### getPitch 150 | 151 | ```js 152 | getPitch() → {number} 153 | ``` 154 | 155 | 获取音高对应的 MIDI 编号,C4 对应 60。 156 | 157 | #### 返回: 158 | 159 | 类型:数字 160 | 161 | ### isMemoryManaged 162 | 163 | ```js 164 | isMemoryManaged() → {boolean} 165 | ``` 166 | 167 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 168 | 169 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 170 | 171 | #### 返回: 172 | 173 | 类型:布尔 174 | 175 | ### setAttributes 176 | 177 | ```js 178 | setAttributes(object) 179 | ``` 180 | 181 | 借助一个属性对象来设置音符属性。属性对象并不需要是完整的;仅给出的属性会被更新。如, 182 | 183 | ```js 184 | note.setAttributes({ 185 | "tF0Offset" : 0.05, 186 | "exprGroup" : "C4", 187 | "alt" : [0, 1] 188 | }); 189 | ``` 190 | 191 | #### 参数: 192 | 193 | | 参数名 | 类型 | 描述 | 194 | | --- | --- | --- | 195 | | `object` | attributes | 定义见 [`音符 - getAttributes`](note.md) | 196 | 197 | ### setDuration 198 | 199 | ```js 200 | setDuration(t) 201 | ``` 202 | 203 | 将音符时长设置为 `t` 。单位为 blicks。其同时也会变更结束位置,但不会更改起始位置。 204 | 205 | #### 参数: 206 | 207 | | 参数名 | 类型 | 描述 | 208 | | --- | --- | --- | 209 | | `t` | 数字 | | 210 | 211 | ### setLyrics 212 | 213 | ```js 214 | setLyrics(lyrics) 215 | ``` 216 | 217 | 更改歌词。 218 | 219 | | 参数名 | 类型 | 描述 | 220 | | --- | --- | --- | 221 | | `lyrics` | 字符串 | | 222 | 223 | ### setOnset 224 | 225 | ```js 226 | setOnset(t) 227 | ``` 228 | 229 | 将音符更改至由 `t` 开始。单位为 blicks。其不会变更时长。 230 | 231 | #### 参数: 232 | 233 | | 参数名 | 类型 | 描述 | 234 | | --- | --- | --- | 235 | | `t` | 数字 | | 236 | 237 | ### setPitch 238 | 239 | ```js 240 | setPitch(pitchNumber) 241 | ``` 242 | 243 | 设置音符的音高为 `pitchNumber`(MIDI编号)。 244 | 245 | #### 参数: 246 | 247 | | 参数名 | 类型 | 描述 | 248 | | --- | --- | --- | 249 | | `pitchNumber` | 数字 | | 250 | 251 | ### setTimeRange 252 | 253 | ```js 254 | setTimeRange(onset, duration) 255 | ``` 256 | 257 | 同时设置起始位置和时长。这是一个对 `setOnset` 和 `setDuration` 的快捷调用。 258 | 259 | #### 参数: 260 | 261 | | 参数名 | 类型 | 描述 | 262 | | --- | --- | --- | 263 | | `onset` | 数字 | | 264 | | `duration` | 数字 | | 265 | 266 | }>{() => } 274 | 275 | 276 | import Gitalk from 'gitalk'; 277 | import 'gitalk/dist/gitalk.css'; 278 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 279 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/note_group.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: NoteGroup 3 | --- 4 | 5 | ## 音符组 6 | 7 | 一组便于重复使用的成组的音符及其参数。 8 | 9 | 要将 `音符组` 放入到一个 [`轨道`](track.md) 中,其首先必须被封装到一个为其提供环境(如声音、语言、时间和音高偏移)的 [`音符组引用`](note_group_reference.md) 中。 10 | 11 | ## 扩展 12 | 13 | * [嵌套对象](nested_object.md) 14 | 15 | ## 方法 16 | 17 | ### addNote 18 | 19 | ```js 20 | addNote(note) → {number} 21 | ``` 22 | 23 | 将一个音符加入 `音符组` 内并返回被加入音符的索引。这些音符会按照起始位置升序排序。 24 | 25 | #### 参数: 26 | 27 | | 参数名 | 类型 | 描述 | 28 | | --- | --- | --- | 29 | | `音符` | [音符](note.md) | | 30 | 31 | #### 返回: 32 | 33 | 类型:数字 34 | 35 | ### clone 36 | 37 | ```js 38 | clone() → {NoteGroup} 39 | ``` 40 | 41 | 对当前对象的一个深复制。 42 | 43 | #### 返回: 44 | 45 | 类型:[音符组](note_group.md) 46 | 47 | ### getIndexInParent 48 | 49 | ```js 50 | getIndexInParent() → {number} 51 | ``` 52 | 53 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 54 | 55 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 56 | 57 | #### 返回: 58 | 59 | 类型:数字 60 | 61 | ### getName 62 | 63 | ```js 64 | getName() → {string} 65 | ``` 66 | 67 | 获取该 `音符组` 的用户指定参数名。 68 | 69 | #### 返回: 70 | 71 | 类型:字符串 72 | 73 | ### getNote() 74 | 75 | ```js 76 | getNote(index) → {Note} 77 | ``` 78 | 79 | 获取索引位置位于 `index` 的音符。这些音符会按照起始位置排序。 80 | 81 | #### 参数: 82 | 83 | | 参数名 | 类型 | 描述 | 84 | | --- | --- | --- | 85 | | `index` | number | | 86 | 87 | #### 返回: 88 | 89 | 类型:[音符](note.md) 90 | 91 | ### getNumNotes 92 | 93 | ```js 94 | getNumNotes() → {number} 95 | ``` 96 | 97 | 获取该 `音符组` 内的音符数量。 98 | 99 | #### 返回: 100 | 101 | 类型:数字 102 | 103 | ### getParameter 104 | 105 | ```js 106 | getParameter(type) → {Automation} 107 | ``` 108 | 109 | 获取 `type` 参数的 [`自动化`](automation.md) 对象。其不区分大小写。 110 | 111 | `type` 应当为 [`自动化 - getDefinition`](automation.md) 中的表格里 `typeName` 一列所示的字符串之一。 112 | 113 | #### 参数: 114 | 115 | | 参数名 | 类型 | 描述 | 116 | | --- | --- | --- | 117 | | `type` | 字符串 | | 118 | 119 | #### 返回: 120 | 121 | 类型:[自动化](automation.md) 122 | 123 | ### getParent 124 | 125 | ```js 126 | getParent() → {NestedObject|undefined} 127 | ``` 128 | 129 | >继承自:[嵌套对象 - getParent](nested_object.md) 130 | 131 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 132 | 133 | #### 返回: 134 | 135 | 类型:[嵌套对象](nested_object.md) | **undefined** 136 | 137 | ### getUUID 138 | 139 | ```js 140 | getUUID() → {string} 141 | ``` 142 | 143 | 获取 UUID(Universally Unique Identifier,即通用唯一识别码)。与参数名不同,一个 UUID 在整个项目中都是唯一的,而且可以用来将一个 [`音符组引用`](note_group_reference.md) 和一个 `音符组` 关联起来。 144 | 145 | 一个 UUID 差不多长这样:"ab85d637-d80b-4628-9c27-007ea74029af"。 146 | 147 | #### 返回: 148 | 149 | 类型:字符串 150 | 151 | ### isMemoryManaged 152 | 153 | ```js 154 | isMemoryManaged() → {boolean} 155 | ``` 156 | 157 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 158 | 159 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 160 | 161 | #### 返回: 162 | 163 | 类型:布尔 164 | 165 | ### removeNote 166 | 167 | ```js 168 | removeNote(index) 169 | ``` 170 | 171 | 移除索引位于 `index` 的音符。 172 | 173 | #### 参数: 174 | 175 | | 参数名 | 类型 | 描述 | 176 | | --- | --- | --- | 177 | | `index` | 数字 | | 178 | 179 | ### setName 180 | 181 | ```js 182 | setName(name) 183 | ``` 184 | 185 | 设置该 `音符组` 的名称。 186 | 187 | #### 参数: 188 | 189 | | 参数名 | 类型 | 描述 | 190 | | --- | --- | --- | 191 | | `name` | 字符串 | | 192 | 193 | }>{() => } 201 | 202 | 203 | import Gitalk from 'gitalk'; 204 | import 'gitalk/dist/gitalk.css'; 205 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 206 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/note_group_reference.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: NoteGroupReference 3 | --- 4 | 5 | ## 音符组引用 6 | 7 | 对于 [`音符组`](note_group.md) 的一个引用,其中包括一些可选的时间、音高偏移和声音 / 数据库属性。其将一个 [`音符组`](note_group.md) 放置于一个语言环境中,以完成文字到发音音素的转换。 8 | 9 | 一个 `音符组引用` 将始终被置于一个 [`轨道`](track.md) 中。一个 [`音符组`](note_group.md) 可能会被多个 `音符组引用` 所引用。 10 | 11 | ## 扩展 12 | 13 | * [嵌套对象](nested_object.md) 14 | 15 | ## 方法 16 | 17 | ### clone 18 | 19 | ```js 20 | clone() → {NoteGroupReference} 21 | ``` 22 | 23 | 对当前对象进行深拷贝。 24 | 25 | 注意:由于 `音符组引用` 和并没有“拥有”与之对应的 [`音符组`](note_group.md) ,因此上述过程并不会复制对应的 [`音符组`](note_group.md) 。 26 | 27 | #### 返回: 28 | 29 | 类型:[音符组引用](note_group_reference.md) 30 | 31 | ### getDuration 32 | 33 | ```js 34 | getDuration() → {number} 35 | ``` 36 | 37 | 该 `音符组引用` 的持续时间(blicks),等价于 `getEnd() - getOnset()` 。 38 | 39 | #### 返回: 40 | 41 | 类型:数字 42 | 43 | ### getEnd 44 | 45 | ```js 46 | getEnd() → {number} 47 | ``` 48 | 49 | 获取其结束位置(blicks),即对应 [`音符组`](note_group.md) 的最后一个音符的结束时间再加上时间偏移量。 50 | 51 | 如果该 `音符组引用` 拥有一个音频文件([`音符组引用 - isInstrumental`](note_group_reference.md)), `getEnd()` 将会返回该音频的结束时间(blicks)加上时间偏移量。但如果这个 `音符组引用` 并没有被置于一个 [`项目`](project.md) 中,就会没有足够的信息来确定该音频在音乐时间单位上的长度(译者注:推测这里的意思应该是缺少 bpm 数值),而 `getEnd()` 将假定持续时间为零。 52 | 53 | #### 返回: 54 | 55 | 类型:数字 56 | 57 | ### getIndexInParent 58 | 59 | ```js 60 | getIndexInParent() → {number} 61 | ``` 62 | 63 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 64 | 65 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 66 | 67 | #### 返回: 68 | 69 | 类型:数字 70 | 71 | ### getOnset 72 | 73 | ```js 74 | getOnset() → {number} 75 | ``` 76 | 77 | 获取当前音符的起始位置 (blicks),即对应 [`音符组`](note_group.md) 的首个音符的起始时间再加上时间偏移量。 78 | 79 | #### 返回: 80 | 81 | 类型:数字 82 | 83 | ### getParent 84 | 85 | ```js 86 | getParent() → {NestedObject|undefined} 87 | ``` 88 | 89 | >继承自:[嵌套对象 - getParent](nested_object.md) 90 | 91 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 92 | 93 | #### 返回: 94 | 95 | 类型:[嵌套对象](nested_object.md) | **undefined** 96 | 97 | ### getPitchOffset 98 | 99 | ```js 100 | getPitchOffset() → {number} 101 | ``` 102 | 103 | 获取应用于目标 [`音符组`](note_group.md) 中所有音符的音高偏移量(半音)。 104 | 105 | #### 返回: 106 | 107 | 类型:数字 108 | 109 | ### getTarget 110 | 111 | ```js 112 | getTarget() → {NoteGroup} 113 | ``` 114 | 115 | 获取对应的 [`音符组`](note_group.md) 。 116 | 117 | #### 返回: 118 | 119 | 类型:[音符组](note_group.md) 120 | 121 | ### getTimeOffset 122 | 123 | ```js 124 | getTimeOffset() → {number} 125 | ``` 126 | 127 | 获取应用于目标 [`音符组`](note_group.md) 中所有音符的时间偏移量(blicks)。 128 | 129 | #### 返回: 130 | 131 | 类型:数字 132 | 133 | ### getVoice 134 | 135 | ```js 136 | getVoice() → {object} 137 | ``` 138 | 139 | 获取一个包含有当前音符组默认声音属性的对象,类似于 [`音符 - getAttributes`](note.md)。 140 | 141 | 该对象含有以下属性。 142 | 143 | - `tF0Left`: `数字` 音高变化 - 时长 - 左(秒) 144 | - `tF0Right`: `数字` 音高变化 - 时长 - 右(秒) 145 | - `dF0Left`: `数字` 音高变化 - 深度 - 左(半音) 146 | - `dF0Right`: `数字` 音高变化 - 深度 - 右(半音) 147 | - `tF0VbrStart`: `数字` 颤音 - 开始(秒) 148 | - `tF0VbrLeft`: `数字` 颤音 - 左(秒) 149 | - `tF0VbrRight`: `数字` 颤音 - 右(秒) 150 | - `dF0Vbr`: `数字` 颤音 - 深度(半音) 151 | - `fF0Vbr`: `数字` 颤音 - 频率(Hz) 152 | - `paramLoudness`: `数字` 参数 - 响度(dB,分贝) 153 | - `paramTension`: `数字` 参数 - 张力 154 | - `paramBreathiness`: `数字` 参数 - 气声 155 | - `paramGender`: `数字` 参数 - 性别 156 | - `paramToneShift`: `number` 参数 - 音区偏移 157 | 158 | #### 返回: 159 | 160 | 类型:object 161 | 162 | ### isInstrumental 163 | 164 | ```js 165 | isInstrumental() → {boolean} 166 | ``` 167 | 168 | 该 `音符组引用` 是否引用的是一个外部音频文件。如果是,就一定不能引用一个 [`音符组`](note_group.md) 。 169 | 170 | #### 返回: 171 | 172 | 类型:布尔 173 | 174 | ### isMain 175 | 176 | ```js 177 | isMain() → {boolean} 178 | ``` 179 | 180 | 当前 `音符组引用` 是否是其父 [`音轨`](track.md) 的主音符组。 181 | 182 | #### 返回: 183 | 184 | 类型:布尔 185 | 186 | ### isMemoryManaged 187 | 188 | ```js 189 | isMemoryManaged() → {boolean} 190 | ``` 191 | 192 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 193 | 194 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 195 | 196 | #### 返回: 197 | 198 | 类型:布尔 199 | 200 | ### setPitchOffset 201 | 202 | ```js 203 | setPitchOffset(pitchOffset) 204 | ``` 205 | 206 | 将音高偏移设置为 `pitchOffset` (半音)。 207 | 208 | #### 参数: 209 | 210 | | 参数名 | 类型 | 描述 | 211 | | --- | --- | --- | 212 | | `pitchOffset` | number | | 213 | 214 | ### setTarget 215 | 216 | ```js 217 | setTarget(group) 218 | ``` 219 | 220 | 设定对应目标 [`音符组`](note_group.md) 。 221 | 222 | 注意其一旦被设置,作为目标的音符组就不可再被修改了。 223 | 224 | #### 参数: 225 | 226 | | 参数名 | 类型 | 描述 | 227 | | --- | --- | --- | 228 | | `group` | [音符组](note_group.md) | | 229 | 230 | ### setVoice(attributes) 231 | 232 | ```js 233 | setVoice(attributes) 234 | ``` 235 | 236 | 依照属性对象(其定义见 [`音符组引用 - getVoice`](note_group_reference.md) )设置声音属性。属性对象不需要是完整的,只有给出的属性才会被更新(见 [`音符 - setAttributes`](note.md))。 237 | 238 | #### 参数: 239 | 240 | | 参数名 | 类型 | 描述 | 241 | | --- | --- | --- | 242 | | `attributes` | object | | 243 | 244 | }>{() => } 252 | 253 | 254 | import Gitalk from 'gitalk'; 255 | import 'gitalk/dist/gitalk.css'; 256 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 257 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/playback_control.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PlaybackControl 3 | --- 4 | 5 | ## 回放控制 6 | 7 | 用于控制音频播放 UI(用户界面)的状态对象。 8 | 9 | ## 扩展 10 | 11 | * [嵌套对象](nested_object.md) 12 | 13 | ## 方法 14 | 15 | ### getIndexInParent 16 | 17 | ```js 18 | getIndexInParent() → {number} 19 | ``` 20 | 21 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 22 | 23 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 24 | 25 | #### 返回: 26 | 27 | 类型:数字 28 | 29 | ### getParent 30 | 31 | ```js 32 | getParent() → {NestedObject|undefined} 33 | ``` 34 | 35 | >继承自:[嵌套对象 - getParent](nested_object.md) 36 | 37 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 38 | 39 | #### 返回: 40 | 41 | 类型:[嵌套对象](nested_object.md) | **undefined** 42 | 43 | ### getPlayhead 44 | 45 | ```js 46 | getPlayhead() → {number} 47 | ``` 48 | 49 | 获取当前播放头(译者注:应该就是指播放进度条上的光标)的位置(以秒的形式)。 50 | 51 | 想要以 blicks 的形式获取位置的话,就将其与当前项目的 [`时间轴`](time_axis.md) 一起使用。 52 | 53 | #### 返回: 54 | 55 | 类型:数字 56 | 57 | ### getStatus 58 | 59 | ```js 60 | getStatus() → {string} 61 | ``` 62 | 63 | 获取当前的播放状态。其可能是以下三种之一。 64 | 65 | - "playing"(播放) 66 | - "looping"(循环) 67 | - "stopped"(停止) 68 | 69 | #### 返回: 70 | 71 | 类型:字符串 72 | 73 | ### isMemoryManaged 74 | 75 | ```js 76 | isMemoryManaged() → {boolean} 77 | ``` 78 | 79 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 80 | 81 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 82 | 83 | #### 返回: 84 | 85 | 类型:布尔 86 | 87 | ### loop 88 | 89 | ```js 90 | loop(tBegin, tEnd) 91 | ``` 92 | 93 | 在 `tBegin` 秒和 `tEnd` 秒之间开始循环。 94 | 95 | #### 参数: 96 | 97 | | 参数名 | 类型 | 描述 | 98 | | --- | --- | --- | 99 | | `tBegin` | 数字 | | 100 | | `tEnd` | 数字 | | 101 | 102 | ### pause 103 | 104 | ```js 105 | pause() 106 | ``` 107 | 108 | 停止播放,播放头保持在当前位置。 109 | 110 | ### play 111 | 112 | ```js 113 | play() 114 | ``` 115 | 116 | 开始播放音频。 117 | 118 | ### seek 119 | 120 | ```js 121 | seek(t) 122 | ``` 123 | 124 | 将播放头的位置置为 `t` 秒处。 125 | 126 | 如果当前音频正在播放,其不会停止音频,而是会在新的位置继续播放。 127 | 128 | #### 参数: 129 | 130 | | 参数名 | 类型 | 描述 | 131 | | --- | --- | --- | 132 | | `t` | 数字 | | 133 | 134 | ### stop 135 | 136 | ```js 137 | stop() 138 | ``` 139 | 140 | 停止播放,并且将播放头设置到起始处。 141 | 142 | }>{() => } 150 | 151 | 152 | import Gitalk from 'gitalk'; 153 | import 'gitalk/dist/gitalk.css'; 154 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 155 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/project.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Project 3 | --- 4 | 5 | ## 工程 6 | 7 | 可用的最大的对象,包含了 [`音轨`](track.md) 、 [`时间轴`](time_axis.md) 、[`音符组`](note_group.md) 等。 8 | 9 | ## 扩展 10 | 11 | * [嵌套对象](nested_object.md) 12 | 13 | ## 方法 14 | 15 | ### addNoteGroup 16 | 17 | ```js 18 | addNoteGroup(group, suggestedIndex) → {number} 19 | ``` 20 | 21 | 在 `suggestedIndex` 处插入一个[`音符组`](note_group.md) 。如果 `suggestedIndex` 没有给出,则该 [`音符组`](note_group.md) 将会被添加到末尾。其返回新增 [`音符组`](note_group.md) 的索引。 22 | 23 | #### 参数: 24 | 25 | | 参数名 | 类型 | 描述 | 26 | | --- | --- | --- | 27 | | `group` | [音符组](note_group.md) | | 28 | | `suggestedIndex` | 数字 | 可选 | 29 | 30 | #### 返回: 31 | 32 | 类型:数字 33 | 34 | ### addTrack 35 | 36 | ```js 37 | addTrack(track) → {number} 38 | ``` 39 | 40 | 将一个 [`音轨`](track.md) 添加到 `项目` 中。返回新增 [`音轨`](track.md) 的索引。 41 | 42 | #### 参数: 43 | 44 | | 参数名 | 类型 | 描述 | 45 | | --- | --- | --- | 46 | | `track` | [轨道](track.md) | | 47 | 48 | #### 返回: 49 | 50 | 类型:数字 51 | 52 | ### getDuration 53 | 54 | ```js 55 | getDuration() → {number} 56 | ``` 57 | 58 | 获取该 `项目` 的持续时间(blicks),其由最长 [音轨`](track.md) 的持续时间所决定。 59 | 60 | #### 返回: 61 | 62 | 类型:数字 63 | 64 | ### getFileName 65 | 66 | ```js 67 | getFileName() → {string} 68 | ``` 69 | 70 | 获取该工程在文件系统中的绝对路径 71 | 72 | #### 返回: 73 | 74 | 类型:字符串 75 | 76 | ### getIndexInParent 77 | 78 | ```js 79 | getIndexInParent() → {number} 80 | ``` 81 | 82 | >继承自:[嵌套对象 - getIndexInParent](nested_object.md) 83 | 84 | 获取在父级对象中当前对象的索引。在 Lua 中索引从 1 开始,在 JavaScript 中索引从 0 开始。 85 | 86 | ### getNoteGroup 87 | 88 | ```js 89 | getNoteGroup(id) → {NoteGroup|undefined} 90 | ``` 91 | 92 | 如果 `id` 为一个数字,则获取该项目库中的第 `id` 个 [`音符组`](note_group.md) 。 93 | 94 | 如果 `id` 为一个字符串,则在该项目库中寻找 UUID 为 `id` 的 [`音符组`](note_group.md) ;如果这样的 [`音符组`](note_group.md) 不存在,则返回 `undefined` 。 95 | 96 | #### 参数: 97 | 98 | | 参数名 | 类型 | 描述 | 99 | | :--- | :--------------- | :--- | 100 | | `id` | 数字 \| 字符串 | | 101 | 102 | #### 返回: 103 | 104 | 类型:[音符组](note_group.md) | **undefined** 105 | 106 | ### getNumNoteGroupsInLibrary 107 | 108 | ```js 109 | getNumNoteGroupsInLibrary() → {number} 110 | ``` 111 | 112 | 获取该 [`音符组`](note_group.md) 在项目的音符组库中的编号。 113 | 114 | 该函数不会统计主音符组,并且与 [`音符组引用`](note_group_reference.md) 的编号无关。 115 | 116 | #### 返回: 117 | 118 | 类型:数字 119 | 120 | ### getNumTracks 121 | 122 | ```js 123 | getNumTracks() → {number} 124 | ``` 125 | 126 | 获取音轨数量。 127 | 128 | #### 返回: 129 | 130 | 类型:数字 131 | 132 | ### getParent 133 | 134 | ```js 135 | getParent() → {NestedObject|undefined} 136 | ``` 137 | 138 | >继承自:[嵌套对象 - getParent](nested_object.md) 139 | 140 | 获取父级 [嵌套对象](nested_object.md) 。如果不存在则返回 `undefined`。 141 | 142 | #### 返回: 143 | 144 | 类型:[嵌套对象](nested_object.md) | **undefined** 145 | 146 | ### getTimeAxis 147 | 148 | ```js 149 | getTimeAxis() → {TimeAxis} 150 | ``` 151 | 152 | 获取当前 `项目` 的 [`时间轴`](time_axis.md) 对象。 153 | 154 | #### 返回: 155 | 156 | 类型: [`时间轴`](time_axis.md) 157 | 158 | ### getTrack 159 | 160 | ```js 161 | getTrack(index) → {Track} 162 | ``` 163 | 164 | 获取第 `index` 个 [`音轨`](track.md) 。索引(index)是基于存储顺序而非显示顺序。 165 | 166 | #### 参数: 167 | 168 | | 参数名 | 类型 | 描述 | 169 | | --- | --- | --- | 170 | | `index` | 数字 | | 171 | 172 | #### 返回: 173 | 174 | 类型:[轨道](track.md) 175 | 176 | ### isMemoryManaged 177 | 178 | ```js 179 | isMemoryManaged() → {boolean} 180 | ``` 181 | 182 | >继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 183 | 184 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 185 | 186 | #### 返回: 187 | 188 | 类型:布尔 189 | 190 | ### newUndoRecord 191 | 192 | ```js 193 | newUndoRecord() 194 | ``` 195 | 196 | 为当前 `项目` 新增一个撤销记录。也就是说,当用户按下 `Ctrl + Z` 或 `Ctrl + Y` 时,在最后一条撤销记录之后的所有编辑都会一起被撤销 / 重做。 197 | 198 | 在脚本开始执行时,新的撤销记录会自动添加到当前打开的项目中。 199 | 200 | ### removeNoteGroup 201 | 202 | ```js 203 | removeNoteGroup(index) 204 | ``` 205 | 206 | 从项目音符组库中移除第 `index` 个 [`音符组`](note_group.md) 。其也会移除所有引用了该 [`音符组`](note_group.md) 的 [`音符组引用`](note_group_reference.md) 。 207 | 208 | #### 参数: 209 | 210 | | 参数名 | 类型 | 描述 | 211 | | --- | --- | --- | 212 | | `index` | 数字 | | 213 | 214 | ### removeTrack 215 | 216 | ```js 217 | removeTrack(index) 218 | ``` 219 | 220 | 从该 `项目` 中移除第 `index` 个 [`音轨`](track.md) 。 221 | 222 | | 参数名 | 类型 | 描述 | 223 | | --- | --- | --- | 224 | | `index` | 数字 | | 225 | 226 | }>{() => } 234 | 235 | 236 | import Gitalk from 'gitalk'; 237 | import 'gitalk/dist/gitalk.css'; 238 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 239 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/selection_state_base.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: SelectionStateBase 3 | --- 4 | 5 | ## 选择状态基础接口 6 | 7 | 选择状态的基本接口。 8 | 9 | 由 [编曲区选择状态](arrangement_selection_state.md) 和 [轨道内部选择状态](track_inner_selection_state.md) 继承。 10 | 11 | ## 方法 12 | 13 | ### clearAll 14 | 15 | ```js 16 | clearAll() → {boolean} 17 | ``` 18 | 19 | 对于此选择状态支持的所有对象类型,取消选择相应的对象。 如果所选内容发生更改,则返回 `true` 。 20 | 21 | #### 返回: 22 | 23 | 类型:布尔 24 | 25 | ### hasSelectedContent 26 | 27 | ```js 28 | hasSelectedContent() → {boolean} 29 | ``` 30 | 31 | 检查是否有任何选定内容。 32 | 33 | #### 返回: 34 | 35 | 类型:布尔 36 | 37 | ### hasUnfinishedEdits 38 | 39 | ```js 40 | hasUnfinishedEdits() → {boolean} 41 | ``` 42 | 43 | 检查所选对象是否具有未完成的编辑。 44 | 45 | 例如,如果用户拖动了多个注释/控制点,并且尚未释放鼠标,则返回 `true` 。 46 | 47 | #### 返回: 48 | 49 | 类型:布尔 50 | 51 | }>{() => } 59 | 60 | 61 | import Gitalk from 'gitalk'; 62 | import 'gitalk/dist/gitalk.css'; 63 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 64 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/sv.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: SV 3 | --- 4 | 5 | ## 宿主对象 6 | 7 | 宿主对象(host object)是一个可在脚本中任意位置被访问的全局对象,名为`SV`。 8 | 9 | ## 成员 10 | 11 | ### QUARTER 12 | 13 | ```js 14 | QUARTER:number 15 | ``` 16 | 17 | 一个四分音符长度(quarter)对应的“blick”数量,该值为705600000。 18 | 19 | 此处指的时长(如一个四分音符长度—— quarter,或一拍—— beat)与物理时长(如一秒)有所不同。一个 “blick” 是 GUI(图形用户界面)内部工作的最小时间单元。它被用来在音乐软件中,并且可满足大部分整除需求。该参数名来源于 [Flicks](https://github.com/facebookarchive/Flicks)(即 Frame-tick)。 20 | 21 | 类型: 22 | 23 | * 数字 24 | 25 | ## 方法 26 | 27 | ### blackKey 28 | 29 | ```js 30 | blackKey(k) → {boolean} 31 | ``` 32 | 33 | 检查传入的键(参数以 MIDI 编号被传入)是否是一个钢琴上的黑键。 34 | 35 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 36 | 37 | #### 参数: 38 | 39 | | 参数名 | 类型 | 描述 | 40 | | --- | --- | --- | 41 | | `k` | 数字 | | 42 | 43 | #### 返回: 44 | 45 | 类型:布尔 46 | 47 | ### blick2Quarter 48 | 49 | ```js 50 | blick2Quarter(b) → {number} 51 | ``` 52 | 53 | 把 `b` 由 blick 数转换成对应的 quarter 数量。 54 | 55 | 等价于 `b` / `SV.QUARTER`。 56 | 57 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 58 | 59 | #### 参数: 60 | 61 | | 参数名 | 类型 | 描述 | 62 | | --- | --- | --- | 63 | | `b` | 数字 | | 64 | 65 | #### 返回: 66 | 67 | 类型:数字 68 | 69 | ### blick2Seconds 70 | 71 | ```js 72 | blick2Seconds(b, bpm) → {number} 73 | ``` 74 | 75 | 把 `b` 由 blick 数转换成特定 bpm 下的秒数。 76 | 77 | 相当于 `b` / `SV.QUARTER` * 60 / `bpm`。 78 | 79 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 80 | 81 | #### 参数: 82 | 83 | | 参数名 | 类型 | 描述 | 84 | | --- | --- | --- | 85 | | `b` | 数字 | | 86 | | `bpm` | 数字 | | 87 | 88 | #### 返回: 89 | 90 | 类型:数字 91 | 92 | ### blickRoundDiv 93 | 94 | ```js 95 | blickRoundDiv(dividend, divisor) → {number} 96 | ``` 97 | 98 | 作 `dividend` (blicks) 除以 `divisor` (blicks) 的除法(就近取整)。 99 | 100 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 101 | 102 | #### 参数: 103 | 104 | | 参数名 | 类型 | 描述 | 105 | | --- | --- | --- | 106 | | `dividend` | 数字 | | 107 | | `divisor` | 数字 | | 108 | 109 | #### 返回: 110 | 111 | 类型:数字 112 | 113 | ### blickRoundTo 114 | 115 | ```js 116 | blickRoundTo(b, interval) → {number} 117 | ``` 118 | 119 | 返回 `interval` 的所有整数倍中,最接近 `b` (blick) 的数。 120 | 121 | 等价于 `blickRoundDiv(b, interval) * interval`。 122 | 123 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 124 | 125 | #### 参数: 126 | 127 | | 参数名 | 类型 | 描述 | 128 | | --- | --- | --- | 129 | | `b` | 数字 | | 130 | | `interval` | 数字 | | 131 | 132 | #### 返回: 133 | 134 | 类型:数字 135 | 136 | ### create 137 | 138 | ```js 139 | create(type) → {object} 140 | ``` 141 | 142 | 创建一个新的对象。`type` 为如下的类型确认字符串之一。 143 | 144 | | 类型 | 描述 | 145 | | --- | --- | 146 | | "[`Note`](note.md)"(音符) | 一个由音高(pitch)、歌词(lyrics)、起始时间(onset)、时长(duration)等定义的音符。 | 147 | | "[`Automation`](automation.md)"(自动化) | [`音符组`](note_group.md)中一组控制某个参数(比如音高偏移)的点。 | 148 | | "[`NoteGroup`](note_group.md)"(音符组) | 一组便于重复使用的成组的音符及其参数。 | 149 | | "[`NoteGroupReference`](note_group_reference.md)"(音符组引用) | 在某个时间、音高和声音/数据库属性下,对一个音符组进行的引用。 | 150 | | "`TrackMixer`"(音轨混合器 | 一组用于描述混合器状态的属性(如通道增益 / 音量、声像、静音、独奏)。 | 151 | | "[`Track`](track.md)"(音轨) | 一个音符组的集合。 | 152 | | "[`TimeAxis`](time_axis.md)"(时间轴) | 一个针对整个项目的对象,用于存储节拍、拍号标记;负责物理时间和音乐时间的转换。 | 153 | | "[`Project`](project.md)"(项目) | 可用的最大的对象,包含了音轨、时间轴、音符组等。 | 154 | 155 | :::tip 156 | 根据 Synthesizer V 论坛用户 @dcuny 的帖子 [#6013](https://forum.synthesizerv.com/t/topic/6013),应以如下方式调用该函数: 157 | ``` 158 | SV:create(type:string, typeName:string) → {object} 159 | 160 | ``` 161 | 举个例子,如果要新建一个 `Automation` 类中的 `Loudness` 类型变量,调用方法应该为: 162 | ``` 163 | local loudnessAutomation = SV:create("Automation", "loudness") 164 | ``` 165 | ::: 166 | 167 | #### 参数: 168 | 169 | | 参数名 | 类型 | 描述 | 170 | | --- | --- | --- | 171 | | `type` | 字符串 | 一个类型确认字符串。 | 172 | 173 | #### 返回: 174 | 175 | 类型:object 176 | 177 | ### finish 178 | 179 | ```js 180 | finish() 181 | ``` 182 | 183 | 标识脚本的结束。此后的所有异步回调都不再会被执行。注意,这并不会让当前脚本立刻退出。 184 | 185 | ### freq2Pitch 186 | 187 | ```js 188 | freq2Pitch(f) → {number} 189 | ``` 190 | 191 | 将频率(单位为 Hz)转换为 MIDI 编号(半音程,C4 对应 60)。 192 | 193 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 194 | 195 | #### 参数: 196 | 197 | | 参数名 | 类型 | 描述 | 198 | | --- | --- | --- | 199 | | `f` | 数字 | | 200 | 201 | #### 返回: 202 | 203 | 类型:数字 204 | 205 | ### getArrangement 206 | 207 | ```js 208 | getArrangement() → {ArrangementView} 209 | ``` 210 | 211 | 获取布局视图的UI(用户界面)的状态对象。 212 | 213 | #### 返回: 214 | 215 | 类型:[编曲区界面](arrangement_view.md) 216 | 217 | ### getHostClipboard 218 | 219 | ```js 220 | getHostClipboard() → {string} 221 | ``` 222 | 223 | 获取系统剪贴板中的文本。 224 | 225 | #### 返回: 226 | 227 | 类型:字符串 228 | 229 | ### getHostInfo 230 | 231 | ```js 232 | getHostInfo() → {object} 233 | ``` 234 | 235 | 获取一个包含以下属性的对象。 236 | 237 | - `osType`: `字符串` 取值为 "Windows"、"macOS"、"Linux"、"Unknown" 之一。 238 | - `osName`: `字符串` 操作系统的全名。 239 | - `hostName`: `字符串` "Synthesizer V Studio Pro" 或 "Synthesizer V Studio Basic" 240 | - `hostVersion`: `字符串` Synthesizer V Studio 的版本字符串,如 "1.0.4" 241 | - `hostVersionNumber`: `数字` 以数字形式返回版本号,各用两位十六进制数表示大版本、小版本和修订版本 (比如 0x010004 就是 "1.0.4" 的意思) 242 | - `languageCode`: `字符串` 用户界面的语言代码,如 "en-us", "ja-jp", "zh-cn" 243 | 244 | #### 返回: 245 | 246 | 类型:object 247 | 248 | ### getMainEditor 249 | 250 | ```js 251 | getMainEditor() → {MainEditorView} 252 | ``` 253 | 254 | 获取钢琴卷帘的 UI(用户界面)状态对象。 255 | 256 | #### 返回: 257 | 258 | 类型:[主编辑器界面](main_editor_view.md) 259 | 260 | ### getPhonemesForGroup 261 | 262 | ```js 263 | getPhonemesForGroup(group) → {array} 264 | ``` 265 | 266 | 获取一个音符组中所有音符的音素(以音符组引用的形式传入)。该音符组必须是当前打开项目的一部分。 267 | 268 | 注意,`getPhonemesForGroup` 返回的是 Synthesizer V Studio 内部文本 - 音素转换器的 **输出** 结果。这意味着即使是那些未经用户指定音素的音符,`getPhonemesForGroup` 仍会返回默认音素, [`音符 - getPhonemes`](note.md) 则会返回空字符串。 269 | 270 | 还需要注意的是,文本 - 音素转换器运行在另一个线程上。`getPhonemesForGroup` 不会阻塞当前线程。如果文本 - 音素转换器还未完成对某一音符组的运行,有极小可能返回会是一个空数组。我们建议脚本作者们在这种情况下将 `getPhonemesForGroup` 封装到一个[`SV - setTimeout`](sv.md#setTimeout)调用中。 271 | 272 | #### 参数: 273 | 274 | | 参数名 | 类型 | 描述 | 275 | | --- | --- | --- | 276 | | `group` | [音符组引用](note_group_reference.md) | | 277 | 278 | #### 返回: 279 | 280 | 一个字符串数组 281 | 282 | 类型:组 283 | 284 | ### getPlayback 285 | 286 | ```js 287 | getPlayback() → {PlayBackControl} 288 | ``` 289 | 290 | 获取控制回放的UI(用户界面)状态对象。 291 | 292 | #### 返回: 293 | 294 | 类型:[回放控制](playback_control.md) 295 | 296 | ### getProject 297 | 298 | ```js 299 | getProject() → {Project} 300 | ``` 301 | 302 | 获取当前打开的项目。 303 | 304 | #### 返回: 305 | 306 | 类型:[工程](project.md) 307 | 308 | ### pitch2freq 309 | 310 | ```js 311 | pitch2freq(p) → {number} 312 | ``` 313 | 314 | 将 MIDI 编号(半音程,C4 对应 60)转换为频率(单位为 Hz)。 315 | 316 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 317 | 318 | #### 参数: 319 | 320 | | 参数名 | 类型 | 描述 | 321 | | --- | --- | --- | 322 | | `p` | 数字 | | 323 | 324 | #### 返回: 325 | 326 | 类型:数字 327 | 328 | ### quarter2Blick 329 | 330 | ```js 331 | quarter2Blick(q) → {number} 332 | ``` 333 | 334 | 把 `q` 由 quarter 数转换成对应的 blick 数。 335 | 336 | 等价于 `q` * `SV.QUARTER`。 337 | 338 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 339 | 340 | #### 参数: 341 | 342 | | 参数名 | 类型 | 描述 | 343 | | --- | --- | --- | 344 | | `q` | 数字 | | 345 | 346 | #### 返回: 347 | 348 | 类型:数字 349 | 350 | ### seconds2Blick 351 | 352 | ```js 353 | seconds2Blick(s, bpm) → {number} 354 | ``` 355 | 356 | 把 `s` 由秒数转换成特定bpm(每分钟节拍数)下的 blick 数。 357 | 358 | 相当于 `s` / 60 \* `bpm` \* `SV.QUARTER`。 359 | 360 | 由时间轴来根据项目上下文,转换音乐意义上的时间和物理意义上时间。 361 | 362 | #### 参数: 363 | 364 | | 参数名 | 类型 | 描述 | 365 | | --- | --- | --- | 366 | | `s` | 数字 | | 367 | | `bpm` | 数字 | | 368 | 369 | #### 返回: 370 | 371 | 类型:数字 372 | 373 | ### setHostClipboard 374 | 375 | ```js 376 | setHostClipboard(text) 377 | ``` 378 | 379 | 设置系统剪贴板。 380 | 381 | #### 参数: 382 | 383 | | 参数名 | 类型 | 描述 | 384 | | --- | --- | --- | 385 | | `text` | 字符串 | | 386 | 387 | ### setTimeout 388 | 389 | ```js 390 | setTimeout(timeOut, callback) 391 | ``` 392 | 393 | 在 `timeOut` 毫秒的延迟后进行 `callback` 的调用。 394 | 395 | 调用 `setTimeout` 后,脚本会继续运行而并非立刻执行 `callback`。回调函数会被置入队列并开始延迟。这并非一个抢占式的回调,即,`callback` 的执行并不会中断当前运行的任务。 396 | 397 | #### 参数: 398 | 399 | | 参数名 | 类型 | 描述 | 400 | | --- | --- | --- | 401 | | `timeOut` | 数字 | | 402 | | `callback` | 函数(函数) | | 403 | 404 | ### showCustomDialog 405 | 406 | ```js 407 | showCustomDialog(form) → {object} 408 | ``` 409 | 410 | 同 [`SV - showCustomDialogAsync`](sv.md#showCustomDialogAsync) ,但其会阻塞脚本的运行,直到用户关闭会话。其返回用户(完成后的)输入。 411 | 412 | #### 参数: 413 | 414 | | 参数名 | 类型 | 描述 | 415 | | --- | --- | --- | 416 | | `form` | object | | 417 | 418 | #### 返回: 419 | 420 | 类型:object 421 | 422 | ### showCustomDialogAsync 423 | 424 | ```js 425 | showCustomDialogAsync(form, callback) 426 | ``` 427 | 428 | 展示一个由 `form` 所定义的会话,且不会阻塞脚本的执行。 429 | 430 | `callback` 会在会话关闭后马上被唤醒。回调函数接收一个包含结果的参数。 431 | 432 | 更多信息请查看 [对话框](../tutorials/custom_dialogs.md)。 433 | 434 | #### 参数: 435 | 436 | | 参数名 | 类型 | 描述 | 437 | | --- | --- | --- | 438 | | `form` | object | | 439 | | `callback` | 函数 | | 440 | 441 | ### showInputBox 442 | 443 | ```js 444 | showInputBox(title, message, defaultText) → {string} 445 | ``` 446 | 447 | 同 [`SV#showInputBoxAsync`](sv.md#showInputBoxAsync) ,但会阻塞脚本的运行,直到用户关闭会话。其返回用户输入的文本。 448 | 449 | #### 参数: 450 | 451 | | 参数名 | 类型 | 描述 | 452 | | --- | --- | --- | 453 | | `title` | 字符串 | | 454 | | `message` | 字符串 | | 455 | | `defaultText` | 字符串 | | 456 | 457 | #### 返回: 458 | 459 | 类型:字符串 460 | 461 | ### showInputBoxAsync 462 | 463 | ```js 464 | showInputBoxAsync(title, message, defaultText, callback) 465 | ``` 466 | 467 | 展示一个对话框,其包含一个文本输入框和一个“OK”按钮,且不会阻塞脚本执行。 468 | 469 | `callback` 会在会话关闭后马上被唤醒。回调函数接收一个包含文本输入框中内容的 `string` 参数。 470 | 471 | #### 参数: 472 | 473 | | 参数名 | 类型 | 描述 | 474 | | --- | --- | --- | 475 | | `title` | 字符串 | | 476 | | `message` | 字符串 | | 477 | | `defaultText` | 字符串 | | 478 | | `callback` | 函数 | | 479 | 480 | #### showMessageBox 481 | 482 | ```js 483 | showMessageBox(title, message) 484 | ``` 485 | 486 | 同步版的[`SV - showMessageBoxAsync`](sv.md#showMessageBoxAsync) ,会阻塞脚本的运行,直到用户关闭信息提示框。 487 | 488 | #### 参数: 489 | 490 | | 参数名 | 类型 | 描述 | 491 | | --- | --- | --- | 492 | | `title` | 字符串 | | 493 | | `message` | 字符串 | | 494 | 495 | ### showMessageBoxAsync 496 | 497 | ```js 498 | showMessageBoxAsync(title, message, callback) 499 | ``` 500 | 501 | 弹出一个消息框,且不会组织脚本的执行。 502 | 503 | 如果 `callback` 给出,其将会在消息框关闭后被唤醒。该函数不包含任何参数。 504 | 505 | #### 参数: 506 | 507 | | 参数名 | 类型 | 描述 | 508 | | --- | --- | --- | 509 | | `title` | 字符串 | | 510 | | `message` | 字符串 | | 511 | | `callback` | 函数 | 可选 | 512 | 513 | ### showOkCancelBox 514 | 515 | ```js 516 | showOkCancelBox(title, message) → {boolean} 517 | ``` 518 | 519 | 同步版的 [`SV - showOkCancelBoxAsync`](sv.md#showOkCancelBoxAsync) ,会阻塞脚本的运行,直到用户关闭信息提示框。如果点击了 “OK” 按钮,其返回 True。 520 | 521 | #### 参数: 522 | 523 | | 参数名 | 类型 | 描述 | 524 | | --- | --- | --- | 525 | | `title` | 字符串 | | 526 | | `message` | 字符串 | | 527 | 528 | #### 返回: 529 | 530 | 类型:布尔 531 | 532 | ### showOkCancelBoxAsync 533 | 534 | ```js 535 | showOkCancelBoxAsync(title, message, callback) 536 | ``` 537 | 538 | 显示一个包含 “OK” 按钮和 “Cancel” 按钮的消息框,且不会阻塞脚本的执行。 539 | 540 | `callback` 会在会话关闭后马上被唤醒。如果点击了 “OK” 按钮,则回调函数接收 True 作为一个参数。 541 | 542 | #### 参数: 543 | 544 | | 参数名 | 类型 | 描述 | 545 | | --- | --- | --- | 546 | | `title` | 字符串 | | 547 | | `message` | 字符串 | | 548 | | `callback` | 函数 | | 549 | 550 | ### showYesNoCancelBox 551 | 552 | ```js 553 | showYesNoCancelBox(title, message) → {string} 554 | ``` 555 | 556 | 同 [`SV - showYesNoCancelBoxAsync`](sv.md#showYesNoCancelBoxAsync) ,但会阻塞脚本的运行,直到用户关闭信息提示框。其返回 "yes"、"no" 或 "cancel"。 557 | 558 | #### 参数: 559 | 560 | | 参数名 | 类型 | 描述 | 561 | | --- | --- | --- | 562 | | `title` | 字符串 | | 563 | | `message` | 字符串 | | 564 | 565 | #### 返回: 566 | 567 | 类型:字符串 568 | 569 | ### showYesNoCancelBoxAsync 570 | 571 | ```js 572 | showYesNoCancelBoxAsync(title, message, callback) 573 | ``` 574 | 575 | 显示一个包含 “Yes” 按钮、“No” 按钮和 “Cancel” 按钮的消息框,且不会阻塞脚本的执行。 576 | 577 | `callback` 会在会话关闭后马上被唤醒。回调函数接收一个字符类型参数,该参数可以是以下之一:"yes"、"no"、"cancel"。 578 | 579 | #### 参数: 580 | 581 | | 参数名 | 类型 | 描述 | 582 | | --- | --- | --- | 583 | | `title` | 字符串 | | 584 | | `message` | 字符串 | | 585 | | `callback` | 函数 | | 586 | 587 | ### T 588 | 589 | ```js 590 | T(text) → {string} 591 | ``` 592 | 593 | 依据当前用户界面的语言设定,获取本地化版本(当前语言)的 `text` 。 594 | 595 | 更多信息详见 [本地化](../tutorials/localization.md) 。 596 | 597 | #### 参数: 598 | 599 | | 参数名 | 类型 | 描述 | 600 | | --- | --- | --- | 601 | | `text` | 字符串 | | 602 | 603 | #### 返回: 604 | 605 | 类型:字符串 606 | 607 | }>{() => } 615 | 616 | 617 | import Gitalk from 'gitalk'; 618 | import 'gitalk/dist/gitalk.css'; 619 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 620 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/time_axis.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: TimeAxis 3 | --- 4 | 5 | ## 时间轴 6 | 7 | 一个与工程范围相当的对象,用来存储速度和时间标记。它还能处理物理时间(例如:秒)和音乐时间(例如:¼拍, blicks)之间的转换。 8 | 9 | ## 扩展 10 | 11 | * [嵌套对象](nested_object.md) 12 | 13 | ## 方法 14 | 15 | ### addMeasureMark 16 | 17 | ```js 18 | addMeasureMark(measure, nomin, denom) 19 | ``` 20 | 21 | 在 `measure` 处 (一个小节序号) 插入一个 `nomin` / `denom` 拍子标记。如果在 `measure` 处拍子标记已经存在,则将更新信息。 22 | 23 | #### 参数 24 | 25 | | 参数名 | 类型 | 说明 | 26 | | --- | --- | --- | 27 | | `measure` | 数字 | | 28 | | `nomin` | 数字 | *译者注:此处意思为 numerator (分子),但似乎没有 nomin 表示分子的表达,可能此处原文有疏漏* | 29 | | `denom` | 数字 | *译者注:即 denominator ,分母* | 30 | 31 | ### addTempoMark 32 | 33 | ```js 34 | addTempoMark(b, bpm) 35 | ``` 36 | 37 | 在 `b` 处(以 blicks 为单位)插入一个速度为每分钟 `bpm` 拍的速度标记。如果该处已存在速度标记,则更新。 38 | 39 | #### 参数 40 | 41 | | 参数名 | 类型 | 说明 | 42 | | --- | --- | --- | 43 | | `b` | 数字 | | 44 | | `bpm` | 数字 | | 45 | 46 | ### clone 47 | 48 | ```js 49 | clone() → {TimeAxis} 50 | ``` 51 | 52 | 深复制当前对象。 53 | 54 | #### 返回: 55 | 56 | 类型:[时间轴](time_axis.md) 57 | 58 | ### getAllMeasureMarks 59 | 60 | ```js 61 | getAllMeasureMarks() → {array} 62 | ``` 63 | 64 | 获得所有该 `时间轴` 内的拍子标记。请参阅[`时间轴 - getMeasureMarkAt`](time_axis.md). 65 | 66 | #### 返回: 67 | 68 | 一个 `对象` 组 69 | 70 | 类型:组 71 | 72 | ### getAllTempoMarks 73 | 74 | ```js 75 | getAllTempoMarks() → {array} 76 | ``` 77 | 78 | 获得所有该 `时间轴` 内的速度标记。请参阅[`时间轴 - getTempoMarkAt`](time_axis.md). 79 | 80 | #### 返回: 81 | 82 | 一个 `对象` 组 83 | 84 | 类型:组 85 | 86 | ### getBlickFromSeconds 87 | 88 | ```js 89 | getBlickFromSeconds(t) → {number} 90 | ``` 91 | 92 | 将物理时间 `t`(秒)转化为音乐时间 (blicks)。 93 | 94 | #### 参数 95 | 96 | | 参数名 | 类型 | 说明 | 97 | | --- | --- | --- | 98 | | `t`| 数字 | | 99 | 100 | #### 返回: 101 | 102 | 类型:数字 103 | 104 | ### getIndexInParent 105 | 106 | ```js 107 | getIndexInParent() → {number} 108 | ``` 109 | 110 | > 继承自: [嵌套对象 - getIndexInParent](nested_object.md) 111 | 112 | 获取其父级中当前对象的索引。在 Lua 中,此索引从 1 开始。在 JavaScript 中,此索引从 0 开始。 113 | 114 | #### 返回: 115 | 116 | 类型:数字 117 | 118 | ### getMeasureAt 119 | 120 | ```js 121 | getMeasureAt(b) → {number} 122 | ``` 123 | 124 | 获得 `b` (blicks) 处的拍子标记。 125 | 126 | #### 参数 127 | 128 | | 参数名 | 类型 | 说明 | 129 | | --- | --- | --- | 130 | |`b`| 数字 | | 131 | 132 | #### 返回: 133 | 134 | 类型:数字 135 | 136 | ### getMeasureMarkAt 137 | 138 | ```js 139 | getMeasureMarkAt(measureNumber) → {object} 140 | ``` 141 | 142 | 在 `measureNumber` 小节处获取拍子标记。 143 | 144 | 返回的对象包含以下属性。 145 | 146 | 147 | * `position`: `数字` 标记放置处的小节数。 148 | * `positionBlick`: `数字` 标记位置 (以 blicks 为单位) 149 | * `numerator`: `数字` 分子(例如,如果是 3/4 时间标记,则为 3) 150 | * `denominator`: `数字` 分母(例如,如果它是 3/4 时间标记,则为 4) 151 | 152 | #### 参数 153 | 154 | | 参数名 | 类型 | 说明 | 155 | | --- | --- | --- | 156 | | `measureNumber` | 数字 | | 157 | 158 | #### 返回: 159 | 160 | 类型:object 161 | 162 | ### getMeasureMarkAtBlick 163 | 164 | ```js 165 | getMeasureMarkAtBlick(b) → {object} 166 | ``` 167 | 168 | 获取在位置 `b` (blicks) 处有效的拍子标记。有关返回的对象,请参见 [`时间轴 - getMeasureMarkAt`](time_axis.md). 169 | 170 | #### 参数 171 | 172 | | 参数名 | 类型 | 说明 | 173 | | --- | --- | --- | 174 | |`b`| 数字 | | 175 | 176 | #### 返回: 177 | 178 | 类型:object 179 | 180 | ### getParent 181 | 182 | ```js 183 | getParent() → {NestedObject|undefined} 184 | ``` 185 | 186 | > 继承自: [嵌套对象 - getParent](nested_object.md) 187 | 188 | 获取父项 [`NestedObject`](nested_object.md) 。如果当前对象未附加到父对象,则返回 `undefined` 。 189 | 190 | #### 返回: 191 | 192 | 类型:[嵌套对象](nested_object.md) | `undefined` 193 | 194 | ### getSecondsFromBlick 195 | 196 | ```js 197 | getSecondsFromBlick(b) → {number} 198 | ``` 199 | 200 | 将音乐时间 `b` (blicks) 转化为物理时间(秒)。 201 | 202 | #### 参数 203 | 204 | | 参数名 | 类型 | 说明 | 205 | | --- | --- | --- | 206 | |`b`| 数字 | | 207 | 208 | #### 返回: 209 | 210 | 类型:数字 211 | 212 | ### getTempoMarkAt 213 | 214 | ```js 215 | getTempoMarkAt(b) → {TempoMark} 216 | ``` 217 | 218 | 获得 `b` (blicks) 处的有效速度标记。 219 | 220 | 返回的对象包含以下属性。 221 | 222 | * `position`: `数字` 速度标记的位置(以 blicks 为单位)。 223 | * `positionSeconds`: `数字`速度标记的位置(以秒为单位)。 224 | * `bpm`: `数字` 在此速度标记和下一个速度标记之间有效的每分钟节拍值 225 | 226 | #### 参数 227 | 228 | | 参数名 | 类型 | 说明 | 229 | | --- | --- | --- | 230 | |`b`|数字| | 231 | 232 | #### 返回: 233 | 234 | 类型:TempoMark 235 | 236 | ### isMemoryManaged 237 | 238 | ```js 239 | isMemoryManaged() → {boolean} 240 | ``` 241 | 242 | > 继承自: [嵌套对象 - isMemoryManaged](nested_object.md) 243 | 244 | 检查当前对象是否开启了内存管理(即脚本环境收集的垃圾)。 245 | 246 | #### 返回: 247 | 248 | 类型:布尔 249 | 250 | ### removeMeasureMark 251 | 252 | ```js 253 | removeMeasureMark(measure) → {boolean} 254 | ``` 255 | 256 | 删除小节数为 `measure` 处的拍子标记。如果在此处拍子标记存在,则返回 `true` 。 257 | 258 | #### 参数 259 | 260 | | 参数名 | 类型 | 说明 | 261 | | --- | --- | --- | 262 | | `measure` | 数字 | 263 | 264 | #### 返回: 265 | 266 | 类型:布尔 267 | 268 | ### removeTempoMark 269 | 270 | ```js 271 | removeTempoMark(b) → {boolean} 272 | ``` 273 | 274 | 删除 `b` (blicks) 处的速度标记。如果在此处速度标记存在,则返回 `true` 。 275 | 276 | #### 参数 277 | 278 | | 参数名 | 类型 | 说明 | 279 | | --- | --- | --- | 280 | |`b`| 数字 | | 281 | 282 | #### 返回: 283 | 284 | 类型:布尔 285 | 286 | }>{() => } 294 | 295 | 296 | import Gitalk from 'gitalk'; 297 | import 'gitalk/dist/gitalk.css'; 298 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 299 | import BrowserOnly from '@docusaurus/BrowserOnly'; 300 | -------------------------------------------------------------------------------- /docs/api/classes/track.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Track 3 | --- 4 | 5 | ## 轨道 6 | 7 | 轨道 (Track) 是 [音符组引用](note_group_reference.md) 的集合。一个 `轨道` 也包括了 [音符组](note_group.md) ,它是音轨的主要组。音轨内的第一个 [音符组引用](note_group_reference.md) 始终指向主要组。 8 | 9 | `轨道` 默认的声库属性由第一个 [音符组引用](note_group_reference.md) 决定(即主要组)。 10 | 11 | ## 扩展 12 | 13 | * [嵌套对象](nested_object.md) 14 | 15 | ## 方法 16 | 17 | ### addGroupReference 18 | 19 | ```js 20 | addGroupReference(group) → {number} 21 | ``` 22 | 23 | 向该 `轨道` 添加一个 [音符组引用](note_group_reference.md) ,并返回添加组的索引。它按照起始位置对所有组进行排序。 24 | 25 | #### 参数 26 | 27 | | 参数名 | 类型 | 说明 | 28 | | --- | --- | --- | 29 | | `group` | [音符组引用](note_group_reference.md) | | 30 | 31 | #### 返回: 32 | 33 | 类型:数 34 | 35 | ### clone 36 | 37 | ```js 38 | clone() → {Track} 39 | ``` 40 | 41 | 深复制当前对象。 42 | 43 | #### 返回: 44 | 45 | 类型:[轨道](track.md) 46 | 47 | ### getDisplayColor 48 | 49 | ```js 50 | getDisplayColor() → {string} 51 | ``` 52 | 53 | 获得轨道的颜色(十六进制字符串) 54 | 55 | #### 返回: 56 | 57 | 类型:字符串 58 | 59 | ### getDisplayOrder 60 | 61 | ```js 62 | getDisplayOrder() → {number} 63 | ``` 64 | 65 | 获取父 [工程](project.md) 中轨道的显示顺序。轨道的显示顺序可以与其储存的索引不同。在编曲区界面中显示的轨道顺序总是基于显示顺序。 66 | #### 返回: 67 | 68 | 类型:数 69 | 70 | ### getDuration 71 | 72 | ```js 73 | getDuration() → {number} 74 | ``` 75 | 76 | 获取 `轨道` 的持续时间,被定义为最后一个 [音符组引用](note_group_reference.md) 结束的位置,以块 (blicks) 为单位, 77 | 78 | #### 返回: 79 | 80 | 类型:数 81 | 82 | ### getGroupReference 83 | 84 | ```js 85 | getGroupReference(index) → {NoteGroupReference} 86 | ``` 87 | 88 | 获取第 `index` 个 [音符组引用](note_group_reference.md) 索引。第一个是主组,后跟项目库中引用了 [音符组](note_group.md)的组。这些组按起始位置升序排序。 89 | 90 | #### 参数 91 | 92 | | 参数名 | 类型 | 说明 | 93 | | --- | --- | --- | 94 | | `index` | 数字 | | 95 | 96 | 97 | #### 返回: 98 | 99 | 类型:[音符组引用](note_group_reference.md) 100 | 101 | ### getIndexInParent 102 | 103 | ```js 104 | getIndexInParent() → {number} 105 | ``` 106 | 107 | > 继承自:[嵌套对象 - getIndexInParent](nested_object.md) 108 | 109 | 获取当前对象在其父对象中的索引。 在 Lua 中,这个索引从 1 开始。在 JavaScript 中,这个索引从 0 开始。 110 | #### 返回: 111 | 112 | 类型:数 113 | 114 | ### getName 115 | 116 | ```js 117 | getName() → {string} 118 | ``` 119 | 120 | 获得轨道名称。 121 | 122 | #### 返回: 123 | 124 | 类型:字符串 125 | 126 | ### getNumGroups 127 | 128 | ```js 129 | getNumGroups() → {number} 130 | ``` 131 | 132 | 获取该 `轨道` 中的 [音符组引用](note_group_reference.md) 的数量,包括主要组。 133 | 134 | #### 返回: 135 | 136 | 类型:数 137 | 138 | ### getParent 139 | 140 | ```js 141 | getParent() → {NestedObject|undefined} 142 | ``` 143 | 144 | > 继承自:[嵌套对象 - getParent](nested_object.md) 145 | 146 | 获取父 [嵌套对象](nested_object.md) 。如果当前对象未附加到父对象,则返回 `undefined` 。 147 | 148 | #### 返回: 149 | 150 | 类型:[嵌套对象](nested_object.md) | `undefined` 151 | 152 | ### getParent 153 | 154 | ```js 155 | isBounced() → {boolean} 156 | ``` 157 | 158 | 用于决定是否导出到文件,它显示在"渲染面板 - 音轨"中。 159 | 160 | #### 返回: 161 | 162 | 类型:布尔 163 | 164 | ### isMemoryManaged 165 | 166 | ```js 167 | isMemoryManaged() → {boolean} 168 | ``` 169 | 170 | > 继承自:[嵌套对象 - isMemoryManaged](nested_object.md) 171 | 172 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 173 | 174 | #### 返回: 175 | 176 | 类型:布尔 177 | 178 | ### removeGroupReference 179 | 180 | ```js 181 | removeGroupReference(index) 182 | ``` 183 | 184 | 从 `音轨` 中移除第 `index` 个 [音符组引用](note_group_reference.md) 。 185 | 186 | #### 参数 187 | 188 | | 参数名 | 类型 | 说明 | 189 | | --- | --- | --- | 190 | | `index` | 数字 | | 191 | 192 | ### setBounced 193 | 194 | ```js 195 | setBounced(enabled) 196 | ``` 197 | 198 | 设置是否将 `轨道` 导出到文件。请参阅 [轨道 - `isBounced`](track.md)。 199 | 200 | #### 参数 201 | 202 | | 参数名 | 类型 | 说明 | 203 | | --- | --- | --- | 204 | | `enabled` | 布尔 | | 205 | 206 | ### setDisplayColor 207 | 208 | ```js 209 | setDisplayColor(colorStr) 210 | ``` 211 | 212 | 设置 `轨道` 的显示颜色。(十六进制字符串) 213 | 214 | #### 参数 215 | 216 | | 参数名 | 类型 | 说明 | 217 | | --- | --- | --- | 218 | | `colorStr` | 字符串 | | 219 | 220 | ### setName 221 | 222 | ```js 223 | setName(name) 224 | ``` 225 | 226 | 设置当前 `轨道` 的名称。 227 | 228 | #### 参数 229 | 230 | | 参数名 | 类型 | 说明 | 231 | | --- | --- | --- | 232 | | `name` | 字符串 | | 233 | 234 | }>{() => } 242 | 243 | 244 | import Gitalk from 'gitalk'; 245 | import 'gitalk/dist/gitalk.css'; 246 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 247 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/classes/track_inner_selection_state.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: TrackInnerSelectionState 3 | --- 4 | ## 轨道内部选择状态 5 | 6 | 钢琴卷帘区的选择状态。 7 | 8 | 访问 `轨道内部选择状态` (TrackInnerSelectionState) 对象的方法 9 | 10 | * JavaScript: `SV.getMainEditor().getSelection()` 11 | * Lua: `SV:getMainEditor():getSelection()` 12 | 13 | ## 扩展 14 | 15 | * [嵌套对象](nested_object.md) 16 | * [选择状态](selection_state_base.md) 17 | * [音符组选择](group_selection.md) 18 | 19 | ## 方法 20 | 21 | ### clearAll 22 | 23 | ```js 24 | clearAll() → {boolean} 25 | ``` 26 | 27 | > 继承自 [选择状态 - clearAll](selection_state_base.md) 28 | 29 | 取消选择此选择状态下的所有对象类型。 如果选择项已更改,则返回 `true` 。 30 | 31 | #### 返回: 32 | 33 | 类型:布尔 34 | 35 | ### clearGroups 36 | 37 | ```js 38 | clearGroups() → {boolean} 39 | ``` 40 | 41 | > 继承自[音符组选择 - clearGroups](group_selection.md) 42 | 43 | 取消选择所有 [`音符组引用`](note_group_reference.md)。如果选择项已更改,则返回 `true` 。 44 | 45 | #### 返回: 46 | 47 | 类型:布尔 48 | 49 | ### clearNotes 50 | 51 | ```js 52 | clearNotes() → {boolean} 53 | ``` 54 | 55 | 取消选择所有音符。 如果选择已更改,则返回 `true`。 56 | 57 | #### 返回: 58 | 59 | 类型:布尔 60 | 61 | ### getIndexInParent 62 | 63 | ```js 64 | getIndexInParent() → {number} 65 | ``` 66 | 67 | > 继承自[嵌套对象 - getIndexInParent](nested_object.md) 68 | 69 | 获取当前对象在其父对象中的索引。 在 Lua 中,这个索引从 1 开始。在 JavaScript 中,这个索引从 0 开始。 70 | #### 返回: 71 | 72 | 类型:数 73 | 74 | ### getParent 75 | 76 | ```js 77 | getParent() → {NeastedObject|undefined} 78 | ``` 79 | 80 | > 继承自 [嵌套对象 - getParent](nested_object.md) 81 | 82 | 获取父级 [`嵌套对象`](nested_object.md)。 如果当前对象未附加到父对象,则返回 `undefined` 。 83 | 84 | #### 返回: 85 | 86 | 类型:[嵌套对象](nested_object.md) | `undefined` 87 | 88 | ### getSelectedGroups 89 | 90 | ```js 91 | getSelectedGroups() → {array} 92 | ``` 93 | 94 | > 继承自[音符组选择 - getSelectedGroups](group_selection.md) 95 | 96 | 按照选择的顺序获取一组选定的 [`音符组引用`](note_group_reference.md)。 97 | 98 | #### 返回: 99 | 100 | 一 `组` (array) [`音符组引用`](note_group_reference.md) 101 | 102 | 类型:组 103 | 104 | ### getSelectedNotes 105 | 106 | ```js 107 | getSelectedNotes() → {array} 108 | ``` 109 | 110 | 按照选择的顺序获取一组选定的 [`音符`](note.md)。 111 | #### 返回: 112 | 113 | 一组[`音符`](note.md) 114 | 115 | 类型:组 116 | 117 | ### hasSelectedContent 118 | 119 | ```js 120 | hasSelectedContent() → {boolean} 121 | ``` 122 | 123 | > 继承自[选择状态 - hasSelectedContent](selection_state_base.md) 124 | 125 | 检查是否有任何选择。 126 | 127 | #### 返回: 128 | 129 | 类型:布尔 130 | 131 | ### hasSelectedGroups 132 | 133 | ```js 134 | hasSelectedGroups() → {boolean} 135 | ``` 136 | 137 | > 继承自[音符组选择 - hasSelectedGroups](group_selection.md) 138 | 139 | 检查是否选择了至少一个 [`音符组引用`](note_group_reference.md) 。 140 | 141 | #### 返回: 142 | 143 | 类型:布尔 144 | 145 | ### hasSelectedNotes 146 | 147 | ```js 148 | hasSelectedNotes() → {boolean} 149 | ``` 150 | 151 | 检查是否选择了至少一个 [`音符`](note.md) . 152 | 153 | #### 返回: 154 | 155 | 类型:布尔 156 | 157 | ### hasUnfinishedEdits 158 | 159 | ```js 160 | hasUnfinishedEdits() → {boolean} 161 | ``` 162 | 163 | > 继承自[选择状态 - hasUnfinishedEdits](selection_state_base.md) 164 | 165 | 检查所选对象是否有任何未完成的编辑。 166 | 167 | 例如,如果用户在几个音符/控制点周围拖动但尚未释放鼠标,这将返回 true。 168 | 169 | #### 返回: 170 | 171 | 类型:布尔 172 | 173 | ### isMemoryManaged 174 | 175 | ```js 176 | isMemoryManaged() → {boolean} 177 | ``` 178 | 179 | > 继承自[嵌套对象 - isMemoryManaged](nested_object.md) 180 | 181 | 检测选中的对象是否被内存管理(即脚本环境的垃圾回收)。 182 | 183 | #### 返回: 184 | 185 | 类型:布尔 186 | 187 | ### selectGroup 188 | 189 | ```js 190 | selectGroup(reference) 191 | ``` 192 | 193 | > 继承自[音符组选择 - selectGroup](group_selection.md) 194 | 195 | 将[`音符组引用`](note_group_reference.md) 添加到选择中。 196 | 197 | 参数必须是当前打开项目的一部分。 198 | 199 | #### 参数 200 | 201 | | 参数名 | 类型 | 说明 | 202 | | --- | --- | --- | 203 | `reference` 204 | 205 | [音符组引用](note_group_reference.md) 206 | 207 | ### selectNote(note) 208 | 209 | 选择一个 [`音符`](note.md)。 音符必须在钢琴卷中打开的当前 [`音符组引用`](note_group_reference.md) 内(请参阅 [`MainEditorView - getCurrentGroup`](main_editor_view.md)。 210 | 211 | #### 参数 212 | 213 | | 参数名 | 类型 | 说明 | 214 | | --- | --- | --- | 215 | | `note` | [音符](note.md)| | 216 | 217 | ### unselectGroup 218 | 219 | ```js 220 | unselectGroup(reference) → {boolean} 221 | ``` 222 | 223 | > 继承自[音符组选择 -unselectGroup](group_selection.md) 224 | 225 | 取消选择 [`音符组引用`](note_group_reference.md)。 如果选择已更改,则返回 true。 226 | 227 | #### 参数 228 | 229 | | 参数名 | 类型 | 说明 | 230 | | --- | --- | --- | 231 | |`reference` | [音符组引用](note_group_reference.md) | | 232 | 233 | #### 返回: 234 | 235 | 类型:布尔 236 | 237 | ### unselectNote 238 | 239 | ```js 240 | unselectNote(note) → {boolean} 241 | ``` 242 | 243 | 取消选择 [`音符`](note.md)。 如果选择已更改,则返回 `true`。 244 | 245 | #### 参数 246 | 247 | | 参数名 | 类型 | 说明 | 248 | | --- | --- | --- | 249 | |`note`|[Note](note.md)| | 250 | 251 | #### 返回: 252 | 253 | 类型:布尔 254 | 255 | }>{() => } 263 | 264 | 265 | import Gitalk from 'gitalk'; 266 | import 'gitalk/dist/gitalk.css'; 267 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 268 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/tutorials/a_minimal_example.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 最小范例 3 | --- 4 | 5 | ## 最小范例 6 | 7 | 最小的工作脚本由两个全局功能组成:`getClientInfo()` 和 `main()`。 8 | 9 | `getClientInfo()` 当脚本加载时调用。它返回一个对象,描述脚本的名称,作者,脚本的版本,以及运行脚本所需的 Synthesizer V Studio 的最小版本编号。 10 | 11 | `main()` 当用户执行脚本时被调用。 12 | 13 | ### JavaScript 14 | ```js 15 | function getClientInfo() { 16 | return { 17 | "name" : "My Script", 18 | "category" : "Example", 19 | "author" : "Bob Alice", 20 | "versionNumber" : 1, 21 | "minEditorVersion" : 65540 22 | }; 23 | } 24 | 25 | function main() { 26 | SV.showMessageBox("My Script", "Hello, world!"); 27 | SV.finish(); 28 | } 29 | ``` 30 | 31 | ### Lua 32 | 33 | ```lua 34 | function getClientInfo() 35 | return { 36 | name = "My Script", 37 | category = "Example", 38 | author = "Bob Alice", 39 | versionNumber = 1, 40 | minEditorVersion = 65540 41 | } 42 | end 43 | 44 | function main() 45 | SV:showMessageBox("My Script", "Hello, world!") 46 | SV:finish() 47 | end 48 | ``` 49 | 50 | 请参阅 [此处](https://github.com/Dreamtonics/svstudio-scripts/tree/master/HelloWorld) ,了解创建 [音符组](../classes/note_group.md) 并添加一些音符的更多示例。 51 | 52 | }>{() => } 60 | 61 | 62 | import Gitalk from 'gitalk'; 63 | import 'gitalk/dist/gitalk.css'; 64 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 65 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/tutorials/custom_dialogs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 对话框 3 | --- 4 | 5 | ## 对话框 6 | 7 | [`SV#showInputBox`](../classes/sv.md),[`SV#showYesNoCancelBox`](../classes/sv.md) 以及他们的异步版本适合简单的输入。如果需要多个输入字段和更多样化输入小部件(例如滑块),可以通过[`SV#showCustomDialog`](../classes/sv.md) 和 [`SV#showCustomDialogAsync`](../classes/sv.md) 8 | 9 | [`SV#showCustomDialog`](../classes/sv.md) 传入一个作为自定义表单对象的参数,并返回一个对象。表单对象具有以下属性: 10 | 11 | * `title`: `string` 对话的标题 12 | * `message`: `string` 对话顶部显示的信息 13 | * `buttons`: `string` 对话底部显示的预设按钮。可以是 "YesNoCancel" 或 "OkCancel" 。 14 | * `widgets`:`array` 对话框主体中显示的一组小部件。 15 | 16 | 欲了解更多信息,请参阅 [JavaScript 示例](https://github.com/Dreamtonics/svstudio-scripts/blob/master/Tests/TestCustomDialog.js) 和 [Lua 示例](https://github.com/Dreamtonics/svstudio-scripts/blob/master/Tests/TestCustomDialog.lua)。 17 | 18 | }>{() => } 26 | 27 | 28 | import Gitalk from 'gitalk'; 29 | import 'gitalk/dist/gitalk.css'; 30 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 31 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/tutorials/localization.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 本地化 3 | --- 4 | 5 | ## 本地化 6 | 7 | ### `SV.T(text)` 8 | 9 | `SV.T(…)` 是一个方便的函数,用于根据 Synthesizer V Studio 的当前语言设置翻译字符串。翻译基于脚本作者提供的词典。如果遇到字典外的字符串,它将使用 Synthesizer V Studio 的翻译文件,如果仍然找不到翻译,则将返回原始字符串。 10 | 11 | ## 在脚本中嵌入翻译字典 12 | 13 | 脚本作者可以使用 `getTranslations(langCode)` 回调以提供脚本专用的翻译词典。当 Synthesizer V Studio 加载脚本并为语言代码查找字符串参数时,将执行此函数。它返回数组 `array`。 14 | 15 | 例如: 16 | 17 | ### JavaScript 18 | 19 | ```js 20 | function getTranslations(langCode) { 21 | if(langCode == "ja-jp") { 22 | return [ 23 | ["Please enter a number here:", "数字を入力してください:"], 24 | ["Please enter some text here:", "テキストを入力してください:"] 25 | ]; 26 | } else 27 | if(langCode == "zh-cn") { 28 | return [ 29 | ["Please enter a number here:", "请输入一个数字:"], 30 | ["Please enter some text here:", "请输入一段文本:"] 31 | ]; 32 | } 33 | return []; 34 | } 35 | 36 | function main() { 37 | SV.showInputBox("My Script", SV.T("Please enter a number here:"), ""); 38 | SV.showInputBox("My Script", SV.T("Please enter some text here:"), ""); 39 | SV.finish(); 40 | } 41 | ``` 42 | 43 | ### Lua 44 | 45 | ```lua 46 | function getTranslations(langCode) 47 | if langCode == "ja-jp" then 48 | return { 49 | {"Please enter a number here:", "数字を入力してください:"}, 50 | {"Please enter some text here:", "テキストを入力してください:"} 51 | } 52 | elseif langCode == "zh-cn" then 53 | return { 54 | {"Please enter a number here:", "请输入一个数字:"}, 55 | {"Please enter some text here:", "请输入一段文本:"} 56 | } 57 | end 58 | return {} 59 | end 60 | 61 | function main() 62 | SV:showInputBox("My Script", SV:T("Please enter a number here:"), "") 63 | SV:showInputBox("My Script", SV:T("Please enter some text here:"), "") 64 | SV:finish() 65 | end 66 | ``` 67 | 68 | }>{() => } 76 | 77 | 78 | import Gitalk from 'gitalk'; 79 | import 'gitalk/dist/gitalk.css'; 80 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 81 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/tutorials/memory_management.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 内存管理 3 | --- 4 | 5 | ## 内存管理机制 6 | 7 | Synthesizer V Studio 的脚本系统使用了引用计数技术,以在宿主(运行已硬编码内存管理机制的机器码)和调用方(具有垃圾回收机制)间共享对象及安全地传递对象所有权。 8 | 9 | 绝大多数情况下,脚本编写者并不需要了解底层机制就可以写出正常工作且内存安全的代码。绝大多数错误使用内存管理的情形,都会被脚本运行环境检测到并触发错误提示,例如“无法访问已删除的对象“。但也存在不能被运行环境检测到的极端例子,和可能引发软件崩溃的罕见情况。 10 | 11 | ## 托管与非托管 12 | 13 | * 当 [`NestedObject`](../classes/nested_object.md) 不存在父对象时,它可被调用方环境垃圾回收(即托管状态)。该对象是宿主所拥有的顶层对象(例如:主项目)时除外。 14 | * 当 [`NestedObject`](../classes/nested_object.md) 存在父对象时,它始终处于非托管状态。 15 | 16 | 例如:某脚本创建了一个 [`NoteGroup`](../classes/note_group.md),并向其添加了几个音符: 17 | 18 | * NoteGroup(托管状态) 19 | * Note 1(非托管状态) 20 | * Note 2(非托管状态) 21 | * Note 3(非托管状态) 22 | * Automation 1(非托管状态) 23 | * Automation 2(非托管状态) 24 | * ...... 25 | 26 | 当作为父对象的 [`NoteGroup`](../classes/note_group.md) 被调用方垃圾回收时,宿主端针对 [`NoteGroup`](../classes/note_group.md) 的析构方法会被触发,其所有处于非托管状态的子对象将被清理。 27 | 28 | 若调用方环境中存在对 [`NoteGroup`](../classes/note_group.md) 中的其中一个非托管状态的音符的引用,则当该非托管状态的音符被删除时,也即作为父对象的 [`NoteGroup`](../classes/note_group.md) 被垃圾回收或被用户显式删除时,引用也会被标记为已删除状态。任何访问该无效引用的操作都会被检测,并导致“无法访问已被删除的 ‘Note’ 对象”错误。 29 | 30 | 当托管状态下的 [`NoteGroup`](../classes/note_group.md) 对象被添加到 [`Project`](../classes/project.md) 对象中时,它会被转换为非托管状态。这种转换只是一种简单的、标识其绕过垃圾回收机制的状态改变,并不涉及内存的分配、释放或复制操作。 31 | 32 | }>{() => } 40 | 41 | 42 | import Gitalk from 'gitalk'; 43 | import 'gitalk/dist/gitalk.css'; 44 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 45 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/api/usage_summary.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 用法综述 3 | --- 4 | 5 | # 用法综述 6 | 7 | 这个页面总结了一些类的用法和技巧。 8 | 9 | ## 类继承关系图 10 | 11 | 宿主对象] -- getArrangement --> ArrV[ArrangementView
编曲区界面] 14 | SV -- getMainEditor --> MEV[MainEditorView
主编辑器界面] 15 | SV -- getProject --> Prj[Project
工程] 16 | SV -- getPlayback --> PBCtrl[PlayBackControl
回放控制] 17 | ArrV -- getSelection --> ASSt[ArrangementSelectionState
编曲区选择状态] 18 | ArrV -- getNavigation --> CSys[CoordinateSystem
坐标系] 19 | MEV -- getNavigation --> CSys 20 | MEV -- getSelection --> TISSt[TrackInnerSelectionState
轨道内部选择状态] 21 | MEV -- getCurrentGroup --> NGrpR[NoteGroupReference
音符组引用] 22 | MEV -- getCurrentTrack --> Trk[Track
轨道] 23 | Prj -- getTrack --> Trk 24 | Prj -- getNoteGroup --> NGrp[NoteGroup
音符组] 25 | Prj -- getTimeAxis --> TAx[TimeAxis
时间轴] 26 | Trk -- getGroupReference --> NGrpR 27 | NGrpR -- getTarget --> NGrp 28 | NGrp -- getNote --> Nte[Note
音符] 29 | NGrp -- getParameter --> Auto[Automation
自动化] 30 | ASSt -.- SSB{SelectionStateBase
选择状态基础接口} 31 | ASSt -.- GrpS{GroupSelection
音符组选择} 32 | TISSt -.- GrpS 33 | TISSt -.- SSB 34 | GrpS -- getSelectedGroups --> NGrp 35 | TISSt -- getSelectedNotes --> Nte 36 | NObj{NestedObject
嵌套对象} -. getParent .-> NObj 37 | click SV href "./classes/sv" "宿主对象" 38 | click ArrV href "./classes/arrangement_view" "编曲区界面" 39 | click MEV href "./classes/main_editor_view" "主编辑器界面" 40 | click Prj href "./classes/project" "工程" 41 | click PBCtrl href "./classes/playback_control" "回放控制" 42 | click ASSt href "./classes/arrangement_selection_state" "编曲区选择状态" 43 | click CSys href "./classes/coordinate_system" "坐标系" 44 | click TISSt href "./classes/track_inner_selection_state" "轨道内部选择状态" 45 | click NGrpR href "./classes/note_group_reference" "音符组引用" 46 | click Trk href "./classes/track" "轨道" 47 | click NGrp href "./classes/note_group" "音符组" 48 | click TAx href "./classes/time_axis" "时间轴" 49 | click Nte href "./classes/note" "音符" 50 | click Auto href "./classes/automation" "自动化" 51 | click SSB href "./classes/selection_state_base" "选择状态基础接口" 52 | click GrpS href "./classes/group_selection" "音符组选择" 53 | click NObj href "./classes/nested_object" "嵌套对象" 54 | `}/> 55 | 56 | ### Form(窗体)Object控件定义及返回 57 | 58 | > 以JavaScript为例(来自Dreamtonics的Github范例) 59 | 60 | #### 定义 61 | 62 | ```js 63 | var myForm = { 64 | "title": "Form Title", 65 | "message": "This is just some dummy text.", 66 | "buttons": "YesNoCancel", 67 | "widgets": [ 68 | { 69 | "name": "sl1", "type": "Slider", //滑动条1 70 | "label": "My Slider 1", //标签 71 | "format": "%1.0f", //数据格式 72 | "minValue": -10, //最大值 73 | "maxValue": 10, //最小值 74 | "interval": 0.5, //分度值 75 | "default": 3 //缺省值 76 | }, 77 | { 78 | "name": "cb1", "type": "ComboBox", //组合框1 79 | "label": "My ComboBox 1", //标签 80 | "choices": ["Choice A", "Choice B", "Choice C"], //选项 81 | "default": 0 //默认选项 82 | }, 83 | { 84 | "name": "cb2", "type": "ComboBox", 85 | "label": "My ComboBox 2", 86 | "choices": ["Choice A", "Choice B", "Choice C"], 87 | "default": 2 88 | }, 89 | { 90 | "name": "tb1", "type": "TextBox", //文本框(单行) 91 | "label": "Enter some text here", //标签 92 | "default": "Hello, world!" //缺省文本 93 | }, 94 | { 95 | "name": "ta1", "type": "TextArea", //文本框(多行) 96 | "label": "My TextArea", //标签 97 | "height": 100, //高度 98 | "default": "Enter some more text here.\nAnother line.\nYet another line!", //缺省文本 99 | }, 100 | { 101 | "name": "check1", "type": "CheckBox", //复选框 102 | "text": "Check this option (CheckBox 1)", //标签 103 | "default": false //缺省状态 104 | }, 105 | { 106 | "name": "check2", "type": "CheckBox", 107 | "text": "Another option just for instance (CheckBox 2)", 108 | "default": false 109 | } 110 | ] 111 | }; 112 | ``` 113 | 114 | #### 调用 115 | 116 | ```js 117 | SV.showCustomDialog(myForm); 118 | ``` 119 | 120 | #### 调用 + 返回 121 | 122 | ```js 123 | var result = SV.showCustomDialog(myForm); 124 | 125 | if (result.status == "Yes") { 126 | SV.showMessageBox("Filled Form", "Slider value: " + result.answers.sl1 + result.answers.sl1); 127 | SV.showMessageBox("Filled Form", "ComboBox values: " + 128 | result.answers.cb1 + " and " + result.answers.cb2); 129 | SV.showMessageBox("Filled Form", "TextBox value: " + result.answers.tb1); 130 | SV.showMessageBox("Filled Form", "TextArea value: " + result.answers.ta1); 131 | SV.showMessageBox("Filled Form", "CheckBox1: " + result.answers.check1); 132 | SV.showMessageBox("Filled Form", "CheckBox2: " + result.answers.check2); 133 | } else if (result.status == "No") { 134 | SV.showMessageBox("Filled Form", "The form returned \"No\"."); 135 | } 136 | ``` 137 | 138 | #### 另:ComboBox添加选项 139 | 140 | ```js 141 | //[2]:widgets数组中ComboBox2(cb2)所在的索引; 142 | myForm.widgets[2].choices.push("这一个选项将添加到cb2末尾", "这个也是,可以无限添加"); 143 | myForm.widgets[2].choices.unshift("而这个选项则会被添加到开头,其余选项下移"); 144 | ``` 145 | 146 | ### 常见Object返回属性 147 | 148 | ### {NoteGroupReference}.getVoice() → {object} 149 | 150 | - `tF0Left`: `number` 音高变化 - 时长 - 左(秒) 151 | - `tF0Right`: `number` 音高变化 - 时长 - 右(秒) 152 | - `dF0Left`: `number` 音高变化 - 深度 - 左(半音) 153 | - `dF0Right`: `number` 音高变化 - 深度 - 右(半音) 154 | - `tF0VbrStart`: `number` 颤音 - 开始(秒) 155 | - `tF0VbrLeft`: `number` 颤音 - 左(秒) 156 | - `tF0VbrRight`: `number` 颤音 - 右(秒) 157 | - `dF0Vbr`: `number` 颤音 - 深度(半音) 158 | - `fF0Vbr`: `number` 颤音 - 频率(Hz) 159 | - `paramLoudness`: `number` 参数 - 响度(dB,分贝) 160 | - `paramTension`: `number` 参数 - 张力 161 | - `paramBreathiness`: `number` 参数 - 气声 162 | - `paramGender`: `number` 参数 - 性别 163 | 164 | ### {Note}.getAttributes() → {object} 165 | 166 | - `tF0Offset`: `number` 音高转变 - 偏移(秒) 167 | - `tF0Left`: `number` 音高变化 - 时长 - 左(秒) 168 | - `tF0Right`: `number` 音高变化 - 时长 - 右(秒) 169 | - `dF0Left`: `number` 音高变化 - 深度 - 左(半音) 170 | - `dF0Right`: `number` 音高变化 - 深度 - 右(半音) 171 | - `tF0VbrStart`: `number` 颤音 - 开始(秒) 172 | - `tF0VbrLeft`: `number` 颤音 - 左(秒) 173 | - `tF0VbrRight`: `number` 颤音 - 右(秒) 174 | - `dF0Vbr`: `number` 颤音 - 深度(半音) 175 | - `pF0Vbr`: `number` 颤音 - 相位(弧度,-π ~ π) 176 | - `fF0Vbr`: `number` 颤音 - 频率(Hz) 177 | - `tNoteOffset`: `number` 时间和音素 - 音符偏移(秒) 178 | - `exprGroup` (optional): `string` 表现力分组 179 | - `dur`: array of `number` 音素时长尺度 180 | - `alt`: array of `number` 可替换的音素发音 181 | 182 | ### SV.create(type) → {object} 183 | 184 | 见 [SV](classes/sv.md) 185 | 186 | ### SV.getHostInfo() → {object} 187 | 188 | - `osType`: `string` 取值为"Windows"、"macOS"、"Linux"、"Unknown"之一。 189 | - `osName`: `string` 操作系统的全名。 190 | - `hostName`: `string` "Synthesizer V Studio Pro" 或"Synthesizer V Studio Basic" 191 | - `hostVersion`: `string` Synthesizer V Studio的版本字符串,如"1.0.4" 192 | - `hostVersionNumber`: `number` 以数字形式返回版本号,各用两位十六进制数表示大版本、小版本和修订版本 (比如 0x010004 就是 "1.0.4" 的意思) 193 | - `languageCode`: `string` 用户界面的语言代码,如 "en-us", "ja-jp", "zh-cn" 194 | 195 | ### SV.showCustomDialog(form) → {object} 196 | 197 | **返回的Object为Form Object的返回类型** 198 | 199 | 自定义窗口的控件返回通常为`{Object}.answers.{Widget Name}` 200 | 201 | 自定义窗口的按钮返回通肠为`{Object}.status` → `"Yes" | "No"` 202 | 203 | > 参见 [Form(窗体)Object控件定义及返回](#Form(窗体)Object控件定义及返回) 204 | 205 | ### {TimeAxis}.getMeasureMarkAt(measureNumber) → {object} 206 | 207 | * `position`: `number` 标记放置处的小节数。 208 | * `positionBlick`: `number` 标记位置 (以 blicks 为单位) 209 | * `numerator`: `number` 分子(例如,如果是 3/4 时间标记,则为 3) 210 | * `denominator`: `number` 分母(例如,如果它是 3/4 时间标记,则为 4) 211 | 212 | ### {TimeAxis}.getMeasureMarkAtBlick(b) → {object} 213 | 214 | 略 215 | 216 | import Mermaid from '@theme/Mermaid'; 217 | import Gitalk from 'gitalk'; 218 | import 'gitalk/dist/gitalk.css'; 219 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 220 | import BrowserOnly from '@docusaurus/BrowserOnly'; 221 | 222 | }>{() => } 230 | 231 | -------------------------------------------------------------------------------- /docs/download/editor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 编辑器下载 3 | --- 4 | 5 | 由于 Pro 版本的编辑器需要付费购买,我们在这里只提供了 Basic 版本的编辑器下载。 6 | 7 | 在国内购买 Pro 版本的编辑器,请访问 [五维介质官方淘宝商城](https://item.taobao.com/item.htm?id=622045467110) 以及 [Dreamtonics 官方淘宝商城](https://dreamtonics-cn.taobao.com/) 8 | 9 | | 版本号 | 下载点 1 | 10 | | --- | --- | 11 | | 1.5.1 (Latest - macOS) | [macOS](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EUpEgbaaIDJDm_ILn2SN6-YB6HsS-kyHvVRwoBdQmxhi7A?e=YNiTuX) | 12 | | 1.5.0 (Latest - Windows, Linux) | [Windows](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ERL6TKgP3QpElJ6gNwcM2XABFqPHJg1roAEgJj8oPm62hw?e=kUWbWV) [Linux](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EWN8iUPDnYJLmdebv_0AMN0BiF3hwKcf4vwcRQ-A-9Z0Vg?e=2YZfp9) [macOS](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EVfZy3SkG8hGs5hSSizDlqwBgJNl8OhqosXOkx1o1JuR5A?e=VOidxw) | 13 | | 1.4.1 | [Windows](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EYI6ufeJ_OBOp-TMbhDAEQ4BnEs_a3AJZ_BCf4TBYR29Xw?e=Yu4Ok3) [Linux](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EXrTejHeihNKuyvrO4c-x5kB2VtLFDgqgFyWPFsk4mrOGw?e=5sC7rF) [macOS](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EQrHvx8cetFHueH2TzCwj_8B46Yefp6EG9YrMHEDGeyokQ?e=DPmDac) | 14 | | 1.4.0 | [Windows](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EQxAoEpNu8BOpnabz3OwSLYBLEvxzt0teoQXlFOBfK82Kg?e=GGbhrl) [Linux](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EfCwYhph_pZNqi0DanREGsABd41NUAnX38e8Md_SXo3yvA?e=1rscWP) [macOS](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ERHVyDTQNbpHqkHioWI1AwkBn71BoMwMpzu1mYZEo_UC4w?e=rjTsjs) | 15 | | 1.3.0 | [Windows](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EUTBtAMBfvtIsu_lLj3BkzYBfKgm2Z7GAkGD-dqFy0hQ0w?e=Cdae8E) [Linux](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ETBqQhRBRXNEiQujxf4YKgsBnBVV2-J1xDv9l25reWW7yA?e=B75d5x) [macOS](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EbREEfNXLOpAgrKT-FGBKMQB_QPdczjxXKfxh58Yu5k-ww?e=JcypOj) | 16 | | 1.2.4 | [Windows](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ESt-RN-Eo1xLo2jk4AoXXc8BAicZCI2wMw-neE-e2SV0lw?e=BZ6XgZ) [Linux](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EY0ViKwZtnpLsM_QP6ON1tABZI5KnkFEl3SjjvjTNlRcwg?e=5iJJmN) [macOS](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EfqxH5dPvIRPjEL6xDzOE0gBcTi9CEw7WcW73ndH0oBWOw?e=EAoWoE) | 17 | 18 | * 下载点 1 为 OneDrive 地址(世纪互联),已经进行国内加速 19 | 20 | :::tip 21 | Synthesizer V Studio 从 1.5.1 开始原生支持基于 ARM 芯片的 Mac 设备 22 | ::: 23 | 24 | :::danger 25 | 据报告,1.5.1 对 Std 声库有严重的兼容问题。如果对 Std 声库有需求,请暂时不要更新 26 | ::: 27 | 28 | :::tip 29 | 1.2.4 之前的版本由于一些安全问题,暂不提供下载 30 | ::: 31 | 32 | }>{() => } 40 | 41 | 42 | import Gitalk from 'gitalk'; 43 | import 'gitalk/dist/gitalk.css'; 44 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 45 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/download/other.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 其他下载 3 | --- 4 | 5 | 我们还提供了一些其他资源下载。 6 | 7 | ### 恢复默认配置 8 | 9 | 当你遇到了词典丢失、中文语言包丢失等等情况时,你可以尝试恢复默认配置。将下载的文件解压到当前用户的文档目录下即可,由 LinR_隐卫制作:[下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ESFuPAaNhiFDh4OSF3pUuvMBOPAn8-ygT6SgOk4ANisNrQ?e=FxN2y3) 10 | 11 | :::warning 12 | 该功能可能导致声库信息以及激活信息丢失。因此我们建议使用前反激活所有声库以及编辑器 13 | ::: 14 | 15 | }>{() => } 23 | 24 | 25 | import Gitalk from 'gitalk'; 26 | import 'gitalk/dist/gitalk.css'; 27 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 28 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/download/script.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 脚本下载 3 | --- 4 | 5 | 以下脚本可在 Synthesizer V Studio Pro 中使用。正确使用脚本可有效加快你的调校速度和质量。有关脚本使用,请参考 [脚本使用](../main_docs/menu/script.md) 6 | 7 | ## 脚本下载 8 | 9 | 我们非常欢迎脚本开发者将脚本放在这里。你可以直接提交 Pull Requests,或者 [联系我们](https://message.bilibili.com/#/whisper/mid273891297) 10 | 11 | | 脚本名称 | 开发者 | 版本号 | 下载地址 1 | 12 | | -------- | -------- | -------- | -------- | 13 | | MergeSelectedNotes 合并音符 | Dreamtonics | ver.001 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EUPHVVTVA4JLv-ivTizL4tIBBk0FVrmVWRfHhcZyA6m7BQ?e=Ihzhop) | 14 | | RandomizeParameters 随机参数 | Dreamtonics | ver.001 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ET6AvdUAbvxPo71q9ET2INQBdamHK9T73SBzwy9iXQw4Ng?e=8FeNDl) | 15 | | ScaleSelectedNotes 音符缩放 | Dreamtonics | ver.002 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/Efb8aFPbiO5EsKqYUYv8l9EBAT3u4XdgZrMhQyodesZNGw?e=AE8722) | 16 | | SilenceSkippingPlay 跳过静音 | Dreamtonics | ver.001 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ESvNB-StFOZJkq-wg38YhjABZT7INAipgb35-QPp8pYKCg?e=hKU2sf) | 17 | | SmoothNavigationPlay 平滑滚动 | Dreamtonics | ver.001 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EYAQ7B5SrdtAq681wiq2mC8BJHRB-uRprHAs6fiBOuRlgg?e=5XtNtp) | 18 | | SplitSelectedGroups 分割音符组 | Dreamtonics | ver.001 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EdLMw1gWWgZAjbhj_81nCiwBkiU6_OjKoVOzhKz0FqVzxg?e=Mgi3Qs) | 19 | | SplitSelectedNotes 分割音符 | Dreamtonics | ver.001 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EXFgdFVjQnRFknOxuv0rkKwBnrCwe9CpQxAFHK-nyfA01A?e=q9NVz8) | 20 | 21 | ## 脚本说明 22 | 23 | 正如主文档一样,我们也为插件提供了说明文档: 24 | 25 | ### MergeSelectedNotes 合并音符 26 | 27 | 合并选择的音符,音符之间必须相连,音高由第一个音决定,歌词合并,以空格分隔 28 | 29 | ### RandomizeParameters 随机参数 30 | 31 | 生成随机的参数。脚本可自定义以下选项 32 | 33 | ![RP脚本](/docs/download/script/1.png) 34 | 35 | #### Parameter Type 36 | 37 | 选择需要添加随机参数的参数种类。支持所有类型的参数 38 | 39 | #### 力度 40 | 41 | 随机参数的幅度 42 | 43 | #### Speed 44 | 45 | 随机参数的频率 46 | 47 | #### Points per quarter 48 | 49 | 每小节生成的参数点,可以理解为精度 50 | 51 | #### Replace existing control points 52 | 53 | 勾选后将会替代原有的参数。不勾选将会在原有的参数点上叠加 54 | 55 | ### ScaleSelectedNotes 音符缩放 56 | 57 | 伸缩音符的长度。脚本可自定义以下选项 58 | 59 | ![SSN脚本](/docs/download/script/2.png) 60 | 61 | #### Upscaling factor 62 | 63 | 拉长系数 64 | 65 | #### Downscaling factor 66 | 67 | 缩短系数 68 | 69 | :::tip 70 | 两者数值相等时,将不会进行任何操作 71 | ::: 72 | 73 | #### Relative to the selection start 74 | 75 | 勾选后将会相对首个音符开头进行缩放,不勾选将会相对播放杆进行缩放 76 | 77 | ### SilenceSkippingPlay 跳过静音 78 | 79 | 直接跳过静音部分并开始播放 80 | 81 | ### SmoothNavigationPlay 平滑滚动 82 | 83 | 开始播放,并且通过滚动钢琴卷帘窗保证播放杆位置固定,类似于 Cubase 中的平滑滚动功能 84 | 85 | ![SNP脚本](/docs/download/script/3.png) 86 | 87 | #### Playhead Position 88 | 89 | 调整播放秆锁定的位置。锁定位置距离左边界位置 = 钢琴卷帘窗长度 × 数值 90 | 91 | ### SplitSelectedGroups 分割音符组 92 | 93 | 在播放杆位置分开**选中且播放杆对应**的音符。 94 | 95 | ### SplitSelectedNotes 分割音符 96 | 97 | 在播放杆位置分开选中的音符。分割后新产生的音符歌词为 `-` 98 | 99 | :::tip 100 | 对于播放杆对应的音符,将会从播放杆处分割。对于非播放杆对应的音符,将会从中间分割 101 | ::: 102 | 103 | }>{() => } 111 | 112 | 113 | import Gitalk from 'gitalk'; 114 | import 'gitalk/dist/gitalk.css'; 115 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 116 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/download/voice.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 声库下载 3 | --- 4 | 5 | 由于完整版声库需要付费购买,我们在这里只提供了 Lite 版本的声库下载。 6 | 7 | | 声库 | 销售方 | 语言 | 最新版本 | 下载点 1 | 8 | | --- | --- | --- | --- | --- | 9 | | 爱莲娜 芙缇
Eleanor Forte | Animen | 英文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EdXBpPtKDB5KsaA9m-RLce0BAy5yvpBcpZXuuKoBAvSh-w?e=k4chW7) | 10 | | 爱莲娜 芙缇 AI
Eleanor Forte | Animen | 英文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EarVvzTj6rVLqn8Ak70C6kkBmCEErLUTCH8buZ5Q4wRtTw?e=1vmS4u) | 11 | | 艾可
Aiko | Animen | 中文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EYhd5lHG0ehIhwjoL3zh374BBMTiRdx9R7F6VFz1tOphQQ?e=H85YaL) | 12 | | 赤羽
Chiyu | 五维介质 | 中文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EYhd5lHG0ehIhwjoL3zh374BBMTiRdx9R7F6VFz1tOphQQ?e=kzeAmU) | 13 | | 玄武
Genbu | Animen | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EQbLJlvpUuRKjV5ijB6z2JgBlkURRSnQcL0ZRpjl8JihuQ?e=SGulAD) | 14 | | 琴叶 茜 · 葵
Kotonoha Akane & Aoi | AH-Software | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/Ebw9DN_GI7JEu6vyV3eJri4BNCQpxzowT-izCQI4VS9sDw?e=TBDUWT) | 15 | | 弦卷真纪 AI
Maki | AH-Software | 英文 | ver.101 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EV8mCmZvvaZMnQJBCUQWfBYBrhtToO-2nmGIyAoZ2O8vyA?e=k4H0CF) | 16 | | 弦卷真纪 AI
Maki | AH-Software | 日文 | ver.101 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/Ed0AcM5jjppBsvevR8W9p5QBRfERTSlfmvNJQXL1mTMXWg?e=NIsxih) | 17 | | 弦卷真纪
Maki | AH-Software | 英文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ETuk1B67-m9FglBWVWev7q4Bc4nZFT3ROBzr6w7pAn_29w?e=xhV3M4) | 18 | | 弦卷真纪
Maki | AH-Software | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EUMokwpvNCdFji4E9xOpZ3wB3QihLAs0tTLsFjKfMMmNJA?e=K6QYcK) | 19 | | 小春六花
Rikka | AH-Software | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EalXXRy2RalCtAWF4C1nUp4BwNZo2-MiFOCMR7zFL0cBsA?e=EmoS7b) | 20 | | 小春六花 AI
Rikka | AH-Software | 日文 | ver.101 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EUjBaLbvjiJBrPb-6RsD9GABQnCbQwRIs_xtzR55BTUpdA?e=TCdeOj) | 21 | | Saki | Dreamtonics | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ER4u2x74NzFIqFG6zsVA_gUBwxAM88zbNwOZGvTraVe9qA?e=iR1jhH) | 22 | | Saki AI | Dreamtonics | 日文 | ver.101 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EfolgZEPnZNBk3QXIzXgJrgBDlGtX9MaQE7FhKgeop9gNA?e=pWHMQQ) | 23 | | 追傩酱
Tsuina | AH-Software | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/EZ0WhnkCSBRPijqehoUhk4cBLhUScYT49_HifE3HKH6d_Q?e=kCpJSk) | 24 | | 追傩酱 AI
Tsuina | AH-Software | 日文 | ver.100 | [下载](https://yzweb-my.sharepoint.com/:u:/g/personal/bilibililty_bujigegroup_site/ETT2F7p7nshHqMwwF7zn-TYBPs0rx6VYNjv1-QhMS6ls7g?e=tFypUl) | 25 | 26 | ### 购买完整版 27 | 28 | 请根据你所需声库的销售方选择相应购买方式。除特殊说明,所有销售商均支持支付宝、微信支付: 29 | 30 | * Animen:[台湾代理](https://www.anicute.com/) 31 | * 五维介质:[官方淘宝商城](https://item.taobao.com/item.htm?id=622045467110) 32 | * AH-Software:[官方商城(日本)](https://www.ah-soft.com/product/series.html#synth-v)(不支持微信支付) 33 | * Dreamtonics:[官方淘宝商城](https://dreamtonics.taobao.com/shop/view_shop.htm?id=2212881578559) 34 | 35 | ### 关于下载点 36 | * 下载点 1 为 OneDrive 地址(世纪互联),已经进行国内加速 37 | 38 | }>{() => } 46 | 47 | 48 | import Gitalk from 'gitalk'; 49 | import 'gitalk/dist/gitalk.css'; 50 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 51 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/arrangement/play.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 走带 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/arrangement/top.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 顶栏 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/arrangement/track.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 音轨 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 概述 3 | --- 4 | 5 | :::tip 6 | 这篇文档只是为了教程的完整性而写。你如果有电脑操作基础,跳过这篇文档对于教程的理解 **完全没有问题**(即使没有调教基础)。 7 | ::: 8 | 9 | Synthesizer V Studio 的菜单栏如下 10 | 11 | ![菜单栏总览](/docs/main_docs/menu/about/1.png) 12 | 13 | --- 14 | 15 | ## 快捷键 16 | 17 | 如果你对某个菜单对应的功能设置了快捷键,那么它会在菜单的右侧显示。同时,如果你设置了多个快捷键,它们都会显示出来,如图。 18 | 19 | ![快捷键](/docs/main_docs/menu/about/5.png) 20 | 21 | ## 菜单的可用性 22 | 23 | 如果当前菜单不可用,Synthesizer V Studio 会将其显示为灰色,如下图。 24 | 25 | ![灰色](/docs/main_docs/menu/about/6.png) 26 | 27 | ## 菜单的分类 28 | 29 | **与其他软件不同的是**,Synthesizer V Studio 将每个菜单也单独做了分类。通过大标题可以确定操作的对象等等。下图为对 “音符” 对象的一些操作。 30 | 31 | ![菜单分类](/docs/main_docs/menu/about/7.png) 32 | 33 | ## 复选菜单与非复选菜单 34 | 35 | 点击复选菜单时。当前菜单的功能即被启用。复选菜单在被选中后会出现 √,如下图。 36 | 37 | ![复选菜单](/docs/main_docs/menu/about/3.png) 38 | 39 | 同时,部分复选菜单之间是存在冲突的。也就是说,当你选择了其中一项之后,其他项会被自动取消选择,如下图。 40 | 41 | ![复选菜单冲突](/docs/main_docs/menu/about/4.png) 42 | 43 | }>{() => } 51 | 52 | 53 | import Gitalk from 'gitalk'; 54 | import 'gitalk/dist/gitalk.css'; 55 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 56 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/auto_process.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 自动处理 3 | --- 4 | 5 | :::tip 6 | 本节内容存在极多的 AI 部分,因此难以详细表述出其原理,请酌情阅读。 7 | ::: 8 | 9 | 自动处理菜单内容如下 10 | 11 | ![修改菜单](/docs/main_docs/menu/auto_process/1.png) 12 | 13 | ## 自动音高调校 14 | 15 | 自动调节已选择音符 / 音符组内音符的音高参数。该功能只改变音高偏差参数,并且会将音符的颤音深度、音高转变的左右深度归零。点击后弹窗如下: 16 | 17 | :::tip 18 | 弹窗仅存在于 Pro 版本,Basic 版本仅会使用默认参数生成。 19 | ::: 20 | 21 | ![自动音高调校](/docs/main_docs/menu/auto_process/2.png) 22 | 23 | ### 表现力 24 | 25 | 可以理解为音高偏差参数的改变幅度。 26 | 27 | ### 随机数种子 28 | 29 | 用于生成音高偏差的随机数。该功能并无实际意义,但改变数值可以改变每次生成的参数。在对生成内容不满意时,可以改变随机数种子,从而获得不同的结果。 30 | 31 | ### 启用音高补正 32 | 33 | 减少音高偏差偏移的幅度。勾选该功能后可有效防止跑调,但可能会导致颤音幅度减低。 34 | 35 | ## 自动音高调校(自定义风格) 36 | 37 | ![自动音高调校(自定义)](/docs/main_docs/menu/auto_process/3.png) 38 | 39 | :::tip 40 | 该功能仅存在于 Pro 版本。 41 | ::: 42 | 43 | 表现力、随机数种子、启用音高补正与上述完全相同,以下仅介绍不同的内容。 44 | 45 | ### 歌唱风格 - 颤音 1 46 | 47 | 更改音高抖动程度 48 | 49 | ### 歌唱风格 - 颤音 2 50 | 51 | 更改颤音幅度 52 | 53 | ### 歌唱风格 - 衔接力度 54 | 55 | 更改音头强调的幅度。该功能可能作用于音符的转音。 56 | 57 | ## 以新的随机数重新生成 58 | 59 | :::tip 60 | 该功能仅存在于 Pro 版本。 61 | ::: 62 | 63 | 按上次使用自动调校的参数,只改变随机数并重新调节音高。 64 | 65 | ## 修饰选择的音符 66 | 67 | :::tip 68 | 该功能仅存在于 Pro 版本。 69 | ::: 70 | 71 | 对选择的音符添加转音(通过拆音实现而不是参数),点击后窗口如下。 72 | 73 | ![修饰选择的音符](/docs/main_docs/menu/auto_process/4.png) 74 | 75 | ### 向左拆分的倾向 76 | 77 | 左侧拆出的音符长度。达到一定数值后将不在左侧拆音。 78 | 79 | ### 向右拆分的倾向 80 | 81 | 右侧拆出的音符长度。达到一定数值后将不在右侧拆音。 82 | 83 | }>{() => } 91 | 92 | 93 | import Gitalk from 'gitalk'; 94 | import 'gitalk/dist/gitalk.css'; 95 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 96 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/edit.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 编辑 3 | --- 4 | 编辑菜单内容如下 5 | 6 | ![文件菜单](/docs/main_docs/menu/edit/1.png) 7 | 8 | ## 撤销 9 | 10 | 撤销上一次的操作。 11 | 12 | ## 重复 13 | 14 | (撤销撤销上一次的操作)(禁止套娃)。 15 | 16 | ## 全选 17 | 18 | 选择所有内容。如果你在此之间正在编辑音符,那么将会选择所有音符。如果你在此之间正在编辑参数,那么将会选择**所有的对应的**参数。 19 | 20 | ## 参数全选 21 | 22 | 选中所有的参数,不论你正在编辑什么。 23 | 24 | :::tip 25 | 与**全选**不同的是,参数全选会将各种参数同时选中,而全选只会选中当前正在编辑的参数。 26 | ::: 27 | 28 | ## 选择音符对应的参数 29 | 30 | 选择当前选中的音符下方的各种参数,不会取消选中已经选中的音符。 31 | 32 | :::tip 33 | Synthesizer V Studio 的所有参数以控制点的形式存在,因此可能会导致移动选中的音符及参数时,参数最开头无法同时移动的情况,此时需要手动调整。 34 | ::: 35 | 36 | ## 取消选择 37 | 38 | 取消选择当前已选择的所有内容(包括音符及参数)。 39 | 40 | :::tip 41 | 如果你在自由绘制模式下并且勾选了 “在自由绘制模式下隐藏控制点” 的选项,你可能无法辨别参数是否被选中。此时你可以切换到光标模式或控制点模式或取消勾选 “在自由绘制模式下隐藏控制点” 的选项,即可明显的辨别参数是否被选中。详见 [设置](../sidebar/settings.md) 及 [顶栏](../parameters/top.md) 。 42 | ::: 43 | 44 | ## 删除选择的内容 45 | 46 | 删除当前已选择的所有内容。 47 | 48 | ## 复制 49 | 50 | 复制当前已选择的内容。 51 | 52 | ## 剪切 53 | 54 | 复制并删除当前已选择的内容。 55 | 56 | ## 粘贴 57 | 58 | 将已复制的内容粘贴到设定的位置。 59 | 60 | 您可以在设置中改变默认粘贴方式。详见 [设置](../sidebar/settings.md) 。 61 | 62 | }>{() => } 70 | 71 | 72 | import Gitalk from 'gitalk'; 73 | import 'gitalk/dist/gitalk.css'; 74 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 75 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/file.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 文件 3 | --- 4 | 文件菜单内容如下 5 | 6 | ![文件菜单](/docs/main_docs/menu/file/1.png) 7 | 8 | ## 新建 9 | 10 | 新建一个工程。与 After Effects 等软件相同的是,在你打开 Synthesizer V Studio 的同时就已经新建了一个工程。 11 | 12 | 如果当前打开的工程有更改,那么则会出现窗口询问是否保存。 13 | 14 | * 放弃改动:不保存当前的文件并且新建一个工程。 15 | * 取消:取消新建工程并返回当前工程编辑。 16 | 17 | ![新建弹窗](/docs/main_docs/menu/file/2.png) 18 | 19 | ## 打开 20 | 21 | 打开一个新工程。支持打开 `.s5p`(Synthesizer V 工程格式)和 `.svp`(Synthesizer V Studio 工程格式)文件。 22 | 23 | :::tip 24 | 打开 `.mid`、`.midi`、`.vsqx`、`.vpr`、`.css`、`.ust` 工程文件请点击 **导入** 。 25 | ::: 26 | 27 | 如果当前打开的工程有更改,那么则会出现窗口询问是否保存。 28 | 29 | * 放弃改动:不保存当前的文件并且打开一个工程。 30 | * 取消:取消新建工程并返回当前工程编辑。 31 | 32 | 如果你需要保存当前的工程,直接关闭对话框即可。 33 | 34 | ## 最近使用的文件 35 | 36 | 展开最近使用的文件列表。点击文件名相当于执行 **打开** 操作。 37 | 38 | ## 保存 39 | 40 | 保存当前文件。如果当前文件从未保存过,将执行 **另存为** 操作。 41 | 42 | ## 另存为 43 | 44 | 将当前文件保存为一个新文件。此后的所有操作均会保存在新文件中。 45 | 46 | Synthesizer V Studio **不支持** 将当前文件保存为一个新文件并将此后的所有操作均会保存在老文件中。 47 | 48 | :::warning 49 | 在 1.4.1 版本中 Synthesizer V Studio 仍很不稳定。因此请及时保存你的工程文件。 50 | ::: 51 | 52 | ## 导入(为音轨) 53 | 54 | 打开 `.mid`、`.midi`、`.vsqx`、`.vpr`、`.css`、`.ust` 工程文件(为一个新的音轨)。 55 | 56 | 如果当前打开的工程有更改,那么则会出现窗口询问是否保存。 57 | 58 | * 放弃改动:不保存当前的文件并且打开一个工程。 59 | * 取消:取消新建工程并返回当前工程编辑。 60 | 61 | 打开 mid / midi 格式的文件会弹出的对话框。 62 | 63 | ![导入 midi](/docs/main_docs/menu/file/3.png) 64 | 65 | 1. 需要导入的音轨。勾选的音轨将作为新音轨导入。 66 | 2. 导入的音符个数。 67 | 3. 导入音符的音域。 68 | 69 | :::warning 70 | Synthesizer V Studio 与 VOCALOID 的中央 C 标准不同,这导致 VOCALOID 中的音高在 Synthesizer V Studio 中会被提高一个八度。如在 VOCALOID 中的 F3 相当于 Synthesizer V Studio 的 F4。 71 | ::: 72 | 73 | :::tip 74 | 导入伴奏请参考 [音轨选项](../arrangement/track.md) 。 75 | ::: 76 | 77 | ## 导出 78 | 79 | ### 导出到 Midi 80 | 81 | 将当前工程的音符导出为 .mid 文件,不支持导出为 .midi 文件。 82 | 83 | :::tip 84 | 由于 Synthesizer V Studio 自身的原因,导出 midi 时会多出一个空轨道。 85 | ::: 86 | 87 | ### 导出当前音符组到 UST 88 | 89 | 将当前 **音符组** 的内容导出为 UST 文件。 90 | 91 | 如果你需要导出所有内容到 UST 文件,那么请解散所有音符组。有关音符组的内容,请参考 [音符组概述 音符组库](../sidebar/note_properties.md) 。 92 | 93 | }>{() => } 101 | 102 | 103 | import Gitalk from 'gitalk'; 104 | import 'gitalk/dist/gitalk.css'; 105 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 106 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/misc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 其他 3 | --- 4 | 5 | 其他菜单内容如下 6 | 7 | ![其他菜单](/docs/main_docs/menu/misc/1.png) 8 | 9 | ## 显示帮助(在线) 10 | 11 | 打开 [官方在线帮助内容](https://dreamtonics.com/en/svstudio-resources/) 12 | 13 | ## 人工神经网络性能调整工具 14 | 15 | 根据当前电脑性能调整神经网络性能,以达到最佳效果。建议在每次更新或重新安装后运行。点击后会出现如下弹窗: 16 | 17 | ![性能调整](/docs/main_docs/menu/misc/2.png) 18 | 19 | ### 开始性能测试 20 | 21 | 开始测试机器性能,该操作需首先执行,大约需要 1 分钟。 22 | 23 | ### 应用并重新启动实时渲染系统 24 | 25 | 根据电脑性能调整渲染系统。该步骤必须执行,否则上一步没有效果。 26 | 27 | ## 关于 28 | 29 | 查看 Synthesizer V Studio 以及系统信息,在出现 Bug 时可以发送给官方。 30 | 31 | }>{() => } 39 | 40 | 41 | import Gitalk from 'gitalk'; 42 | import 'gitalk/dist/gitalk.css'; 43 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 44 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/modify.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 修改 3 | --- 4 | 5 | 修改菜单内容如下 6 | 7 | ![修改菜单](/docs/main_docs/menu/modify/1.png) 8 | 9 | ## 插入歌词 10 | 11 | 在当前音符组范围内插入歌词,对话框如下图,当前选中的歌词会被填入到歌词文本框中,以空格分隔。 12 | 13 | ![插入歌词](/docs/main_docs/menu/modify/2.png) 14 | 15 | ### 规律填充 16 | 17 | 循环填入文本框中的歌词到**选定的音符区域**中。换句话说就是从第一个词开始填,填完后再从第一个词开始填,直到所有的选中的音符都被填完。 18 | 19 | ### 按字符分割 20 | 21 | 每个字母分别填入到音符中。 22 | 23 | :::tip 24 | 只有勾选规律填充后,歌词才会**只**填充在选定的音符区域里。如果不勾选规律填充且歌词数量超出选中的音符数量,Synthesizer V Studio 会忽略选定的范围并将歌词填完。 25 | ::: 26 | 27 | ## 重置音素 28 | 29 | 将选中音符的音素重置为 Synthesizer V Studio 默认的音素。有关音素的内容,请参考 [音符属性](../sidebar/settings.md) 。 30 | 31 | ## 重置音高属性 32 | 33 | 将选中音符的音高属性重置为 Synthesizer V Studio 默认的音高属性。这里的音高属性包括侧边栏音符属性面板中的音高转变、颤音选项。 34 | 35 | :::tip 36 | 重置的内容 **不包括** PIT(音高偏差)。 37 | ::: 38 | 39 | ## 重置时间和音素 40 | 41 | 将选中音符的时间和音素重置为 Synthesizer V Studio 默认的时间和音素。这里的时间和音素包括侧边栏音符属性面板中的时间和音素选项,不包括表现力分组。 42 | 43 | ## 重置离调的音符 44 | 45 | :::tip 46 | 该功能仅存在于 Pro 版本。 47 | ::: 48 | 49 | 将离调的音符拉回到离它最近的调内音。Synthesizer V Studio 会根据整个工程自动判断调式。 50 | 51 | ## 简化参数 52 | 53 | 简化参数面板中的参数。该操作可减少工程文件的占用空间大小但不显著降低工程质量。需先选中需要简化的参数点才可使用该选项。 54 | 55 | ## 创建锚点 56 | 57 | 在当前选中的每个音符的开头和结尾创建锚点。锚点只会在当前参数面板前置显示的参数中创建。 58 | 59 | ## 自动音高调教 60 | 61 | 对当前音符组自动绘制 PIT(音高偏差)。此功能仅对 Pro 版本和部分声库有效。你可以在 [这里](../../speed_start/voice_data/chinese.md) 查看各个声库支持情况。 62 | 63 | ## 吸附到网格 64 | 65 | 将选中音符的音符头对齐到最近的网格上并保证音符长度不变,类似于一些宿主的量化功能。网格的间隔取决于在 视图 - 吸附(钢琴卷帘) 菜单中设置的选项。 66 | 67 | ## 删除短的静音部分 68 | 69 | 拉长前一个音符以补充音符间的间隙。点击后会出现如下弹窗: 70 | 71 | ![删除短的静音部分](/docs/main_docs/menu/modify/3.png) 72 | 73 | ### 阈值 74 | 75 | 调整需要删除的静音部分的时长。小于阈值的空隙部分将会被删除,同时你可以在上方看到将会改变的音符数量。 76 | 77 | ## 变调 78 | 79 | 更改选中的音符的音高。正数代表向上移动几个半音,负数代表向下移动几个半音。 80 | 81 | ## 升高(降低)八度 82 | 83 | 将音高向上(或向下)移动一个八度。 84 | 85 | :::tip 86 | 一个八度为 12 个半音 87 | ::: 88 | 89 | :::tip 90 | 关于音符组的详细信息,请参考 [音符组概述 音符组库](../sidebar/note_properties.md) 。 91 | ::: 92 | 93 | ## 创建音符组 94 | 95 | 将当前选中的音符合并为一个音符组,如果当前没有选中的音符则将当前音轨的所有音符合并为一个音符组。 96 | 97 | ## 解散音符组 98 | 99 | 解散当前选中的音符组或当前选中音符所在的音符组。 100 | 101 | ## 分离到独立的音符组 102 | 103 | 将当前选择的音符组复制一份,使其不与原音符组互相影响。该功能常用于复制参数后改歌词。 104 | 105 | :::tip 106 | 根据 Dreamtonics 官方的说法,一些发音等问题通过创建音符组的方式可以解决。(这就是玄学优化吗 hhhhh) 107 | ::: 108 | 109 | }>{() => } 117 | 118 | 119 | import Gitalk from 'gitalk'; 120 | import 'gitalk/dist/gitalk.css'; 121 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 122 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/project.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 项目 3 | --- 4 | 项目菜单内容如下 5 | 6 | ![项目菜单](/docs/main_docs/menu/project/1.png) 7 | 8 | ## 当前音轨:静音 9 | 10 | 在播放时静音当前音轨 (m),不影响渲染及导出。 11 | 12 | ## 当前音轨:独奏 13 | 14 | 打开当前音轨的独奏属性 (s)。 15 | 如果有音轨的独奏属性被打开,在播放时只会播放**独奏属性打开**的音轨。 16 | 17 | :::tip 18 | 与一些 DAW 不同,独奏当前音轨不会打开其他音轨的静音选项。 19 | ::: 20 | 21 | ## 当前音轨:重置混音设定 22 | 23 | 重置当前音轨的音量至 0db,声像至 0.00 (c) 。 24 | 25 | ## 创建新的音轨 / 伴奏轨 26 | 27 | 创建新的音轨(用于装载音源)和伴奏轨(用于装载 wav / mp3 音频)。 28 | 29 | :::tip 30 | 除将音频拖入编辑器中外,目前没有其他方法将 wav / mp3 导入到编辑器中。 31 | ::: 32 | 33 | :::tip 34 | mp3 的原理导致无法使用采样级定位,这可能会导致你无论如何都无法对轨准确。因此我们强烈建议使用 wav 格式的文件。 35 | ::: 36 | 37 | :::tip 38 | 在 Basic 编辑器中,当音轨超过 3 个时,你将不能添加新音轨。 39 | ::: 40 | 41 | ## 进入音轨 42 | 43 | ### 进入上一个音轨 44 | 45 | 切换到当前选择轨道上方的音轨。 46 | 47 | ### 进入下一个音轨 48 | 49 | 切换到当前选择轨道下方的音轨。 50 | 51 | 同时,你还可以根据轨道的名称选择要进入的音轨。 52 | 53 | ## 音符组 - 设置声库 54 | 55 | 设置当前选择的音符组使用的声库。如果当前没有选择音符组,则设置当前轨道的默认声库。 56 | 57 | :::tip 58 | 轨道声库与音符组声库是不同的。由于音符组实在是太难解释,而且它并不等同于 VOCALOID 中的序列,我们开设了一个页面介绍专门介绍音符组。详见 [音符组概述 音符组库](../sidebar/note_properties.md) 。 59 | ::: 60 | 61 | ## 音符组 - 进入音符组 62 | 63 | 切换到当前轨道里的音符组,其中上一个组 / 下一个组与上一个音轨 / 下一个音轨类似。 64 | 65 | 同时,你还可以根据音符组的名称选择要进入的音符组。 66 | 67 | }>{() => } 75 | 76 | 77 | import Gitalk from 'gitalk'; 78 | import 'gitalk/dist/gitalk.css'; 79 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 80 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/script.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 脚本 3 | --- 4 | 5 | :::tip 6 | 本节不包括脚本编写的内容。有关脚本编写,请参考 [Synthesizer V Studio 官方文档](https://dreamtonics.com/synthv/scripting),该文档的中翻工作正在进行中,参考 [了解脚本](../../api/about.md)。 7 | ::: 8 | 9 | :::tip 10 | 该功能仅存在于 Pro 版本。 11 | ::: 12 | 13 | ## 重新扫描 14 | 15 | 重新扫描插件文件夹下的所有插件。 16 | 17 | ## 打开脚本文件夹 18 | 19 | 打开脚本文件夹,即 `C:\Users\***\Documents\Dreamtonics\Synthesizer V Studio\scripts`,其中 *** 为你的用户名。 20 | 21 | ## 停止所有运行中的脚本 22 | 23 | 强制停止所有运行中的脚本,该功能可能会导致一些脚本功能失效或崩溃。 24 | 25 | :::tip 26 | 脚本的具体内容(包括官方脚本)请参考 [脚本下载界面](../../download/script.md) 27 | ::: 28 | 29 | }>{() => } 37 | 38 | 39 | import Gitalk from 'gitalk'; 40 | import 'gitalk/dist/gitalk.css'; 41 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 42 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/transport.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 播放控制 3 | --- 4 | 5 | 播放控制菜单内容如下 6 | 7 | ![播放控制菜单](/docs/main_docs/menu/transport/1.png) 8 | 9 | ## 播放 10 | 11 | 从播放杆处开始播放。 12 | 13 | ## 暂停 14 | 15 | 暂停歌曲播放,播放杆不回到起始点。 16 | 17 | ## 停止 18 | 19 | 停止歌曲播放,播放杆回到起始点。 20 | 21 | ## 循环播放选中的音符 22 | 23 | 循环选中的音符区域。 24 | 25 | ## 移动到开始 26 | 27 | 将播放杆移动到工程文件开始处。 28 | 29 | ## 移动到结尾 30 | 31 | 将播放杆移动到工程文件结尾处。 32 | 33 | ## 移动到指定小节 34 | 35 | 根据你所填写的小节号移动播放杆。 36 | 37 | }>{() => } 45 | 46 | 47 | import Gitalk from 'gitalk'; 48 | import 'gitalk/dist/gitalk.css'; 49 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 50 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/menu/view.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 视图 3 | --- 4 | 5 | 视图菜单内容如下 6 | 7 | ![视图菜单](/docs/main_docs/menu/view/1.png) 8 | 9 | ## 吸附(编曲/钢琴卷帘) 10 | 11 | 控制音符的自动对齐程度,其中编曲吸附对应序列吸附,钢琴卷帘吸附对应音符吸附。 12 | 13 | 在早期的版本中 `1/n 个四分音符` 已被翻译为 `m 分音符` ,他们的对应关系如下表: 14 | 15 | | 1/n 个四分音符 | m 分音符(三连音) | 16 | | ---- | ---- | 17 | | 2 | 8 | 18 | | 4 | 16 | 19 | | 6 | 8 - 三连音 | 20 | | 8 | 32 | 21 | | 12 | 16 - 三连音 | 22 | | 16 | 64 | 23 | | 24 | 32 - 三连音 | 24 | | 32 | 128 | 25 | 26 | 其中关闭吸附后你可以自由调整音符或序列。 27 | 28 | ## 多功能编辑工具 29 | 30 | 鼠标模式。在该模式下你可以进行选择、拖动等操作。该功能对钢琴卷帘面板还是参数面板起作用取决于你上次编辑的面板。 31 | 32 | ## 铅笔工具 33 | 34 | 自由绘制模式。在该模式下你可以进行绘制音符/参数、拖动等操作。该功能对钢琴卷帘面板还是参数面板起作用取决于你上次编辑的面板。 35 | 36 | ## 直线工具(参数) 37 | 38 | 绘制一条直线。本功能仅对参数面板起作用。 39 | 40 | :::tip 41 | 你可能会发现,在直线模式下绘制的参数可能不是一条直线,并且参数绘制完成后可能会向上或者向下突出一小段,这是由于 Synthesizer V Studio 的控制点连接方式导致的。关于参数点连接方式,请参考 [顶栏](../parameters/top.md) 。 42 | ::: 43 | 44 | ## 直接编辑音高 45 | 46 | 在钢琴卷帘窗里直接绘制音高。该功能仅在勾选铅笔工具时起作用。 47 | 48 | ## 显示其他轨道的旋律 49 | 50 | 在钢琴卷帘窗中以一条线段的形式显示其他轨道的音符。线条的颜色取决于音符所在音轨的着色(可在编曲窗口左侧找出),如图。 51 | 52 | ![其他轨道音符](/docs/main_docs/menu/view/2.png) 53 | 54 | ## 侧面板 55 | 56 | 侧面板分为音符属性面板、歌声面板、音符组库面板等等,在视图菜单中点击可打开对应面板。 57 | 58 | }>{() => } 66 | 67 | 68 | import Gitalk from 'gitalk'; 69 | import 'gitalk/dist/gitalk.css'; 70 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 71 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/bottom.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 底栏 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/breathiness.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 气声 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/gender.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 性别 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/loudness.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 响度 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/pitch_deviation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 音高偏差 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/tension.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 张力 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/top.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 顶栏 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/vibrato_envelope.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 颤音包络 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/parameters/voicing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 发声 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/piano_roll/play.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 走带 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/piano_roll/roll.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 钢琴窗编辑 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/piano_roll/top.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 顶栏 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 概述 3 | --- 4 | 5 | Synthesizer V Studio 的很多功能都在侧边栏内。对音符的调整、导出等一系列操作都需要在侧边栏内完成。 6 | 7 | Synthesizer V Studio 的侧边栏如下: 8 | 9 | ![侧边栏概览](/docs/main_docs/sidebar/about/1.png) 10 | 11 | 侧边栏从上到下依次为 音符属性、歌声、音符组库、词典、渲染、授权与激活、设置。在后续的章节中将会一一介绍各面板的功能。 12 | 13 | 同时,侧边栏是可以拖动的。按住上方的 Synthesizer V Studio 图标并拖动可以切换到左停靠或右停靠。 14 | 15 | 点击侧边栏项目的大标题,可以展开 / 折叠该标题下的内容。 16 | 17 | }>{() => } 25 | 26 | 27 | import Gitalk from 'gitalk'; 28 | import 'gitalk/dist/gitalk.css'; 29 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 30 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/dictionary.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 词典 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/library.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 音符组概述 音符组库 3 | --- 4 | 5 | 由于音符组为 Synthesizer V Studio 的一全新定义,同时较难理解而且较为重要,我们在这里先对音符组进行专门的介绍。 6 | 7 | }>{() => } 15 | 16 | 17 | import Gitalk from 'gitalk'; 18 | import 'gitalk/dist/gitalk.css'; 19 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 20 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/licence_and_updates.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 授权与激活 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/note_properties.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 音符属性 3 | --- 4 | 5 | 音符属性面板内容如下: 6 | 7 | ![音符属性面板](/docs/main_docs/sidebar/note_properties/1.png) 8 | 9 | ## 切换当前选择 10 | 11 | ### 上一个 12 | 13 | 选择上一个音符 14 | 15 | ### 下一个 16 | 17 | 选中下一个音符 18 | 19 | ## 音高转变 20 | 21 | ### 偏移 22 | 23 | 隐式改变选中音符的起始点与上一音符的结束点。负值代表向前移动起止点,正值代表向后移动起止点。该选项仅当选中音符前存在音符与之相连时起作用。该选项仅作用于音高。 24 | 25 | :::tip 26 | 隐式改变,指不改变钢琴卷帘窗中音符位置的前提下改变音符的实际位置。 27 | ::: 28 | 29 | :::tip 30 | `sec` 代表秒,而不是正割 31 | ::: 32 | 33 | ### 时长 - 左 / 右 34 | 35 | 音符左右两侧的音高平滑时长 36 | 37 | ### 深度 - 左 / 右 38 | 39 | 音符左右两侧的上凸 / 下凹的程度。正值代表向下,负值代表向上。该参数常用于拉音头及音尾。 40 | 41 | ## 颤音 42 | 43 | ### 开始 44 | 45 | 颤音开始的时间点 46 | 47 | ### 左 / 右 48 | 49 | 颤音左右两侧的平滑时间 50 | 51 | ### 深度 52 | 53 | 更改颤音的幅度 54 | 55 | ### 频率 56 | 57 | 更改颤音的频率(颤音每个颤之间的时间间隔) 58 | 59 | ### 相位 60 | 61 | 颤音的开始点的颤音方向。 62 | 63 | :::tip 64 | 颤音可以用公式 y=Asin(ωx+φ) 表示。式中 A 为深度,ω 为频率,φ 为相位 65 | ::: 66 | 67 | ### 抖动 68 | 69 | 音符的微微抖动的幅度。正确使用该参数可有效提升歌声真实性。该选项与颤音并无很强的关系。 70 | 71 | ## 时间和音素 72 | 73 | ### 音符偏移 74 | 75 | 隐式改变选中音符的起始点。负值代表向前移动起始点,正值代表向后移动起始点。该选项仅作用于音素。 76 | 77 | ### 时长 78 | 79 | 更改对应音素的发声时长。DFLT 为音阶切换功能。 80 | 81 | :::tip 82 | DFLT 仅存在于 Pro 版本中 83 | ::: 84 | 85 | ### 力度 86 | 87 | 更改对应音素的发声力度。 88 | 89 | ## 表现力分组 90 | 91 | 更改当前选中音符对应的分组。不同的分组可以带来完全不同的效果。该选项在 AI 声库中没有作用。 92 | 93 | }>{() => } 101 | 102 | 103 | import Gitalk from 'gitalk'; 104 | import 'gitalk/dist/gitalk.css'; 105 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 106 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/render.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 渲染 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/settings.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 设置 3 | --- 4 | 5 | }>{() => } 13 | 14 | 15 | import Gitalk from 'gitalk'; 16 | import 'gitalk/dist/gitalk.css'; 17 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 18 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/main_docs/sidebar/voice.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 歌声 3 | --- 4 | 5 | 歌声面板内容如下: 6 | 7 | ![歌声面板](/docs/main_docs/sidebar/voice/1.png) 8 | 9 | ### 当前声库(音轨范围) 10 | 11 | 在下拉列表中你可以更改当前音轨的默认歌手,并且可以在其下方找到声库详细信息,包括版本号、语言、音素制式、表现力分组、自动音高调校的情况。 12 | 13 | :::tip 14 | 语言中的 `mandarin` 代表中文声库 15 | ::: 16 | 17 | ### 使用松弛的辅音发音 18 | 19 | 降低辅音发音的力度。通常情况下,该功能可以让你的音符更加清晰。 20 | 21 | ### 保存 / 载入预设 22 | 23 | 点击后会出现如图的下拉菜单: 24 | 25 | ![保存载入预设](/docs/main_docs/sidebar/voice/2.png) 26 | 27 | #### 保存到新的预设 28 | 29 | 将当前歌手的歌声属性保存到新的预设中,包括音准、参数、引擎、音高、颤音的属性。你可以对你的预设进行命名。 30 | 31 | #### 已有预设 - 载入 32 | 33 | 载入之前保存到预设。 34 | 35 | #### 已有预设 - 保存(覆盖) 36 | 37 | 使用当前的歌声属性覆盖保存到预设。 38 | 39 | #### 已有预设 - 删除 40 | 41 | 删除已保存的预设。 42 | 43 | ### 重置 44 | 45 | 将当前的歌声属性恢复到默认值。 46 | 47 | :::tip 48 | 不同声库之间的预设不互通 49 | ::: 50 | 51 | ## 音准 52 | 53 | 音准内包括音调信息以及 A4 对应的频率。 54 | 55 | ### 音高偏移 56 | 57 | 更改 A4 对应的频率。 58 | 59 | ### 音调偏移 60 | 61 | 更改中央音对应的音高。(同时 A4 的频率也会改变) 62 | 63 | :::tip 64 | 可将音高偏移理解为微调,音调偏移理解为大幅度调整 65 | ::: 66 | 67 | :::tip 68 | 音准选项仅存在于 Pro 版本 69 | ::: 70 | 71 | ## 参数 72 | 73 | 更改参数的值。 74 | 75 | 响度、张力、气声、发声的详细信息,请参考 [参数面板](../parameters/bottom.md)。 76 | 77 | ### 音区偏移 78 | 79 | 增加 / 降低当前音符的音分。该功能仅存在于 AI 声库。 80 | 81 | :::tip 82 | 音区偏移参数仅存在于 Pro 版本 83 | ::: 84 | 85 | ## 合成引擎 86 | 87 | ### 渲染模式 88 | 89 | 渲染模式可以选择默认、偏好速度、偏好品质。默认会自动在速度和品质之间寻找平衡,偏好速度会降低品质提高速度,偏好品质会降低速度提高品质。 90 | 91 | ## 默认 - 音高 / 颤音 92 | 93 | 更改当前歌手的默认属性。这两个选项下的所有属性功能与在 [这里](note_properties.md) 完全相同。 94 | 95 | }>{() => } 103 | 104 | 105 | import Gitalk from 'gitalk'; 106 | import 'gitalk/dist/gitalk.css'; 107 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 108 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/other/author.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Docs 制作人员 3 | --- 4 | 5 | import { 6 | ActiveTeamRow, 7 | } from '@site/src/components/TeamProfileCards'; 8 | 9 | 这里是所有参与了 Synthesizer V Studio Docs 的成员,衷心感谢这些大佬们的无私贡献。 10 | 11 | 如果大佬本人来看了后发现自己有 Github 或者 bilibili 的号但我没写,请在 [这里](https://message.bilibili.com/#/whisper/mid273891297) 私信我。 12 | 13 | -------------------------------------------------------------------------------- /docs/speed_start/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 关于 Synthesizer V Studio 3 | --- 4 | ## Synthesizer V Studio 是什么 5 | 6 | Synthesizer V 是由华侃如创立的 Dreamtonics 公司开发的歌声合成引擎。由于其极强大的歌声合成能力及真实度获得广泛好评。在国内,五维介质代理了 Synthesizer V 的有关事宜。Synthesizer V Studio 为目前最新的版本。 7 | 8 | 1. 编辑器 9 | 10 | 编辑器是你的基础操作环境。在前期,所有调校操作均是在编辑器内进行的。Synthesizer V Studio 的编辑器分为 Basic 和 Pro 两个版本(Web 版本暂不介绍)。Basic 版本是完全免费的,可以在官网上下载,也可以在 [Docs 官方下载站](../download/editor.md),但存在一些限制;而 Pro 版本则需要付费购买(国内可在淘宝店购买)。两者的具体区别如下表。 11 | 12 | | | Basic | Pro | 13 | | ---- | ---- | ---- | 14 | | 单独购买价格 | 免费 | 649 元 | 15 | | 平台 | Windows macOS Linux | Windows macOS Linux | 16 | | 工程音轨数 | 最多 3 音轨 | 无限制 | 17 | | 渲染线程数 | 最多 2 线程 | 最多 12 线程
(官方说明为无限制,但实测为最多 12 线程) | 18 | | ASIO / Jack 音频驱动 | 不支持 | 支持 | 19 | | Pit 自动调校 | 单一的自动调校 | 支持自定义参数的自动调校 | 20 | | 其他功能 | 无 | 替换音素
脚本 ( Lua / JavaScript )
VST3 / AU 插件
气声分离导出
音区偏移
音素力度
AI 声库跨语种 | 21 | 22 | :::warning 23 | Synthesizer V Studio 不支持 Windows 7 24 | ::: 25 | 26 | 2. 声库 27 | 28 | 顾名思义,声库就是 “声音的数据库”。没有声库,编辑器也无法发出声音(这句话是有问题的,但是暂时可以这样理解)。所以,我们需要安装声库来让编辑器发出声音。 29 | 30 | 与编辑器不同的是,在声库方面你可以做出很多选择。与真人一样,不同的歌手的声音是不同的,语言也是不同的。因此,你可以根据你的个人喜好选择最喜欢的声库。目前。中文声库有赤羽、海伊、苍穹、诗岸、牧心、星尘 Minus、星尘 Infinity、青溯、默辰、岸晓、沨漪、艾可。你可以在 B 站搜索到他们演唱的歌曲来帮助你选择。 31 | 32 | 同时,我们也准备了详细的介绍文档,你可以在 [这里](voice_data/chinese.md) 找到。 33 | 34 | 与编辑器相同的是,部分声库也是有两个版本的:Lite 版与完整版。Lite 版可以在官网免费下载,完整版则需要付费购买(国内可在淘宝店购买)。完整版具有全部功能,Lite 版与完整版有以下不同: 35 | * 只有单一音阶 36 | * 不可商用 37 | * **需标注“使用 Lite”** 38 | 39 | }>{() => } 47 | 48 | 49 | import Gitalk from 'gitalk'; 50 | import 'gitalk/dist/gitalk.css'; 51 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 52 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/speed_start/install.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 安装编辑器与声库 3 | --- 4 | 5 | 工欲善其事,必先利其器。首先,最基础的就是将程序安装到你的电脑里。 6 | 7 | 声库和编辑器的安装是有顺序的。你需要先安装编辑器再安装声库。 8 | 9 | ## 1. 安装 Synthesizer V Studio 编辑器 10 | 11 | 从网上下载完安装包后,就可以开始安装进程了。 12 | 13 | ### Windows 系统 14 | 15 | :::warning 16 | Synthesizer V Studio 不支持 Windows 7 17 | ::: 18 | 19 | 双击下载的安装包,出现下图,选择语言后确定。 20 | 21 | ![选择语言](/docs/speed_start/install/1.png) 22 | 23 | 接下来是许可协议。如你所知,不同意也是不行的(x),同意后下一步。 24 | 25 | ![许可协议](/docs/speed_start/install/2.png) 26 | 27 | 接下来是选择是否安装 VST 插件。根据自己需要选择是否安装,并且下一步。 28 | 29 | :::tip 30 | 本选项仅存在于 Pro 版本 31 | ::: 32 | 33 | ![VST](/docs/speed_start/install/3.png) 34 | 35 | 接下来选择是否创建快捷方式。根据自己需要选择即可,然后下一步。 36 | 37 | ![快捷方式](/docs/speed_start/install/4.png) 38 | 39 | 待安装进度条走完后,编辑器安装就已大功告成! 40 | 41 | ### macOS 系统 42 | 43 | 双击下载的安装包,出现欢迎界面。点击继续。 44 | 45 | :::tip 46 | 从 1.5.1 版本开始,Synthesizer V Studio 原生支持 [搭载 Apple 芯片的 Mac](https://support.apple.com/zh-cn/HT211814)(Apple Silicon M1 芯片) 47 | 48 | 详见 Dreamtonics 针对 M1 芯片适配的说明:[点击查看](https://t.bilibili.com/629995007175032864) 49 | ::: 50 | 51 | :::caution 52 | 53 | 对于 1.5.0 及更早版本的 Synthesizer V Studio,在 [搭载 Apple 芯片的 Mac](https://support.apple.com/zh-cn/HT211814) 上,则需要 Rosetta 2 来运行 Synthesizer V Studio。如果系统提示安装 Rosetta,请点击安装。 54 | 55 | ::: 56 | 57 | ![欢迎安装](/docs/speed_start/install/5.png) 58 | 59 | 接下来是许可协议。如你所知,不同意也是不行的(x),同意后下一步。 60 | 61 | ![许可协议](/docs/speed_start/install/6.png) 62 | 63 | ![许可协议同意](/docs/speed_start/install/7.png) 64 | 65 | 安装程序会提示软件安装的位置和占用的空间。一般情况下,不用更改安装位置。 66 | 67 | ![标准安装](/docs/speed_start/install/8.png) 68 | 69 | 如果不需要修改设置,则可以直接点击 “安装”。 70 | 71 | 如果需要自定义安装的组件,可以点击左下角的 “自定”。 72 | 73 | ![自定安装](/docs/speed_start/install/9.png) 74 | 75 | Synthesizer V Studio Pro **必选**,是 SV 的主程序。 76 | 77 | Synthesizer V Studio AU 和 VST3 **可选**,是宿主软件的插件,可以将 SV 挂载到编曲宿主中。 78 | 79 | :::tip 80 | AU 是 Audio Unit(音频单元)的缩写,是苹果系统的一种插件格式,类似于 VST。苹果自家的库乐队(GarageBand)和 Logic 使用这种插件格式。 81 | ::: 82 | 83 | :::tip 84 | AU 和 VST3 插件仅存在于 Pro 版本。如果是 Basic 版本,则只包含主程序 Synthesizer V Studio Basic。 85 | ::: 86 | 87 | 点击 “安装”,会提示输入当前 macOS 用户的密码,输入密码后会开始安装。 88 | 89 | ![安装进程](/docs/speed_start/install/10.png) 90 | 91 | ![完成安装](/docs/speed_start/install/11.png) 92 | 93 | 大功告成! 94 | 95 | ## 2. 安装声库 96 | 97 | 不同的声库的安装步骤是完全相同的,这里以 Eleanor 的声库安装做示范。 98 | 99 | 下载到声库安装包后,你可以双击文件开始安装进程,也可以将下载的文件拖动到编辑器中开始安装。 100 | 101 | ![拖动](/docs/speed_start/install/12.png) 102 | 103 | :::warning 104 | 在 Mac 的 Pro 版本中,双击安装包可能无法正常启动安装进程,此时你可以尝试拖动声库安装包到编辑器中。 105 | ::: 106 | 107 | 安装文件的本质是一个压缩包,Synthesizer V Studio 会首先检测完整性。 108 | 109 | ![检测完整性](/docs/speed_start/install/13.png) 110 | 111 | 第一步仍旧是阅读许可协议。同意后下一步。 112 | 113 | ![声库许可协议](/docs/speed_start/install/14.png) 114 | 115 | 接下来选择安装路径。建议不要更改默认安装路径,以免引起无法读取声库的问题。 116 | 117 | ![声库安装路径](/docs/speed_start/install/15.png) 118 | 119 | 接下来请静静等候声库安装完成并点击确定。 120 | 121 | ![声库安装完成](/docs/speed_start/install/16.png) 122 | 123 | 声库安装完成后会自动弹出授权与激活对话框,在这里可以找到你安装的声库。 124 | 125 | ![安装结果](/docs/speed_start/install/17.png) 126 | 127 | }>{() => } 135 | 136 | 137 | import Gitalk from 'gitalk'; 138 | import 'gitalk/dist/gitalk.css'; 139 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 140 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/speed_start/voice_data/chinese.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 中文声库 3 | --- 4 | 5 | ## 声库详情 6 | 7 | 目前,中文声库有赤羽、海伊、苍穹、诗岸、牧心、星尘 Minus、星尘 Infinity、青溯、默辰、岸晓、沨漪、艾可,他们的详细信息如下: 8 | 9 | ### 非 AI 声库 10 | 11 | | 声库 | 声源 | 所属组织 | 擅长音域 | 擅长节奏 | 表现力分组 | 最新版本 | 12 | | --- | --- | --- | --- | --- | --- | --- | 13 | | 赤羽 *
Chiyu | 呦喵 Uneko | 五维介质 | | | D#4 | ver.100 | 14 | | 赤羽
Chiyu | 呦喵 Uneko | 五维介质 | | | B3 / D#4 / A4 / D5 | ver.100 | 15 | | 海伊
Haiyi | 花筝 Anly | 五维介质 | | | C4 / E4 / A4 / A4F (假声音阶) | ver.101 | 16 | | 苍穹
Cangqiong | Kinoko 蘑菇 | 五维介质 | | | C4 / F4 / G#4 / B4 | ver.100 | 17 | | 诗岸
Shian | Warma | 五维介质 | | | B3 / D#4 / G#4 / C5 | ver.100 | 18 | | 牧心
Muxin | 佑可猫 | 五维介质 | | | F3 / A3 / D4 / E4 | ver.100 | 19 | | 星尘 Minus
Minus | Sawako 碎花子 | 五维介质 | | | A3 / D4 / G4 / C5 | ver.100 | 20 | | 艾可 *
Aiko | 梁小喵 | Animen | | 60 - 160 | D4 | ver.100 | 21 | | 艾可
Aiko | 梁小喵 | Animen | E3 - F5 | 60 - 160 | A3 / D4 / F4 | ver.100 | 22 | 23 | :::tip 24 | 带 * 标记的为免费提供的 Lite 声库,你可以在 [这里](../../download/voice.md) 下载 25 | ::: 26 | 27 | ### AI 声库 28 | 29 | | 声库 | 声源 | 所属组织 | 自动音高调校 | 最新版本 | 30 | | --- | --- | --- | --- | --- | 31 | | 青溯
Qing Su | | Dreamtonics | 第 5 代 | ver.105 | 32 | | 默辰
Mo Chen | | Dreamtonics | 第 5 代 | ver.100 | 33 | | 岸晓
An Xiao | | Dreamtonics | 第 5 代 | ver.101 | 34 | | 沨漪
Feng Yi | | Dreamtonics | 第 5 代 | ver.100 | 35 | | 星尘 Infinity
Infinity | 茶理理 | 五维介质 | 第 5 代 | ver.102 | 36 | 37 | ## 购买完整版 38 | 39 | 我们强烈建议你在购买声库之前试用 Lite 版本或者听一下试听曲,防止引起不必要的麻烦。 40 | 41 | ### 声库试听曲 42 | 43 | * 赤羽:[404 Not Found](https://www.bilibili.com/video/BV1ba4y1x7pg) 44 | * 星尘 Minus:[零和Zero-Sum](https://www.bilibili.com/video/BV19z4y1f7kU) 45 | * 牧心:[明日](https://www.bilibili.com/video/BV1R64y1F7yh) 46 | * 艾可:[与你的2次元旅行](https://www.bilibili.com/video/BV1mb41117LM) 47 | * 青溯:[一生所幸](https://www.bilibili.com/video/BV1eh411J74T) 48 | * 星尘 Infinity:[零和Zero-Sum](https://www.bilibili.com/video/BV1f5411f7Cr) 、[淋雨一直走](https://www.bilibili.com/video/BV1pL4y1t7W6) 、[残响散歌](https://www.bilibili.com/video/BV1ET4y1y7ss) 、[7 rings](https://www.bilibili.com/video/BV1i34y117b5) 、[最终祈愿](https://www.bilibili.com/video/BV1uP4y1g7c3) 、[涟漪](https://www.bilibili.com/video/BV1gZ4y1B7rm) 49 | * 默辰:[这感觉](https://www.bilibili.com/video/BV1xY4y1s7Ge) 50 | * 岸晓:[远方有星辰](https://www.bilibili.com/video/BV1iY411w7vm) 51 | * 沨漪:[故事的最结尾](https://www.bilibili.com/video/BV1ir4y1s7BX) 52 | 53 | :::tip 54 | 以下为 R1 版本试听曲,不代表最终质量 55 | ::: 56 | 57 | * 海伊:[浅滩](https://www.bilibili.com/video/BV17W411V7Ge) 、[涟漪](https://www.bilibili.com/video/BV18W411E7E7) 58 | * 苍穹:[D!slodge](https://www.bilibili.com/video/BV1yb411z7tu) 、[徒劳的爱之美少女](https://www.bilibili.com/video/BV1gb411C7BD) 59 | * 诗岸:[寓言预见遇见你的那刻](https://www.bilibili.com/video/BV1E7411v7Cd) 60 | 61 | ### 声库购买 62 | 63 | 请根据你所需声库的销售方选择相应购买方式。所有销售商均支持支付宝、微信支付: 64 | 65 | * Animen:[台湾代理](https://www.anicute.com/) 66 | * 五维介质:[官方淘宝商城](https://item.taobao.com/item.htm?id=622045467110) 67 | * Dreamtonics:[官方淘宝商城](https://dreamtonics-cn.taobao.com/) 68 | 69 | }>{() => } 77 | 78 | 79 | import Gitalk from 'gitalk'; 80 | import 'gitalk/dist/gitalk.css'; 81 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 82 | import BrowserOnly from '@docusaurus/BrowserOnly'; 83 | -------------------------------------------------------------------------------- /docs/speed_start/voice_data/english.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 英文声库 3 | --- 4 | 5 | ## 声库详情 6 | 7 | 目前,英文声库有爱莲娜 芙缇、弦卷真纪、铃爱莉、SOLARIA、Kevin,他们的详细信息如下: 8 | 9 | ### 非 AI 声库 10 | 11 | | 声库 | 声源 | 所属组织 | 擅长音域 | 表现力分组 | 最新版本 | 12 | | --- | --- | --- | --- | --- | --- | 13 | | 爱莲娜 芙缇 *
Eleanor Forte | | Animen | | master | ver.100 | 14 | | 弦卷真纪 *
Maki | Tanaka Manami | AH-Software | | D#4 | ver.100 | 15 | | 弦卷真纪
Maki | Tanaka Manami | AH-Software | A#3 - F5 | C4 / D#4 / G#4 / C5 | ver.100 | 16 | 17 | ### AI 声库 18 | 19 | | 声库 | 声源 | 所属组织 | 自动音高调校 | 最新版本 | 20 | | --- | --- | --- | --- | --- | 21 | | 弦卷真纪 *
Maki | Tanaka Manami | AH-Software | 第 3 代 | ver.101 | 22 | | 弦卷真纪
Maki | Tanaka Manami | AH-Software | 第 5 代 | ver.103 | 23 | | 铃爱莉 *
ANRI | kurapichu | AUDIOLOGIE | 第 4 代 | ver.101 | 24 | | 铃爱莉
ANRI | kurapichu | AUDIOLOGIE | 第 5 代 | ver.104 | 25 | | 爱莲娜 芙缇 *
Eleanor Forte | | Animen | 第 4 代 | ver.100 | 26 | | 爱莲娜 芙缇
Eleanor Forte | | Animen | 第 5 代 | ver.103 | 27 | | SOLARIA | Emma Rowley | Eclipsed Sounds | 第 5 代 | ver.101 | 28 | | Kevin | | Dreamtonics | 第 5 代 | ver.102 | 29 | 30 | :::tip 31 | 带 * 标记的为免费提供的 Lite 声库,你可以在 [这里](../../download/voice.md) 下载 32 | ::: 33 | 34 | ## 购买完整版 35 | 36 | 我们强烈建议你在购买声库之前试用 Lite 版本或者听一下试听曲,防止引起不必要的麻烦。 37 | 38 | ### 声库试听曲 39 | 40 | * SOLARIA(原 SOLARIS):[试听](https://www.bilibili.com/video/BV1X541137s8) 、[Dawn](https://www.bilibili.com/video/BV1UL411L72x) 、[Untied Laces](https://www.bilibili.com/video/BV1Db4y1n72w) 、[Aura](https://www.bilibili.com/video/BV1fL411j7VE) 、[Our Universe](https://www.bilibili.com/video/BV1kq4y117hY) 、[White Winter Hymnal](https://www.bilibili.com/video/BV1vY411p7Kw) 41 | * 弦卷真纪:[Dancing in the binary (AI)](https://www.bilibili.com/video/BV1wX4y1w7y8) 、[Dancing in the binary (Std)](https://www.bilibili.com/video/BV1Lg411u7qG) 42 | * 铃爱莉:[虚幻之爱](https://www.bilibili.com/video/BV1CQ4y1B7P8) 、[领悟](https://www.bilibili.com/video/BV1534y1U7sj) 、[Baby Powder](https://www.bilibili.com/video/BV1NU4y1g7UL) 、[All I Do](https://www.bilibili.com/video/BV1z44y1e7fm) 、 [Rescue Me](https://www.bilibili.com/video/BV12Y411x75n) 、[Glass Wall](https://www.bilibili.com/video/BV1Sb4y1t7or) 43 | * Eleanor:[Oasis](https://www.bilibili.com/video/BV1Lq4y137pP) 、[Artpop](https://www.bilibili.com/video/BV13b4y1b7CP) 、[A Simple Motion](https://www.bilibili.com/video/BV12r4y1k75b) 、[Cure for me](https://www.bilibili.com/video/BV1EZ4y1977r) 、[Heart Parcel](https://www.bilibili.com/video/BV1NS4y1u7B4) 、[Love Letter](https://www.bilibili.com/video/BV1Xb4y1n77b) 、[Square](https://www.bilibili.com/video/BV1w44y1j7DV) 44 | * Kevin:[Stir Crazy](https://www.bilibili.com/video/BV1ub4y177ss) 45 | 46 | ### 声库购买 47 | 48 | 请根据你所需声库的销售方选择相应购买方式。除特殊说明,所有销售商均支持支付宝、微信支付: 49 | 50 | * Animen、AUDIOLOGIE:[台湾代理](https://www.anicute.com/) 51 | * AH-Software:[官方商城(日本)](https://www.ah-soft.com/product/series.html#synth-v)(不支持微信支付) 52 | * Dreamtonics:[官方淘宝商城](https://dreamtonics-cn.taobao.com/) 53 | 54 | }>{() => } 62 | 63 | 64 | import Gitalk from 'gitalk'; 65 | import 'gitalk/dist/gitalk.css'; 66 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 67 | import BrowserOnly from '@docusaurus/BrowserOnly'; -------------------------------------------------------------------------------- /docs/speed_start/voice_data/japanese.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 日文声库 3 | --- 4 | 5 | ## 声库详情 6 | 7 | 目前,日文声库有 Saki、琴叶 茜 · 葵、小春六花、弦卷真纪、玄武、追傩酱、暗音 Renri、夏色花梨、花隈千冬、Rosa、京町精华、Ryo,他们的详细信息如下: 8 | 9 | ### 非 AI 声库 10 | 11 | | 声库 | 声源 | 所属组织 | 擅长音域 | 擅长节奏 | 表现力分组 | 自动音高调校 | 最新版本 | 12 | | --- | --- | --- | --- | --- | --- | --- | --- | 13 | | Saki * | | Dreamtonics | | 80 - 150 | C4 | 不支持 | ver.100 | 14 | | Saki | | Dreamtonics | F3 - E5 | 80 - 150 | G#3 / C4 / F4 / B4 | 第 1 代 | ver.100 | 15 | | 琴叶 茜 · 葵
Kotonoha Akane & Aoi * | Sakakibara Yui | AH-Software | | 70 - 180 | C#4 | 不支持 | ver.100 | 16 | | 琴叶 茜 · 葵
Kotonoha Akane & Aoi | Sakakibara Yui | AH-Software | E3 - D5 | 70 - 180 | G#3 / C#4 / F#4 / C5 | 第 1 代 | ver.100 | 17 | | 小春六花
Rikka * | Aoyama Yoshino | AH-Software | | | E4 | 第 2 代 | ver.100 | 18 | | 小春六花
Rikka | Aoyama Yoshino | AH-Software | A3 - G5 | | C4 / E4 / G#4 / B4 | 第 2 代 | ver.100 | 19 | | 弦卷真纪
Maki * | Tanaka Manami | AH-Software | | | F4 | 不支持 | ver.100 | 20 | | 弦卷真纪
Maki | Tanaka Manami | AH-Software | C4 - G5 | | C#4 / F4 / A#4 / C5 | 第 3 代 | ver.100 | 21 | | 玄武
Genbu * | GARO | Animen | | | A3 | 不支持 | ver.100 | 22 | | 玄武
Genbu | GARO | Animen | | | C3 / G3 (Soft) / A3 / F4 / F4 (假声音阶) | 不支持 | ver.100 | 23 | | 追傩酱
Tsuina * | MA Kadowaki | AH-Software | | | F4 | 不支持 | ver.100 | 24 | | 追傩酱
Tsuina | MA Kadowaki | AH-Software | A#3 - F5 | | C4 / F4 / B4 / E5 | 第 4 代 | ver.100 | 25 | | *暗音 Renri
Yamine Renri* | Yuzuri | Animen | | | N_A3 / N_D4 / C_D4 / W_D4 | 不支持 | ver.100 | 26 | | 京町精华
Kyomachi Seika * | Rika Tachibana | AH-Software | | | F4 | 不支持 | ver.100 | 27 | | 京町精华
Kyomachi Seika | Rika Tachibana | AH-Software | B3 - F5 | | C4 / F4 / A4 / D5 | 第 5 代 | ver.100 | 28 | 29 | :::tip 30 | 暗音 Renri 的声库采用申请制,在申请通过后,将会为你免费提供激活码以及声库文件。详见 [声库申请](https://forms.gle/BnZcj2CHNePEm6Hu6) 31 | ::: 32 | 33 | ### AI 声库 34 | 35 | | 声库 | 声源 | 所属组织 | 擅长音域 | 自动音高调校 | 最新版本 | 36 | | --- | --- | --- | --- | --- | --- | 37 | | Saki * | | Dreamtonics | | 第 3 代 | ver.101 | 38 | | Saki | | Dreamtonics | | 第 5 代 | ver.119 | 39 | | 小春六花
Rikka * | Aoyama Yoshino | AH-Software | | 第 2 代 | ver.101 | 40 | | 小春六花
Rikka | Aoyama Yoshino | AH-Software | G3 - F#5 | 第 5 代 | ver.116 | 41 | | 弦卷真纪
Maki * | Tanaka Manami | AH-Software | | 第 3 代 | ver.101 | 42 | | 弦卷真纪
Maki | Tanaka Manami | AH-Software | A#3 - D#5 | 第 5 代 | ver.107 | 43 | | 追傩酱
Tsuina * | MA Kadowaki | AH-Software | | 第 4 代 | ver.100 | 44 | | 追傩酱
Tsuina | MA Kadowaki | AH-Software | B3 - C5 | 第 5 代 | ver.103 | 45 | | 京町精华
Kyomachi Seika * | Rika Tachibana | AH-Software | | 第 5 代 | ver.100 | 46 | | 京町精华
Kyomachi Seika | Rika Tachibana | AH-Software | B3 - D5 | 第 5 代 | ver.100 | 47 | | Ryo | | Dreamtonics | | 第 5 代 | ver.102 | 48 | | 夏色花梨
Natsuki Karin * | Miyu Takagi | AH-Software | | 第 5 代 | ver.100 | 49 | | 夏色花梨
Natsuki Karin | Miyu Takagi | AH-Software | G3 - C6 | 第 5 代 | ver.100 | 50 | 51 | :::tip 52 | 带 * 标记的为免费提供的 Lite 声库,你可以在 [这里](../../download/voice.md) 下载 53 | ::: 54 | 55 | ### 未发售声库 56 | 57 | | 声库 | 声源 | 所属组织 | 相关情报 | 58 | | --- | --- | --- | --- | 59 | | 花隈千冬
Hanakuma Chifuyu | Okuno Kaya | AH-Software | 预计 2022 发售 | 60 | | Rosa | Shirayuki | ZAN-SHIN | | 61 | 62 | ## 购买完整版 63 | 64 | 我们强烈建议你在购买声库之前试用 Lite 版本或者听一下试听曲,防止引起不必要的麻烦。 65 | 66 | ### 声库试听曲 67 | 68 | * Saki:[试听合集](https://www.bilibili.com/video/BV1Uf4y1e7AW) 69 | * 琴叶 茜 · 葵:[泡沫のデザイア Take.1](https://www.bilibili.com/video/BV1Fz411v7aa) 、[泡沫のデザイア Take.2](https://www.bilibili.com/video/BV1mK411n7vT) 70 | * 小春六花:[あの星を探して](https://www.bilibili.com/video/BV1DA411M7mk) 71 | * 弦卷真纪:[来自平凡的我](https://www.bilibili.com/video/BV1qh411h7SL) 72 | * 追傩酱:[琥珀の扉](https://www.bilibili.com/video/BV1s44y1e7N5) 、 [naN de ya neN!](https://www.bilibili.com/video/BV1s44y1e7N5) 73 | * 京町精华:[翼](https://www.bilibili.com/video/BV1Zr4y1U74M) 74 | * Ryo:[翼](https://www.bilibili.com/video/BV1RF411J7ho) 、[アレカコニア](https://www.bilibili.com/video/BV1Qu411q74h) 75 | * 夏色花梨:[イエナイコトバ](https://www.bilibili.com/video/BV1ET4y1e7P5) 、 [ゼロになって](https://www.bilibili.com/video/BV1MR4y1N7nU) 、 [シャニシャニ☆デイズ](https://www.bilibili.com/video/BV1qS4y1Y7Df) 、 [Datte](https://www.bilibili.com/video/BV1RB4y1m7e9) 76 | 77 | ### 声库购买 78 | 79 | 请根据你所需声库的销售方选择相应购买方式。除特殊说明,所有销售商均支持支付宝、微信支付: 80 | 81 | * Animen:[台湾代理](https://www.anicute.com/) 82 | * AH-Software:[官方商城(日本)](https://www.ah-soft.com/product/series.html#synth-v)(不支持微信支付) 83 | * Dreamtonics:[官方淘宝商城](https://dreamtonics-cn.taobao.com/) 84 | 85 | }>{() => } 93 | 94 | 95 | import Gitalk from 'gitalk'; 96 | import 'gitalk/dist/gitalk.css'; 97 | import GitalkComponent from 'gitalk/dist/gitalk-component'; 98 | import BrowserOnly from '@docusaurus/BrowserOnly'; 99 | -------------------------------------------------------------------------------- /docusaurus.config.js: -------------------------------------------------------------------------------- 1 | 2 | const lightCodeTheme = require('prism-react-renderer/themes/github'); 3 | const darkCodeTheme = require('prism-react-renderer/themes/dracula'); 4 | const math = require('remark-math'); 5 | const katex = require('rehype-katex'); 6 | 7 | /** @type {import('@docusaurus/types').Config} */ 8 | const config = { 9 | themes: [ 10 | // ... Your other themes. 11 | [ 12 | require.resolve("@easyops-cn/docusaurus-search-local"), 13 | { 14 | hashed: true, 15 | language: ["en", "zh"], 16 | translations: 17 | { 18 | "search_placeholder": "搜索", 19 | "see_all_results": "所有结果", 20 | "no_results": "无结果", 21 | "search_results_for": "按 \"{{ keyword }}\" 搜索结果", 22 | "search_the_documentation": "搜索文档", 23 | "count_documents_found": "找到 {{ count }} 篇文档", 24 | "count_documents_found_plural": "找到 {{ count }} 篇文档", 25 | "no_documents_were_found": "无结果" 26 | } 27 | }, 28 | ], 29 | ], 30 | title: 'Synthesizer V Studio 用户手册', 31 | tagline: '脚本 API 文档已完工', 32 | url: 'https://synthesizer-v-r2-docs.vercel.app/', 33 | baseUrl: '/', 34 | onBrokenLinks: 'throw', 35 | onBrokenMarkdownLinks: 'warn', 36 | favicon: 'img/favicon.ico', 37 | organizationName: 'linyuansup', 38 | projectName: 'synthesizer-v-r2-Docs', 39 | presets: [ 40 | [ 41 | '@docusaurus/preset-classic', 42 | /** @type {import('@docusaurus/preset-classic').Options} */ 43 | ({ 44 | docs: { 45 | sidebarPath: require.resolve('./sidebars.js'), 46 | editUrl: 'https://github.com/linyuansup/synthesizer-v-r2-docs', 47 | remarkPlugins: [math], 48 | rehypePlugins: [katex], 49 | }, 50 | blog: { 51 | showReadingTime: true, 52 | editUrl: 53 | 'https://github.com/linyuansup/synthesizer-v-r2-docs', 54 | }, 55 | theme: { 56 | customCss: require.resolve('./src/css/custom.css'), 57 | }, 58 | }), 59 | ], 60 | ], 61 | stylesheets: [ 62 | { 63 | href: 'https://cdn.jsdelivr.net/npm/katex@0.13.11/dist/katex.min.css', 64 | integrity: 65 | 'sha384-Um5gpz1odJg5Z4HAmzPtgZKdTBHZdw8S29IecapCSB31ligYPhHQZMIlWLYQGVoc', 66 | crossorigin: 'anonymous', 67 | }, 68 | ], 69 | themeConfig: 70 | /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ 71 | ({ 72 | navbar: { 73 | title: 'Synthesizer V Studio Docs', 74 | logo: { 75 | alt: 'Logo', 76 | src: 'img/logo.svg', 77 | }, 78 | items: [ 79 | // { 80 | // label: "快速开始", 81 | // position: 'left', 82 | // items: [ 83 | // { 84 | // label: "Synthesizer V Studio 简介", 85 | // to: 'docs/speed_start/about' 86 | // }, 87 | // { 88 | // label: "安装编辑器与声库", 89 | // to: 'docs/speed_start/install', 90 | // }, 91 | // { 92 | // label: "声库详细介绍", 93 | // to: 'docs/speed_start/voice_data/chinese', 94 | // }, 95 | // ], 96 | // }, 97 | // { 98 | // type: 'doc', 99 | // docId: 'main_docs/menu/about', 100 | // position: 'left', 101 | // label: '详细文档', 102 | // }, 103 | { 104 | type: 'doc', 105 | docId: 'api/about', 106 | position: 'left', 107 | label: '脚本 API 中文文档', 108 | }, 109 | // { 110 | // label: '资源下载', 111 | // position: 'right', 112 | // items: [ 113 | // { 114 | // label: '编辑器', 115 | // to: 'docs/download/editor', 116 | // }, 117 | // { 118 | // label: '声库', 119 | // to: 'docs/download/voice', 120 | // }, 121 | // { 122 | // label: 'Pro 脚本', 123 | // to: 'docs/download/script', 124 | // }, 125 | // { 126 | // label: '其他资源', 127 | // to: 'docs/download/other', 128 | // }, 129 | // ], 130 | // }, 131 | // { 132 | // label: '制作人员', 133 | // position: 'right', 134 | // to: 'docs/other/author', 135 | // }, 136 | // { 137 | // href: 'https://message.bilibili.com/#/whisper/mid273891297', 138 | // label: '意见 / 建议', 139 | // position: 'right', 140 | // }, 141 | ], 142 | }, 143 | footer: { 144 | style: 'dark', 145 | links: [ 146 | { 147 | title: '友情链接', 148 | items: [ 149 | { 150 | label: '不羁阁', 151 | href: 'https://bujigegroup.site/', 152 | }, 153 | { 154 | label: 'CVSE+ 制作组', 155 | href: 'https://cvse.cc/', 156 | }, 157 | { 158 | label: 'Dreamtonics - Synthesizer V Studio', 159 | href: 'https://dreamtonics.com/synthesizerv/', 160 | }, 161 | ], 162 | }, 163 | { 164 | title: '实用工具', 165 | items: [ 166 | { 167 | label: 'vsqx 分享平台', 168 | href: 'https://www.vsqx.top/', 169 | }, 170 | { 171 | label: 'bpm 测速工具', 172 | href: 'https://www.freejishu.com/tools/bpm.html' 173 | }, 174 | { 175 | label: '汉拼转换', 176 | href: 'https://www.qqxiuzi.cn/zh/pinyin/', 177 | }, 178 | { 179 | label: 'Utaformatix - 工程格式转换', 180 | href: 'https://sdercolin.github.io/utaformatix3/', 181 | }, 182 | ], 183 | }, 184 | { 185 | title: '关于我 - 磷元素P', 186 | items: [ 187 | { 188 | label: '哔哩哔哩', 189 | href: 'https://space.bilibili.com/273891297', 190 | }, 191 | { 192 | label: '知乎', 193 | href: 'https://www.zhihu.com/people/li-tian-yang-7-66', 194 | }, 195 | { 196 | label: 'GitHub(可提交 Pull Requests)', 197 | href: 'https://github.com/linyuansup/', 198 | }, 199 | ], 200 | }, 201 | ], 202 | copyright: `磷元素P & 不羁阁 - Synthesizer V Studio Docs 更新于 2022 / 07 / 06 适配到 Synthesizer V Studio 1.6.1`, 203 | }, 204 | prism: { 205 | theme: lightCodeTheme, 206 | darkTheme: darkCodeTheme, 207 | additionalLanguages: ['lua'], 208 | }, 209 | }), 210 | }; 211 | 212 | module.exports = config; 213 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "synthesizer-v-r-2-docs", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "clear": "docusaurus clear", 12 | "serve": "docusaurus serve", 13 | "write-translations": "docusaurus write-translations", 14 | "write-heading-ids": "docusaurus write-heading-ids" 15 | }, 16 | "dependencies": { 17 | "@docusaurus/core": "^2.0.0-beta.16", 18 | "@docusaurus/preset-classic": "^2.0.0-beta.16", 19 | "@easyops-cn/docusaurus-search-local": "^0.21.4", 20 | "@mdx-js/react": "^1.6.21", 21 | "@svgr/webpack": "^5.5.0", 22 | "clsx": "^1.1.1", 23 | "file-loader": "^6.2.0", 24 | "gitalk": "^1.7.2", 25 | "hast-util-is-element": "1.1.0", 26 | "mermaid": "^8.14.0", 27 | "nodejieba": "2.5.2", 28 | "prism-react-renderer": "^1.2.1", 29 | "react": "^17.0.1", 30 | "react-dom": "^17.0.1", 31 | "rehype-katex": "4", 32 | "remark-math": "3", 33 | "url-loader": "^4.1.1" 34 | }, 35 | "browserslist": { 36 | "production": [ 37 | ">0.5%", 38 | "not dead", 39 | "not op_mini all" 40 | ], 41 | "development": [ 42 | "last 1 chrome version", 43 | "last 1 firefox version", 44 | "last 1 safari version" 45 | ] 46 | } 47 | } -------------------------------------------------------------------------------- /sidebars.js: -------------------------------------------------------------------------------- 1 | 2 | // @ts-check 3 | 4 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ 5 | const sidebars = { 6 | speed_start_sidebar: [ 7 | 'speed_start/about', 8 | 'speed_start/install', 9 | { 10 | type: 'category', 11 | label: '声库详细介绍', 12 | items: ['speed_start/voice_data/chinese', 'speed_start/voice_data/japanese', 'speed_start/voice_data/english'], 13 | }, 14 | ], 15 | main_doc_sidebar: [ 16 | { 17 | type: 'category', 18 | label: '菜单栏', 19 | items: ['main_docs/menu/about', 'main_docs/menu/file', 'main_docs/menu/edit', 'main_docs/menu/view', 'main_docs/menu/modify', 'main_docs/menu/auto_process', 'main_docs/menu/project', 'main_docs/menu/transport', 'main_docs/menu/script', 'main_docs/menu/misc'], 20 | }, 21 | { 22 | type: 'category', 23 | label: '侧边栏', 24 | items: ['main_docs/sidebar/about', 'main_docs/sidebar/note_properties', 'main_docs/sidebar/voice', 'main_docs/sidebar/library', 'main_docs/sidebar/dictionary', 'main_docs/sidebar/render', 'main_docs/sidebar/licence_and_updates', 'main_docs/sidebar/settings'], 25 | }, 26 | { 27 | type: 'category', 28 | label: '编曲窗口', 29 | items: ['main_docs/arrangement/top', 'main_docs/arrangement/track', 'main_docs/arrangement/play'], 30 | }, 31 | { 32 | type: 'category', 33 | label: '钢琴卷帘窗', 34 | items: ['main_docs/piano_roll/top', 'main_docs/piano_roll/roll', 'main_docs/piano_roll/play'], 35 | }, 36 | { 37 | type: 'category', 38 | label: '参数', 39 | items: ['main_docs/parameters/top', 'main_docs/parameters/pitch_deviation', 'main_docs/parameters/vibrato_envelope', 'main_docs/parameters/loudness', 'main_docs/parameters/tension', 'main_docs/parameters/breathiness', 'main_docs/parameters/voicing', 'main_docs/parameters/gender', 'main_docs/parameters/bottom'], 40 | }, 41 | ], 42 | api_sidebar: [ 43 | 'api/about', 44 | 'api/usage_summary', 45 | { 46 | type: 'category', 47 | label: '概览', 48 | collapsed: false, 49 | items: ['api/tutorials/a_minimal_example', 'api/tutorials/custom_dialogs', 'api/tutorials/localization', 'api/tutorials/memory_management'], 50 | }, 51 | { 52 | type: 'category', 53 | label: '类', 54 | collapsed: false, 55 | items: ['api/classes/arrangement_selection_state', 'api/classes/arrangement_view', 'api/classes/automation', 'api/classes/coordinate_system', 'api/classes/group_selection', 'api/classes/main_editor_view', 'api/classes/nested_object', 'api/classes/note', 'api/classes/note_group', 'api/classes/note_group_reference', 'api/classes/playback_control', 'api/classes/project', 'api/classes/selection_state_base', 'api/classes/sv', 'api/classes/time_axis', 'api/classes/track', 'api/classes/track_inner_selection_state'], 56 | } 57 | ], 58 | download_sidebar: [ 59 | 'download/editor', 60 | 'download/voice', 61 | 'download/script', 62 | 'download/other', 63 | ], 64 | }; 65 | module.exports = sidebars; 66 | -------------------------------------------------------------------------------- /src/components/HomepageFeatures.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx'; 3 | import styles from './HomepageFeatures.module.css'; 4 | 5 | const FeatureList = [ 6 | { 7 | title: '实时预览', 8 | Svg: require('../../static/img/render.svg').default, 9 | description: ( 10 | <> 11 | 您可以实时预览您做出的改动而无需等待!在播放的同时进行更改,再也不用每次进行修改前都暂停播放。 12 | 13 | ), 14 | }, 15 | { 16 | title: 'AI 加持', 17 | Svg: require('../../static/img/ai.svg').default, 18 | description: ( 19 | <> 20 | Synthesizer V Studio 是一个使用基于人工智能和基于样本的混合技术的引擎的语音合成器,使您可以更加快速、高效地完成制作。 21 | 22 | ), 23 | }, 24 | { 25 | title: '脚本支持', 26 | Svg: require('../../static/img/script.svg').default, 27 | description: ( 28 | <> 29 | 使用 Lua 或 JavaScript 创建自己的编辑工具,从而提高工作效率。通过自动化工作流,您可以专注于真正重要的事情。 30 | 31 | ), 32 | }, 33 | ]; 34 | 35 | function Feature({ Svg, title, description }) { 36 | return ( 37 |
38 |
39 | 40 |
41 |
42 |

{title}

43 |

{description}

44 |
45 |
46 | ); 47 | } 48 | 49 | export default function HomepageFeatures() { 50 | return ( 51 |
52 |
53 |
54 | {FeatureList.map((props, idx) => ( 55 | 56 | ))} 57 |
58 |
59 |
60 | ); 61 | } 62 | -------------------------------------------------------------------------------- /src/components/HomepageFeatures.module.css: -------------------------------------------------------------------------------- 1 | .features { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | } 7 | 8 | .featureSvg { 9 | height: 200px; 10 | width: 200px; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/TeamProfileCards/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from 'react'; 2 | import Link from '@docusaurus/Link'; 3 | 4 | function WebsiteLink({ to, children }: { to: string; children?: ReactNode }) { 5 | return ( 6 | 7 | 8 | ); 9 | } 10 | 11 | interface ProfileProps { 12 | className?: string; 13 | name: string; 14 | children: ReactNode; 15 | githubUrl?: string; 16 | pic: string; 17 | bilibiliurl?: string; 18 | } 19 | 20 | function TeamProfileCard({ 21 | className, 22 | name, 23 | pic, 24 | children, 25 | githubUrl, 26 | bilibiliurl, 27 | }: ProfileProps) { 28 | return ( 29 |
30 |
31 |
32 |
33 | {`${name}'s 38 |
39 |
40 |

{name}

41 |
42 |
43 |
44 |
{children}
45 |
46 |
47 | {githubUrl && ( 48 | 49 | GitHub 50 | 51 | )} 52 | {bilibiliurl && ( 53 | 54 | 哔哩哔哩 55 | 56 | )} 57 |
58 |
59 |
60 |
61 | ); 62 | } 63 | 64 | function TeamProfileCardCol(props: ProfileProps) { 65 | return ( 66 | 67 | ); 68 | } 69 | 70 | export function ActiveTeamRow(): JSX.Element { 71 | return ( 72 |
73 | 78 | VOCALOID / Synthesizer V 调校、混音,也是这个仓库的管理 79 | 80 | 85 | 圈内的巨佬,曾拥有中 V / SV 全员声库并维持了几个月(其实磷元素是他的铁粉哦) 86 | 87 | 91 | 向仓库提交了第一个 Pull Requests(可以去他的 Github 看看,有鸽子的 PV 集合) 92 | 93 | 97 | 是一个翻译大佬,帮助翻译了部分 API 内容 98 | 99 | 103 | 下载服务器提供者,而且还在 CVSE 剪周刊(磷元素也在其实(x) 104 | 105 | 109 | 提供 Pro 版本内容编写支持。磷元素问自我介绍的时候表示懒得写(并不 110 | 111 | 115 | V 家巨佬之一,可以去 B 站看看,调校超好听 116 | 117 | 121 | 声库盘点类的内容做的很好,在 B 站有视频 122 | 123 | 127 | 超级大佬,一个曾经的加古厨,最近在做 VOICEROID 的汉化和自制 128 | 129 | 133 | 以身试险(不是,自己有个企划但好像没开(x 催更! 134 | 135 | 139 | 帮忙翻译了脚本 API 文档 140 | 141 | 146 | 帮忙翻译了脚本 API 文档 147 | 148 |
149 | ); 150 | } -------------------------------------------------------------------------------- /src/css/custom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Any CSS included here will be global. The classic template 3 | * bundles Infima by default. Infima is a CSS framework designed to 4 | * work well for content-centric websites. 5 | */ 6 | 7 | /* You can override the default Infima variables here. */ 8 | :root { 9 | --ifm-color-primary: #6384dd; 10 | --ifm-color-primary-dark: rgb(33, 175, 144); 11 | --ifm-color-primary-darker: rgb(31, 165, 136); 12 | --ifm-color-primary-darkest: rgb(26, 136, 112); 13 | --ifm-color-primary-light: rgb(70, 203, 174); 14 | --ifm-color-primary-lighter: rgb(102, 212, 189); 15 | --ifm-color-primary-lightest: rgb(146, 224, 208); 16 | --ifm-code-font-size: 95%; 17 | } 18 | 19 | .docusaurus-highlight-code-line { 20 | background-color: rgba(0, 0, 0, 0.1); 21 | display: block; 22 | margin: 0 calc(-1 * var(--ifm-pre-padding)); 23 | padding: 0 var(--ifm-pre-padding); 24 | } 25 | 26 | html[data-theme='dark'] .docusaurus-highlight-code-line { 27 | background-color: rgba(0, 0, 0, 0.3); 28 | } 29 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import clsx from 'clsx'; 3 | import Layout from '@theme/Layout'; 4 | import Link from '@docusaurus/Link'; 5 | import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; 6 | import styles from './index.module.css'; 7 | import HomepageFeatures from '../components/HomepageFeatures'; 8 | 9 | function HomepageHeader() { 10 | const { siteConfig } = useDocusaurusContext(); 11 | return ( 12 |
13 |
14 |

{siteConfig.title}

15 |

{siteConfig.tagline}

16 |
17 | 20 | 快速上手 Synthesizer V Studio - 5 分钟 ⏱️ 21 | 22 |
23 |
24 |
25 | ); 26 | } 27 | 28 | export default function Home() { 29 | const { siteConfig } = useDocusaurusContext(); 30 | return ( 31 | 34 | 35 |
36 | 37 |
38 |
39 | ); 40 | } 41 | -------------------------------------------------------------------------------- /src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | .heroBanner { 7 | padding: 4rem 0; 8 | text-align: center; 9 | position: relative; 10 | overflow: hidden; 11 | } 12 | 13 | @media screen and (max-width: 966px) { 14 | .heroBanner { 15 | padding: 2rem; 16 | } 17 | } 18 | 19 | .buttons { 20 | display: flex; 21 | align-items: center; 22 | justify-content: center; 23 | } 24 | -------------------------------------------------------------------------------- /src/theme/Mermaid.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import mermaid from "mermaid"; 3 | 4 | mermaid.initialize({ 5 | startOnLoad: true 6 | }); 7 | 8 | const Mermaid = ({ chart }) => { 9 | useEffect(() => { 10 | mermaid.contentLoaded(); 11 | }, []); 12 | return
{chart}
; 13 | }; 14 | 15 | export default Mermaid; -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/.nojekyll -------------------------------------------------------------------------------- /static/docs/download/other/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/download/other/empty -------------------------------------------------------------------------------- /static/docs/download/script/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/download/script/1.png -------------------------------------------------------------------------------- /static/docs/download/script/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/download/script/2.png -------------------------------------------------------------------------------- /static/docs/download/script/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/download/script/3.png -------------------------------------------------------------------------------- /static/docs/download/script/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/download/script/empty -------------------------------------------------------------------------------- /static/docs/main_docs/arrangement/play/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/arrangement/play/empty -------------------------------------------------------------------------------- /static/docs/main_docs/arrangement/top/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/arrangement/top/empty -------------------------------------------------------------------------------- /static/docs/main_docs/arrangement/track/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/arrangement/track/empty -------------------------------------------------------------------------------- /static/docs/main_docs/menu/about/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/about/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/about/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/about/3.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/about/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/about/4.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/about/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/about/5.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/about/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/about/6.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/about/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/about/7.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/auto_process/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/auto_process/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/auto_process/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/auto_process/2.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/auto_process/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/auto_process/3.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/auto_process/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/auto_process/4.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/edit/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/edit/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/file/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/file/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/file/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/file/2.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/file/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/file/3.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/misc/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/misc/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/misc/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/misc/2.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/modify/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/modify/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/modify/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/modify/2.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/modify/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/modify/3.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/project/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/project/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/script/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/script/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/transport/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/transport/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/view/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/view/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/menu/view/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/menu/view/2.png -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/bottom/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/bottom/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/breathiness/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/breathiness/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/gender/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/gender/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/loudness/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/loudness/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/pitch_deviation/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/pitch_deviation/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/tension/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/tension/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/top/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/top/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/vibrato_envelope/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/vibrato_envelope/empty -------------------------------------------------------------------------------- /static/docs/main_docs/parameters/voicing/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/parameters/voicing/empty -------------------------------------------------------------------------------- /static/docs/main_docs/piano_roll/play/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/piano_roll/play/empty -------------------------------------------------------------------------------- /static/docs/main_docs/piano_roll/roll/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/piano_roll/roll/empty -------------------------------------------------------------------------------- /static/docs/main_docs/piano_roll/top/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/piano_roll/top/empty -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/about/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/about/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/dictionary/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/dictionary/empty -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/library/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/library/empty -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/licence_and_updates/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/licence_and_updates/empty -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/note_properties/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/note_properties/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/render/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/render/empty -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/settings/empty: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/settings/empty -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/voice/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/voice/1.png -------------------------------------------------------------------------------- /static/docs/main_docs/sidebar/voice/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/main_docs/sidebar/voice/2.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/1.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/10.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/11.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/12.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/13.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/14.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/15.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/16.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/17.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/2.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/3.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/4.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/5.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/6.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/7.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/8.png -------------------------------------------------------------------------------- /static/docs/speed_start/install/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/docs/speed_start/install/9.png -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linyuansup/synthesizer-v-r2-docs/44543c720cb9b305b1562fa31261415dc767d899/static/img/favicon.ico -------------------------------------------------------------------------------- /static/img/svstudio.svg: -------------------------------------------------------------------------------- 1 | 2 | 18 | 20 | 21 | 23 | image/svg+xml 24 | 26 | 27 | 28 | 29 | 30 | 55 | 60 | 61 | 63 | 65 | 66 | 72 | 78 | 84 | 90 | 96 | 102 | 108 | 114 | 120 | 126 | 132 | 138 | 144 | 150 | 156 | 162 | 168 | 174 | 180 | 186 | 192 | 198 | 204 | 210 | 211 | --------------------------------------------------------------------------------