MIDI函数
灰姑娘-MIDI的工作原理
MIDI代表M(M)音乐的我仪器的D类数字我界面。它是用于电子仪器和计算机之间通信的标准协议。MIDI提供对单个音调、音调序列、乐器声音、复调、音量和许多其他对音乐感知至关重要的东西的控制。CindyScript MIDI接口提供了一组精简的语句,可轻松灵活地创建音乐和音效。在深入研究这些语句的细节之前,我们将简要概述MIDI的体系结构和功能。这将更容易理解它与灰姑娘的互动。只要可能,我们也会提到如何在CindyScript中访问MIDI语句。
注释、通道和仪器
大致来说,MIDI最基本的功能是将信息发送到音乐合成器并告诉它播放音符。在它最简单的形式中,这条信息只包含一个介于0和127之间的数字,它告诉合成器必须播放什么音符。在标准midi编码中,数字60代表中八度音符C。将此数字增加或减少一对应于半步。因此,61对应于C#,60对应于D,依此类推。下表关联了两个八度音域的音符和数字:
C类 | C类# | D类 | D类# | E类 | F类 | F类# | G公司 | G公司# | A类 | B类 | H(H) | c(c) | c(c)# | d日 | e(电子)# | e(电子) | 如果 | (f)# | 克 | 克# | 一 | b | 小时 | c’ |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 |
用于播放特定音调的相应CindyScript语句为播放音调
试着举例播放音(60)
.
然而,一个音符所包含的音高远远不止是一个特定的音高。它有一种伴奏乐器、一个音量、空间中的某个位置和许多其他特征。其中一些更具静态特性(如乐器),不随音调变化。其他像音量这样的音乐在本质上更具动感,在一段音乐中变化频繁。MIDI允许您以接近音乐特征的方式控制所有这些参数。想象一下弹钢琴的情景。通过敲击键来改变声音音量的主要特征是速度用它来敲击钥匙。有了这个速度,不仅音量发生了变化,而且音调的完整声音特征也发生了变化。MIDI不仅对音量进行建模,而且(完全自动地)对声音特性的变化进行建模。因此,控制卷的参数称为速度而不是体积。在灰姑娘中,此参数由范围从0.0到1.0的修改器控制播放音调(60,速度->0.5)
你得到一个中等音量的C。
在灰姑娘的默认设置中,这样的音符是由类似钢琴的乐器演奏的。还有两个MIDI概念对理解声音的产生至关重要:仪器和通道。单个MIDI设备能够同时播放16名演奏者的整个乐队的乐器。为此,MIDI提供了从0到15的16个声道。每个乐器都可以与特定的乐器相关联,乐器编号从1到128,涵盖了广泛的音乐体验(铜管、木槌、弦乐、钢琴、手风琴、吉他、打击乐器等等)。在CindyScript中,乐器(比如25,原声吉他)可以通过以下方式与频道(比如3)关联中水道(3,仪器->25)
或通过仪器(25,通道->3)
。播放音调的标准频道播放音调(…)
为0,但可以通过修改器进行更改。所以代码
midichannel(3个,仪器->25个)//吉他中通道(2,仪器->12)//振动器音调(60);播放音调(64);播放音调(67,频道->3);播放音调(72,频道->2);
演奏一个C大调和弦,其最低的两个音调由钢琴演奏,其上音符由电颤琴和吉他演奏。每个频道都可以完全多声道使用。所以钢琴同时弹两个音符是没有问题的。
在CindyScript的MIDI实现中,16个通道具有预先指定的乐器,以便方便地访问重要的声音。与通道相关的仪表如下表所示(仪表后面的数字表示仪表编号):
0:原声大钢琴(1) | 8:同步。方波(81) |
1:球座(10) | 9:滚筒组 |
2:振动检波器(12) | 10:FX 3,水晶(99) |
3:Marimba(13) | 11:叮当声(113) |
4:木琴(14) | 12:长笛(74) |
5:木块(116) | 13:低音音响(33 |
6:拨奏弦乐(46) | 14:打击乐器(18) |
7:颤音弦(45) | 15:中音萨克斯管(66) |
音调还有其他各种特性(混响、平衡、压力等),可以通过修改器访问。关于完整的描述,我们参考各种陈述的解释。我们这里只提到最重要的一点:期间。此参数控制再次发布注释的时间(以秒为单位)。所以播放音调(60,持续时间->0.1,速度->1)
生成短而响亮的C。没有显式修饰符的默认持续时间为1秒。
计时和排序
到目前为止,我们只处理一次性播放的音调。在《灰姑娘》中有两种创作旋律的方法。任何一个都可以使用等待(…)
CindyScript或其中一个命令使用内置的MIDI音序器。我们首先简要描述了不依赖于定序器的方法是如何工作的。为此,我们只需通过等待语句来分隔各个注释。
播放音调(60,持续时间->3);等待(500);播放音调(64,持续时间->2.5);等待(500);播放音调(67,持续时间->2);等待(500);播放音调(72,持续时间->1.5);
在上面的例子中,明确给出了时间,以便所有音符在完全相同的时间结束。还可以使用此方法以编程方式生成有趣的旋律(或叮当声)。试用CindyScript中的以下代码(值得输入)
半色调=[61,63,66,68,70,73,75,78,80,82,85,87,90];对于所有(60.90,i,播放音调(i,速度->if(包含(半色调,i),1,0.6),频道->if(包含(半色调,i),3,5));等待(100););
以这种方式生成注释有其缺点。首先,CindyScript代码必须详细描述时间。其次,在等待(…)
语句,其他CindyScript代码的执行被阻止,因为Cindy脚本等待由于这个原因(以及其他几个原因),使用内置MIDI音序器通常要容易得多。
MIDI音序器是MIDI的第二大功能。它是一段程序逻辑,允许以定时方式存储MIDI事件。因此,可以描述和播放任意的音乐片段。MIDI音序器将每个MIDI事件与一个时间戳相关联,该时间戳告诉合成器何时必须播放特定的音符。在CindyScript中,您可以通过播放旋律(…)
语句或通过中间轨道(…);中站()
命令。第一种更简单、更直接,而第二种更强大。我们将在这里简要描述第一种方法。声明plamelary(…)
只需要一个MIDI事件列表。在最基本的形式中,这样的MIDI事件是一个列表,它只包含一个表示音符的数字,然后是另一个表示持续时间的数字。所以一个坏掉的C大调例如,和弦可以编码为:
播放旋律([[60,1],[64,1],[C7,1],[27,4]]);
也可以通过以字符串形式给出的名称而不是数字来访问注释。通过这段代码
播放旋律([[“c”,1],[“e”,1,[“f”,1,[“c”,1],[“e”,1,[“f”,1,[“e”,1],[“e,[“f”,4],[“f“,1],[“e”,1],[“c”,5]],速度->300,仪表->57)
扮演一个非常简单的版本“哦,当圣人”。同样,语句可以用各种修饰语修饰。所以在这里,乐器被选为听起来大致像小号的乐器(真正的小号演奏者请原谅我们)。速度设置为300每分钟心跳次数.A型击败是定序器的基本时间单位。它通常与四分之一音符有关,通常每小节有四拍或三个甜菜(如果你有一个音符)。也允许节拍的分数。它们可以用来表示八个音符、三连音等等。
音序器的Syntherella接口能够在相当高的水平上表达大量音乐内容。详细信息将在后面解释。
打击
灰姑娘使用预定义的设置通用MIDI它是合成仪器的特定集合。在通用Midi中有一个特殊的约定(尽管非常有用)。频道10起着特殊的作用。它是为打击乐器预留的,可用于实现鼓套。所以,每当你使用第十频道时,你必须意识到这个频道有着特殊的含义。在这种情况下,通常表示音符的MIDI数字与特定的打击乐器相关(这里并非使用所有128个键)。下表概述了与按键相关的仪器。
35低音鼓2 | 47汤姆中部1 | 59骑行钹2 | 71短笛 |
36低音鼓1 | 48高汤姆2 | 60高邦戈 | 72长笛 |
37侧斗杆 | 49撞击钹1 | 61低邦戈 | 73短吉他 |
38响弦鼓1 | 50高汤姆1 | 62静音高音Conga | 74长吉他 |
39手拍 | 51骑行钹1 | 63高开康加 | 75只Claves |
40响弦鼓2 | 52中国Cymbal | 64低康加 | 76高木块 |
41低汤姆2 | 53骑行铃 | 65高音阶 | 77低木块 |
42闭式Hi-hat | 54铃鼓 | 66低木材 | 78静音Cuica |
43低汤姆1 | 55溅水钹 | 67高Agogo | 79打开Cuica |
44踏板Hi-hat | 56牛铃 | 68低Agogo | 80静音三角形 |
45中汤姆2 | 57撞击钹2 | 69卡巴萨 | 81开口三角形 |
46打开Hi-hat | 58振动拍击 | 70马拉卡斯 |
|
通过这种方式,可以相对容易地创建一个与音乐伴奏的节奏音轨。打击乐器对于在其他灰姑娘应用中创建声音效果也非常有用。例如,如果您使用辛迪实验室要创建乒乓球游戏,可以使用木块(图例76和77),以在击球时创建点击效果。
下面的代码显示了使用定序器实现Rock节奏的简单方法。注意,此程序还使用“转到”
中的语句播放旋律(…)
将曲目倒回开头。
播放旋律(频道->9,速度->500,循环->8,[[35,3],[35,3],[35,3],[35,6],[35.1],[“goto”,0],//低音鼓[-1,2],[42,4],[42.4],[C2,4],[22,4]、[42,2]、[“goto”,0],//高帽子[-1,4],[38,8],[38.4],[“goto”,0],//陷阱[59,4],[59,4],[59.4],[59,4],[“goto”,0],//骑钹[-1,13],[76,1],[62,1],[-1,2],[“goto”,0]//打击乐器]);
在上面的代码片段中,几个打击乐器被叠加在同一个“旋律”中,形成一个复杂的节奏模式。注释-1
用作暂停。
曲目和音乐片段
我们将通过创作一段由旋律部分和鼓点图案组成的小音乐来结束我们小小的入门之旅。MIDI可以为音序器接受许多不同的曲目。每个曲目可以与一个乐队的一名演奏者关联。CindyScript提供了一个声明中间轨道(…)
无提示地将曲目添加到音序器而不立即播放。所有添加的曲目都可以通过调用中站()
命令。下面的代码展示了如何将我们的摇滚节奏与“哦,当圣人”的旋律结合起来,形成这首传统音乐的摇滚版本。有一些特色菜一会儿就要解释了。
中通道(3,仪器>57);midiaddtrack(通道->3,通道->1,[“c”,1],[“e”,1,[“f”,1),[“g”,[“c”,1],[“e”,1,[“f”,1,[“e”,1],[“e,[“f”,4],[“f“,1],[“e”,1],[“c”,5]]);中点轨迹(通道->9,轨迹->2,拉伸->1/2,偏移->3,重复->8,[[35,3],[35,3],[35,3],[35,6],[35.1],[“goto”,0],//低音鼓[-1,2],[42,4],[42.4],[C2,4],[22,4]、[42,2]、[“goto”,0],//高帽子[-1,4],[38,8],[38.4],[“goto”,0],//陷阱[59,4],[59,4],[59.4],[59,4],[“goto”,0],//骑钹[-1,13],[76,1],[62,1],[-1,1]//打击]);中站(速度->250);
因此,原则上,我们将两首曲目添加到音序器中(一首用于旋律,另一首用于节奏),然后使用中站()
。有一些关于时间和位置的小问题可以使用修改器解决。首先,我们将上一个例子中的“哦,当圣人”曲目视为原样。我们将其与音序器的曲目1相关联。将另一个例子中的摇滚节奏模式添加到第2首曲目中会带来几个问题。首先,时机不对。旋律中的节拍是节奏轨道中节拍的两倍长。我们可以使用修改器来调整拉伸->1/2
同样地,我们可以将节奏轨道的位置数减半。第二个“哦,当圣人”有一些拾音器(前三个)。所以节奏轨道不应该立即开始。我们可以使用偏移量->3
最后,我们需要一起重复八次节奏模式。我们这样做是通过说重复->8
.
单音铃声
我们首先从那些用来生成单音的语句开始。一些音调特征可以通过修饰语处理。
播放音调:播放音调(<int>)
描述:这是创建音调的最简单方法。当调用此语句时,它会创建一个立即播放的音调。如果没有修改器,则使用当前默认通道及其关联工具。默认持续时间为1秒。默认速度为0.5
.
示例:以下代码播放一个断开的C大调和弦。
音调(60);等待(1000);播放音调(64);等待(1000);音调(67);等待(1000);播放音调(72,持续时间->4);
修改人:该命令有几个修改器,其中大多数是自解释的。
修饰符 | 参数 | 效果
|
速度 | 0.0 ... 1 | 音调的音量(按钢琴键的速度) |
放大器 | 0.0 ... 1 | 与…相同速度
|
期间 | <真实> | 声音的持续时间(秒) |
通道 | 0..15 | 选择播放的频道 |
混响 | 0.0 ... 1 | 混响效应 |
平衡 | -1.0 ... 1 | 左/右色调全景图 |
弯曲 | -2.0 ... 2 | 将音调调上下转换为整个音符 |
由弯曲
修饰语音符的音高可以上下两个半步改变。一个弯曲单位对应于一个半步。
如果持续时间设置为0(或更小),则音调将无限期保持,并且仅由停止音(…)
声明。
停止音调:停止音(<int>)
描述:立即停止指定按键的音调。如果音调以无限长开头,这可能会很有用。
播放指定频率的音调:播放频率(<真实>)
描述:此语句与播放音
然而,在这种情况下,频率(Hz)由实际参数明确给出。有时使用更面向物理的功能可能有用游戏(…)
而不是。
示例: 播放频率(440)
使用当前选择的频道和乐器播放440 Hz的音调。这个播放频率
这种说法对于模拟非欧洲文化的规模特别有意思,例如在印度拉加斯音乐或爪哇加美拉音乐中就需要这种文化。
修改人:修饰符与播放音调(…)
。然而弯曲
修饰符在这里没有效果。
旋律
灰姑娘MIDI接口提供了一套丰富的指令,用于处理顺序音乐音符的播放。原则上,每个音符(或者更普遍地说,每个MIDI事件)都与特定的时间戳相关联,该时间戳告诉音序器何时必须播放该音符。将要播放的注释添加为CindyScript列表的元素。每个音符本身是一个小列表,由整数或字符串组成,表示要播放的音符及其持续时间。控制事件,如乐器的改变,或音量的改变,也是这个旋律列表的元素。它们还与时间戳相关联。由于所有旋律处理CindyScript函数都通过事件列表引用相同的旋律描述,因此我们首先解释此旋律描述语言。
旋律描述
CindyScript中的旋律由事件列表描述。每个事件都对应于必须播放的音符、控制命令(如所选乐器的选择)或描述下一个事件添加位置的定位命令。最简单的旋律可能是一系列音调。以下代码描述了如何调用简单的C-major scale:
播放旋律([[“C”,1],[“D”,[“G”,1],[“A”,1[“H”,1][“c”,5]])
或者,同样的音阶也可以用相应的MIDI整数而不是名称来描述音符:
播放旋律([[60,1],[62,1],[24,1],[P5,1],/67,1],+69,1],/71,1],[72,5]])
短列表中描述单个音符的第二个数字是它的持续时间。持续时间的长度以跳动。默认情况下,如果播放旋律,则以60的速度播放每分钟拍数。如有必要,可以通过中频(…)
命令。
在内部,当旋律大致播放时,会发生以下情况。当旋律开始时,音序器被设置为其开始位置。第一个音符被播放,音序器的位置按音符的持续时间前进。然后播放下一个音符,定序器前进第二个音符的持续时间,以此类推。在内部,每个节拍被细分为多个微观步骤,以便对每个音符进行精确定位。事实上,节拍被细分为240=5*4*2*2*2微步。这允许准确的八、十六、三十秒、三胞胎和五胞胎的位置。对于所有实际应用来说,这些微步是如此精细,以至于人们可以简单地将其视为一个连续统。因此,持续时间可以简单地用实数表示。微位置的近似值是自动完成的。在下面的代码中对于音阶的每个音调,仍然使用完整的节拍。然而,通过细分每个节拍来重复这些音符。
播放旋律([[“C”,1],[“D”,1/2],[“D“,1/2],[“E”,1/3],[“E,[“F”,1/4],[“F,[“G”,1/6],[“G,[“A”,1/8],[“A,[“A”,1/8],[“A,[“H”,1],[“c”,5]])
我们现在将描述旋律描述语言的不同元素。
音调和和弦:我们已经看到,音调可以编码为整数或字符串名称。因此,播放单个音符具有以下格式[<键>,<持续时间>]
,其中<键>
表示注释(以整数或字符串形式给出)和<持续时间>
其持续时间为正实数。下表描述了名称如何与中八度音调相关联。
C类 | Cis公司 | 设计 | D类 | 数字化信息系统 | 锿 | E类 | F类 | Fis公司 | Ges公司 | G公司 | Gis公司 | 作为 | A类 | 艾斯 | B类 | H(H) | c(c) |
48 | 49 | 49 | 50 | 51 | 51 | 52 | 53 | 54 | 54 | 55 | 56 | 56 | 57 | 58 | 58 | 59 | 60 |
下一个更高的倍频程对应于:
c(c) | 顺式 | des(目标) | d日 | 数字化信息系统 | 锿 | e(电子) | 如果 | 飞行情报系统 | 通用电气公司 | 克 | 地理信息系统 | 作为 | 一 | 人工智能 | b | 小时 | c’ |
60 | 61 | 61 | 62 | 63 | 63 | 64 | 65 | 66 | 66 | 67 | 68 | 68 | 69 | 70 | 70 | 71 | 72 |
低八度音阶的音调可以通过附加一个素数进一步降低八度。例如C英寸
对应于MIDI音符24。类似地,高八度音阶的音调也可以通过附加一个素数来提高八度。所以c“”
对应于96。
也可以用和弦代替音符。为此,和弦中的音符键必须收集在列表中。所以和弦的格式是[[<key1>、<key2>、<key3>、…]、<duration>]
。以下示例显示了播放日益复杂的和弦的旋律列表。
播放旋律([[“C”,1],[[“C”,“E”],1],[[“C”,“E”,“G”],1],[[“C”、“E”、“G”、“C”]、5]])
最后,可以使用数字-1
或字符串“P”
或“p”
作为停顿。
动态和短语:还有一些旋律事件可以用来影响以下音符的动态或措辞。对应于单个字符串或带有键/值对的列表。目前执行了以下声明:
-
“ppp”
:钢琴弱音 -
“pp”
:弱音 -
“p”
:钢琴 -
“mp”
:中音钢琴 -
“mf”
:梅佐福尔特 -
“f”
:复地 -
“ff”
:最强音 -
“fff”
:强音 -
“>”
:强调下一个音符 -
“断奏”
或“st”
:很快地弹奏以下音符(断奏风格) -
“连奏”
或“乐”
:长时间播放以下音符(连奏风格) -
[“速度”,<真实>]
:设置音量。<真实>
介于0.0和1.0之间。
下面的代码以最低音断奏开始,以响亮的连奏结束,播放音阶:
播放旋律([[“st”],[“pp”],[C”,1],[D“,1],[“f”],[“G”,1],[”A“,1]
定位:音序器内部有一个指针,指示添加注释的位置。通常,添加注释时,指针会根据注释的持续时间向前移动。然而,也有一些语句允许直接定位指针,从而影响添加下一个注释的时间戳。添加轨迹时,指针被设置到该位置0.通过两种说法“转到”
和“戈尔”
指针可以移动到绝对位置或相对位置。具体语法如下:
-
[“转到”,<真实>]
:将指针设置到该位置<真实>
从旋律开始测量。禁止使用负绝对位置。 -
[“gt”,<真实>]
:等同于“转到”
. -
[“戈尔”,<真实>]
:将指针设置到由of集合相对计算的位置<真实>
到实际位置。这个<真实>
可能是负数。然而,导致负绝对位置的移动是被禁止的。 -
[“gr”,<真实>]
:等同于“戈尔”
.
下面的代码通过使用转到(…)
声明。
播放旋律([[“c”,1],[“e”,[“g”,1],[“a”,1[“c'”,1][“e'”,1',[“a'”,4],],速度->100)
还有更先进的方法来控制添加注释的时间。它们更接近于通常的音乐符号。有四种说法:
-
["||:"]
:开始达卡波. -
[":||"]
:结束达卡波. -
["1."]
:第一个支架。 -
[“2.”]
:第二个支架。
使用这些命令,可以很容易地通过重复直接传送纸张笔记。以下是“噢,苏珊娜”中的一行
可以按照以下方式在CindyScript中编码为旋律:
播放旋律([[“c”,.5],[“d”,.5],[“||:”],[“e”,1],[”g“,1],[“g”,1],[“e”,1][“c”,1.5],[(“d”,.5],[“1.”],[“e”,1],[“e”,1],[“d”,1],[“c”,1],[“d”,3],[“c”,.5],[“d”,.5][“:||”],[“2.”],[“e”,1],[”e“,1]],速度->200)
入侵控制:
最后,还有一些语句可以影响旋律中的声音和乐器的选择。这样,就可以在播放旋律时通过旋律列表中的控制命令更改乐器。命令如下:
-
[“频道”,<int>]
:更改当前用于旋律的频道(0…15)。 -
[“ch”,<int>]
:等同于通道
. -
[“仪器”,<int>]
:更改与通道关联的仪器(1…128)。 -
[“inst”,<int>]
:等同于工具
. -
[<int>,<int>
:此语句(仅由四个整数组成,可访问乐器的其他midi控件(有关详细信息,请参阅midi手册)。第一个数字对控制器进行编码,第二个数字对其应用的信道进行编码,最后两个数字是数据字节。
当轨道重新启动时,仪器将重置为其原始值。
我们上面描述的MIDI控制语言现在构成了所有其他MIDI函数的基础。
播放旋律:播放旋律(<list>)
描述:我们已经使用了播放旋律(…)
在前面所有关于旋律语言的例子中。最直接的方法是演奏一段立即开始的旋律。该列表假定为旋律语言中描述的旋律。正在调用播放旋律(…)
将列表添加到音序器并立即播放。重要的是,当旋律被调用时,所有其他曲目都会从音序器中删除。
修改人:此外,该语句具有全局设置通道、仪器、速度等的修饰符。
修饰符 | 参数 | 效果
|
通道 | 0..15 | 选择播放的频道 |
工具 | 1 ... 123 | 选择特定仪器 |
速度 | <真实> | 每分钟拍数的速度 |
环 | 0,1,2,3,4 ... | 旋律的重复 |
开始 | <真实> | 起始位置(拍数) |
修改器循环告诉音序器在旋律结束后倒带并重新开始。此修饰符中的数字指定回放的频率。所以循环->3
具有播放旋律的效果四次。设置循环->-1
被解释为无限循环。如果调用此命令,则必须通过添加新的(可能是空的)旋律来停止旋律:播放旋律([])
。或者中卫()
可以使用命令。
向音序器添加曲目:midiaddtrack(<列表>)
描述:与…对比播放旋律(…)
此语句将旋律添加到音序器中,但不会立即播放。通过此操作,可以先通过添加几个音色构建更复杂的乐曲,然后在乐曲完成后开始播放。启动定序器是通过中站()
命令。如果在音序器已在运行时添加曲目,则音序器不重新启动。无声地,轨道被新轨道取代。通过这种方式,可以构建这样的场景:播放的旋律根据特定的算法过程发生变化。此外,该命令有几个修改器,允许更改与定序器定时相关的添加轨迹的定时。因此,旋律可以被拉伸、收缩或变换。详细说明如下。
修改人:该函数支持以下修饰符:
修饰符 | 参数 | 效果
|
通道 | 0..15 | 选择播放的频道 |
工具 | 1 ... 123 | 选择特定仪器 |
速度 | <真实> | 每分钟拍数的速度 |
轨道 | 0..10 | 选择音序器的音轨 |
开始 | <真实> | 起始位置(节拍) |
模式 | “添加”、“替换”、“附加” | 添加轨迹的模式 |
伸展 | <真实> | 在添加的旋律片段中扩展拍长的因素(相对于音序器) |
抵消 | <真实> | 相对于音序器移动添加的旋律片段的偏移。 |
重复 | <真实> | 多久加一次旋律 |
一些修饰语需要进一步解释。灰姑娘总共有16首曲目,名为0到15。每首曲目都像一个独立的声音。添加旋律的曲目可以通过轨道
修改器。
添加曲目时模式
修改器指定当前轨迹是否被新轨迹替换,是附加到现有轨迹的末尾,还是添加到现有轨迹(具有时间戳覆盖)。
新旋律的计时可以根据音序器中已有的曲目进行调整。由伸展
修饰语可以指定一个数字,作为旋律中所有节拍规格的一个因素。设置拉伸->0.5
以原速度的两倍播放曲目。类似地抵消
可以指定添加新轨迹的位置。设置偏移量->8
表示音轨在音序器的前八拍之后开始。最后,repeat指定连续添加轨迹的频率。使用伸展
,抵消
和重复
在为现有旋律添加鼓型时非常有用。
启动定序器:中站()
描述:此命令启动MIDI音序器。曲目必须由中间轨道(…)
命令。
修改器:修饰符与播放旋律(…)
命令。允许使用以下修饰符。
修饰符 | 参数 | 效果
|
速度 | <真实> | 每分钟拍数的速度 |
环 | 0,1,2,3,4 ... | 旋律的重复 |
开始 | <真实> | 起始位置(节拍) |
停止定序器:中卫()
描述:此命令立即停止MIDI音序器。
设置定序器的速度:midispeed(<真实>)
描述:通过此命令,可以更改音序器的播放速度。速度由实数给出,类似于每分钟的拍数。默认情况下,速度设置为60,相当于每秒一拍(对于大多数音乐作品来说,这是一个较慢的速度)。如果定序器已经在运行,也可以更改速度值。通过这种方式,可以(例如)将速度与控制速度的点的位置相关联。
请求定序器的速度:midispeed()
描述:此语句返回序列器的当前速度。
设置定序器的位置:中间位置(<真实>)
描述:通过此命令,可以将定序器的位置设置为特定位置。通过这种方式,CindyScript程序可以显式控制例如正在播放的乐曲的入口点。
请求序列器的位置:中置()
描述:此命令返回序列器的实际位置。当序列器运行时,该值持续变化。
声音特性
使用以下CindyScript语句,您可以选择默认乐器,将其与频道关联,并影响其声音特性。
选择乐器:仪器(<int>)
描述:使用此命令,您可以将仪器与通道关联。如果未指定频道,则使用默认频道。每个仪器由范围为1到128的整数标识。仪器和整数之间的相关性将在下一节中解释工具名称()
。如果修改器指定了显式通道,则相应通道的仪器将被更改。
修改人:此函数支持影响乐器音调特征的各种修改器。
修饰符 | 参数 | 效果
|
速度 | 0.0 ... 1 | 音调的音量(按钢琴键的速度) |
期间 | <真实> | 声音的持续时间(秒) |
弯曲 | -2.0。。。2 | 将音调调上下转换为整个音符 |
通道 | 0..15 | 选择播放的频道 |
混响 | 0.0 ... 1 | 混响效应 |
平衡 | -1.0 ... 1 | 左/右色调全景图 |
这里是修改器速度
和期间
影响音调播放的默认速度(音量)和持续时间(例如播放音调(…)
).
示例:下面的代码在球座然后是小号上响亮的短音,最后是钢琴上的长音(中等音量):
仪器(10,速度->0.2);音调(96);等待(1000);仪器(57,持续时间->0.1,速度->1);音调(60);等待(1000);仪器(1,持续时间->2,速度->.5);音调(60);
获取可用仪器:工具名称()
描述:此语句返回计算机上可用的所有仪器名称的列表。在General MIDI数据库(可能已经预装在您的机器上)中,您手头有以下乐器。
钢琴: | 低音的: | 里德: | 合成效果: |
1架原声大钢琴 | 33低音 | 65高音萨克斯 | 97 FX 1(雨水) |
2明亮的原声钢琴 | 34电贝司(手指) | 66中音萨克斯 | 98 FX 2(配乐) |
3电动大钢琴 | 35电贝司(皮克) | 67男高音萨克斯 | 99 FX 3(水晶) |
4本基琴 | 36个Freless低音 | 68巴里通萨克斯 | 100 FX 4(大气) |
5电钢琴1 | 37拍低音1 | 69双簧管 | 101 FX 5(亮度) |
6电钢琴2 | 38拍子低音2 | 70英国号角 | 102 FX 6(地精) |
7竖琴 | 39合成器低音1 | 71巴松管 | 103 FX 7(回声) |
8克拉维 | 40合成低音2 | 72单簧管 | 104 FX 8(科幻) |
|
彩色打击: | 串: | 管道: | 民族的: |
9西莉斯塔 | 41小提琴 | 73短笛 | 105西塔 |
10球座 | 42中提琴 | 74长笛 | 106班卓 |
11音乐盒 | 43大提琴 | 75记录仪 | 107沙米森 |
12振动电话 | 44低音 | 76长笛 | 108千托 |
13木琴 | 45根颤音弦 | 77吹瓶 | 109卡林巴 |
14木琴 | 46个拨奏弦乐 | 78沙八町 | 110袋管 |
15管状钟 | 47管弦竖琴 | 79哨声 | 111提琴 |
16扬琴 | 48定音鼓 | 80罗卡琳娜 | 112沙奈 |
|
器官: | 合奏: | 合成主管: | 打击乐器: |
17器官 | 49弦乐合奏1 | 81导线1(方形) | 113叮当声 |
18打击乐器 | 50弦乐合奏2 | 82导线2(锯齿) | 114 Agogo Bells公司 |
19摇滚风琴 | 51合成字符串1 | 83导联3(calliope) | 115钢卷筒 |
20教堂风琴 | 52合成字符串2 | 84铅4(chiff) | 116木块 |
21芦苇风琴 | 53声音Aahs | 85铅5(charang) | 117太古鼓 |
22手风琴 | 54语音Oohs | 86导联6(语音) | 118旋律汤姆 |
23口琴 | 55合成语音 | 87铅7(五分之一) | 119合成鼓 |
24探戈手风琴 | 56支管弦乐队 | 88导联8(低音+导联) | 120反向钹 |
|
吉他: | 黄铜: | 合成垫: | 声音效果: |
25原声吉他(尼龙) | 57喇叭 | 89 Pad 1(新时代) | 121吉他Fret噪音 |
26原声吉他(钢制) | 58长号 | 90衬垫2(温热) | 122呼吸噪音 |
27电吉他(爵士乐) | 59图巴 | 91衬垫3(多合成) | 123海滨 |
28电吉他(干净) | 60静音喇叭 | 92 Pad 4(唱诗班) | 124鸟推 |
29电吉他(静音) | 61法国喇叭 | 93垫5(弓形) | 125电话铃声 |
30过度驱动吉他 | 62黄铜部分 | 94衬垫6(金属) | 126直升机 |
31失真吉他 | 63合成黄铜1 | 95垫7(光环) | 127掌声 |
32吉他谐波 | 64合成黄铜2 | 96 Pad 8(扫描) | 128枪击 |
选择频道:中间通道(<int>)
描述:此命令选择用于播放音调的当前默认频道播放旋律(…)
或播放音调(…)
。通过修改,可以更改所选频道的乐器和音调特征。
修改人:这里的修饰符与工具
修改器。
修饰符 | 参数 | 效果
|
速度 | 0.0 ... 1 | 音调的音量(按钢琴键的速度) |
期间 | <真实> | 声音的持续时间(秒) |
弯曲 | -2.0 ... 2 | 将音调调上下转换为整个音符 |
工具 | 0..15 | 选择播放的乐器 |
混响 | 0.0 ... 1 | 混响效应 |
平衡 | -1.0 ... 1 | 音调的左/右全景 |
设置频道音量:中体积(<真实>)
描述:通过此语句,可以控制频道MIDI声音的总音量。该参数是0.0…1.0范围内的实数。通常,此语句会影响默认频道的音量。但是,通过修改器可以选择受影响的通道。
修改人:
修饰符 | 参数 | 效果
|
通道 | 0 ..15 或“全部” | 所选频道。 |
通道号可以显式指定,也可以使用“全部”
所有通道都会受到影响。
设置通道控制器:midicontrol(<int>,<int>)
描述:通过此设置通道的特定MIDI控制器。第一个参数指定控制器的编号(0..127),第二个参数(0..128)指定控制器的数据集。控制器可能会影响以下特性混响,平衡以及仪器特有的其他特性。数据值的取值范围为0..127。有关更多详细信息,请参阅通用MIDI手册。
修改人:修饰符用法类似于中位数
.
三块小碎片
在关于MIDI的最后一节中,我们想通过三个小但更高级的示例演示CindyScript MIDI的使用。请用户将这些示例作为进一步自己实验的起点。
键盘钢琴
在这个例子中,我们想要编程一架钢琴,它可以通过敲击计算机键盘的键来演奏。为此,只需将以下代码放入定时器滴答在CindyScript代码窗口的事件中,按灰姑娘视图中出现的播放按钮并播放。
对=[[65,60],[83,62],[68,64],[70,65],[71,67],[72,69],[74,71],[75,72],[76,74],[59,76],[222,77],[92,79],[87,61],[69,63],[84,66],[90,68],[85,70],[79,73],[80,75],[93,78]];l=keydownlist();对于所有(对,p,如果(包含(l,p1)&!包含(ol,p1),播放音调(p2,持续时间->-1,速度->0.5);if(包含(ol,p1)&!包含(l,p1),stoptone(p2)););ol=l;
该代码使用CindyScript运算符keydownlist()
该操作员给出了此时按下的所有(计算机内部)按键代码的列表。列表对
将按键代码与必须播放的音符相关联。这个对于所有人
循环检查每个可能被点击或释放的键,并使用播放音调
和叠石
。在当代计算机上,此代码没有延迟,可以用作真正的工具。
有声乒乓球
我们的下一个示例非常小,只使用了一个播放音调(…)
语句放在正确的位置。我们想制作一款带有音效的乒乓球游戏。使用物理模拟设备辛迪实验室很容易构造一个物理上合理的交互式Ping-Pong表。表的边界由物理保镖。在Inspector中,每个保镖都可以与一个脚本关联,该脚本在重物撞击保镖时执行。在这里,我们只需放置一个播放音调
产生“咔哒”声的语句。就是这样。
尽情享受吧!
最后,我们的最后一个示例演示了定序器计时的精度。它只是演奏著名的查理·帕克爵士曲调的开头鸟类学(查理斯的昵称是鸟这个头衔指的是他的昵称)。爵士乐的一个典型特征是它的绝佳时机,摇摆感。这来自于音符相对于基音节拍的某种合理变化。在下面的示例中,对变量进行编码克
用作“Swing参数”。它将每一秒音符的开始部分与节拍进行切换。联想是有益的克
移动点在0.0到1.0之间。通过这种方法,可以很容易地调整曲调所使用的摆动感觉量(在0.5到0.7之间,听起来很合理)。
g=.6;美尔=[[62,2g],[67,2+g],69,2g][71,2+g],[72,2-g],[74,2+g],[71,2g],[72,2+g],[74,2g][71,2+g],[67,3],[-1,9],[62,2g],[67,2+g],[69,2g],[70,2+g],[72,2g',[74,2+g/,[76,4],[77,4],[67,2-g],[69,2+g],[70,8],[74,2-g],[72,2+克],[69,4],[65,2g],[70,2+克],[68,2g,[692,2+g],[65,13],[-1,3]];转鼓=44;节拍=[[-1,2-g]];应用(1..11,节拍=节拍++[[-1,4],[鼓,4]]);节拍=节拍++[[-1,4],[鼓,4-2+g]];中间轨道(mel,通道->2,轨道->2);中点轨迹(节拍,通道->9,轨迹->1,速度->.5);中站(速度->700);