作者:龙沅可
哈喽大家好,我是洛天依!继续我们乐理编程 VOCALOID 全套教程。在上一轮我们完整吃透了 VOCALOID 软件全界面、音轨管理、钢琴卷帘底层红线全部实操之后,今天我们补全基础班遗留的最后一块核心乐理碎片:延时音符。依旧沿用全程统一的编程底层世界观,给它钉死精准定义:依靠延音线串联形成的延时长音体系,就是整个 MIDI 音乐世界原生自带的「有序数组(Array)」。
一、编程底层对标:先吃透数组的原始定义
先回归编程里最基础的概念,帮你唤醒认知:数组(Array),是编程里最经典的数据结构:多个数据类型完全统一、属性完全一致的独立基础变量,按照先后顺序,在内存里连续无缝、首尾相接排布占位,整体打包合并成一个完整、连续的独立单元。数组内部的所有元素会叠加自身属性,对外统一视作一个完整模块,不会拆分独立运行。
放到我们已经搭建完毕的 MIDI 乐理体系里,完美 1:1 对应:我们此前已经学透:单个独立的音符方块 = 音乐世界最基础的独立变量,每一个音符自带专属音高、时值、坐标,是最小的不可拆分原子单元。而今天的延时音符(延音线体系),就是把大量同规格的基础音符变量,打包拼接而成的音乐数组。
二、延时音符(延音线)数组完整拆解
1. 数组本体:延音线
简谱、MIDI、VOCALOID 软件里,连接音符的弯弯弧线延音线,就是音乐数组的「打包绑定符号」。它的底层规则完全贴合数组约束:只有音高 100% 完全一模一样的相邻音符,才能被延音线打包绑定,组成延时音符数组。对应编程数组最严格的铁则:数组内所有元素,数据类型必须完全统一。放到乐理里:音高 = 音符的数据类型,音高不同 = 数据类型不匹配,绝对无法塞进同一个延时数组,强行连线只会旋律违和、人声报错。
2. 数组三大核心特性(编程 + 乐理双向闭环)
① 元素同质性强制约束
数组内部所有拼接的音符,音高必须完全一致,无任何偏差。不允许混入高低音、半音偏差音符,就像整数数组里不能塞进字符串变量一样,类型不匹配直接违规。这也是新手乐理误区:很多人会给不同音高的音符画延音线,本质就是跨类型元素强行塞入数组,违反底层数据结构规则。
② 时间轴连续无缝排布
数组内的所有音符元素,在小节代码块的时间轴上,必须首尾相接、无空隙、无休止符间隔,连续排布。对应数组「内存连续占位」的底层逻辑,中间不能插入留白、停顿、其他音符,一旦断开,数组直接拆分失效。
③ 时值总叠加规则
整个延时数组对外的总演唱时长,完全等于数组内部所有单个音符元素的时值全部相加总和。举个最直观的例子:两个同是 C3(中音 do)的四分音符,用延音线连成数组:单个四分音符 = 1 拍,数组 2 个元素叠加,总时值 = 2 拍;原本两个独立的基础音符变量,打包后对外只演唱一次,人声不重复吐字、声音全程连续拖长,完美对应数组「内部元素叠加、对外统一整体运行」的全部逻辑。
三、易混概念区分:数组延时音符 ≠ 附点音符
很多新手会把二者搞混,这里一次性彻底划清边界,对应我们之前学的知识点:
- 附点音符:单个基础音符自带的属性延长,属于单个变量自身的内置属性增强,本质还是独立变量,不属于数组;
- 延音线延时音符:多个独立同高音符拼接打包,属于多变量合并的数组数据结构,二者底层逻辑完全不同。
四、VOCALOID 软件实操底层对应
结合你天天操作的 V4 钢琴卷帘界面,数组逻辑直接落地:
- 你在钢琴卷帘里,画出 ** 两个首尾相接、同一个音高(同 C3)** 的连续音符;
- 软件自动用延音线把二者绑定,也就是完成了数组打包;
- 播放时人声只会吐出开头第一个音符的咬字,后续所有拼接音符全部延时拖长,不会重新发声,全程连续不断;
- 数组总时长自动合并,原本两个独立音符的时值相加,就是最终人声拖长的总时长。
同时结合我们之前的软件红线:V4 禁止重叠音符,而延时数组是同高音符首尾无缝拼接,完全不重叠,完美避开重叠禁忌,属于合法合规的数组结构。
五、全体系知识点再次闭环汇总
至此我们完整的乐理编程全数据结构体系全部补齐,严格按照编程数据类型排序:
- 唱名 = MIDI 世界底层关键字
- 单个独立音符 = 音乐底层基础变量
- 节奏型 = MIDI 官方内置封装函数
- 休止符 = MIDI 静默sleep 空延时函数
- 三大顶级全局变量:调性(钩子函数)、拍号(框架变量)、BPM(运行速度)
- 小节线 = MIDI代码块分隔符
- 简谱 = MIDI 人类手写源代码
- 延时音符(延音线)= 同高音符有序数组(Array)
本课小结
延音线串联的延时音符,本质就是音乐世界的有序数组。它严格遵循数组同类型约束、连续排布、时值叠加的全部底层规则,用打包拼接的方式实现人声长音延时,同时完美兼容此前所有乐理、软件底层规则。