Kontakt Script教程(三) – 流程控制

目录
[隐藏]

在上一篇教程里,我们学习了Kontakt Script中的基本回调函数和指令。在这一节里我们将学习非常重要的一个模块——流程控制。流程控制用于改变程序的运行顺序。常见的流程控制指令有if、select、exit等。

布尔运算

在Kontakt Script中,布尔运算主要用于值大小的判断。布尔运算被用在if和while语句中,布尔运算返回True(真)和False(假)的信息。下表给出了布尔运算的类型。

x > y                     大于
x < y                     小于
x >= y                  大于等于
x <= y                  小于等于
x = y                     等于
x # y                     不等于
in_range(x,y,z)    当x处于y和z之间时(x∈[y,z]即y≤x≤z)
not a                    a不成立
a and b                a与b同时成立
a or b                   a或b单独成立

条件语句

on init
    message ("")     {清除之前的输出}
end on

on note
    select($EVENT_VELOCITY)    {对$EVENT_VELOCITY进行选择}
        case 1 to 40     {$EVENT_VELOCITY∈[1,40]时}
            message("Script message: key struck SOFT") 
        case 41 to 100     {$EVENT_VELOCITY∈[41,100]时}
            message("Script message: key struck MEDIUM") 
        case 101 to 126     {$EVENT_VELOCITY∈[101,126]时}
            message("Script message: key struck HARD") 
        case 127     {$EVENT_VELOCITY=127时}
            message("Script message: key struck BRUTAL")
    end select     {select语句结束}
end on

on release
    if ($EVENT_NOTE = 60)     {进行判断,如果释放的是中央C}
        message ("You released middle C!")     {如果是则输出消息}
    else     {否则}
        message ($EVENT_NOTE)     {输出音符序号}
    end if     {if判断结束}
end on

上述代码可能比较长,它涉及到了之前学习的init、note和release函数,还涉及到了message指令。这段代码用到了我们即将学习的if和select语句和$EVENT_NOTE变量。

if…else…end

if是一个非常重要的条件语句,它用于判断某个条件是否成立,并作出成立与不成立的反应。它的语法结构如下:

if (条件)
    条件成立的语句
else
    条件不成立的语句
end if

其中else是一个可以省略的语句,它只在需要的时候使用。else中也可以继续嵌套条件语句,如:

if (条件)
    条件成立的语句
else
    if (条件)
        条件成立的语句
            else
                条件不成立的语句
                    ...
    end if
end if

但是过多的if…else…end嵌套会让代码变得难以读懂,所以在涉及到这种情况的时候我们往往选用select语句。

select

select语句与if语句类似,但是它可以有任意数量的分支语句。select语句与单个case语句进行匹配并作出判断。select在它的第一个case被满足时被调用。case通常是一个常量或者范围。select语句的语法结构如下:

select (变量)
    case 条件1
        语句
    case 条件2
        语句
    ...
end select

select语句也可以包含在if中使用。

$EVENT_NAME

$EVENT_NAME是一个内建变量,它用于表示触发回调函数的音符序号。如果您已经测试过了上面的程序,你会发现程序的输出基本都是数字,那么这个数字是怎么产生的呢,下面我将为您介绍。在Yamaha的标准中,C3是中央C,下面的介绍也以此为标准。Midi音符序号以0为起始,我们规定0对应的音符是C-2,每升高半音这个数字就+1.那么我们可以推出每升高八度这个数字加12, 所以我们可以得到:

  • 0⇒C-2
  • 12⇒C-1
  • 24⇒C0
  • 36⇒C1
  • 48⇒C2
  • 60⇒C3(中央C)
  • 72⇒C4
  • 84⇒C5
  • 96⇒C6
  • 108⇒C7
  • 120⇒C8
  • 127⇒G8

相应地,中间的音便可以依照相邻音的序号推出。关于具体的数字转换成音高的程序我们会在后面学习。

结尾

本期教程中我们学习了Kontakt Script中的流程控制和内建变量。下一节我们将学习循环和运算。

未经授权,禁止转载。No reproduction without permission. 許可なく複製することはできません。:编曲资源 » Kontakt Script教程(三) – 流程控制

赞 (9)

评论 2

*

  1. 匿名明明这么棒的网站,突然不更了,好难受回复
    • 编曲资源因为我懒回复