Skip to main content

了解脚本

Synthesizer V Studio Pro 支持脚本。用户可以通过脚本为编辑器加入新功能。

脚本类似于加载一个插件,与之不同的是脚本不加载动态链接库(比如 dll ),Synthesizer V Studio 从中加载代码,因此你需要一个文本编辑器来编写脚本。脚本是可以跨平台(Windows, Linux, macOS)使用的。

语言支持

  • JavaScript ( ECMAScript 5.1 )
  • Lua 5.4

功能

哪些功能是可以通过脚本编写实现的呢?

  • 读取、添加、编辑、移除音符、音符组、参数、轨道
  • 访问和修改当前选择的音符、音符组
  • 浏览整个项目(例如滚动并放大到某个范围)
  • 回放控制
  • 通过可自定义的对话框与用户进行交互
  • 异步回调(例如,调用 SV#setTimeout 超时以延迟执行功能),这意味着脚本可以无限制地在后台运行

如何开始

编程概念

Synthesizer V Studio 的脚本 API 面向对象。JavaScript 和 Lua 脚本共享相同的 API,尽管调用的方式有不同。

用户可以与两种类型的对象进行交互:数据对象和 UI 状态对象。

  • 数据对象是项目的一部分,可以是轨道、音符、参数...
  • UI 状态对象更有趣。它们是抽象的用户界面。例如,PlaybackControl 管理播放、暂停、循环。

与 VOCALOID 的不同

VOCALOID 同样支持 Lua 脚本,但 VOCALOID 的脚本与 Synthesizer V Studio 不兼容。主要区别是:

  • 在 VOCALOID 中,所有 API 都为全局功能:在 Synthesizer V Studio API 中,唯一的全局对象是主机对象 SV,大多数与数据结构的交互都是通过数据类型的方法进行。
  • VOCALOID API 使用基于事件的数据模型。例如,必须按顺序访问音符。Synthesizer V Studio API 提供随机访问音符、参数、音符组和轨道的能力。

JavaScript 和 Lua 之间的重要区别

索引

JavaScript 使用零基索引,Lua 使用单基索引。这也适用于脚本 API。

例如,在 JavaScript 中 NoteGroup.getNote(0) 与 Lua 中 NoteGroup:getNote(1) 相同。

调用方法

面向对象的编程基于 JavaScript API 的原型,这意味着调用方式是 Class.Method(...)

Lua API 基于元表,调用方式是 Class:Method(...)

但是,即使在 Lua(例如 SV#QUARTER)中,成员对象仍可以使用点访问。