Kontakt Script官方教程 – 事件管理

目录
[隐藏]

事件管理

事件与音符编号

每个音符都是事件,外来的(键盘、编曲软件)或是脚本生成的音符都是事件。由于音符释放后,声音会经历衰减(Decay)过程,音符事件会持续存在一段时间,因此可能会有很多事件同时存在。为了方便访问,每个事件都有一个唯一编号。但回调函数和事件是两码事。回调函数是被计算机执行的程序,而事件可以认为是一种虚拟音。

触发回调函数的音符,其编号储存于内建变量$EVENT_ID中。play_note()中生成的音符序号可以手动指定。

on init
  message ("")
  declare $new_note_id
  declare $original_note_id
end on

on note
  $original_note_id := $EVENT_ID
  wait(500000)
  note_off($original_note_id)
  $new_note_id := play_note($EVENT_NOTE + 12,$EVENT_VELOCITY,0,500000)
  wait(500000)
  note_off($new_note_id)
end on

on release
  if ($EVENT_ID = $new_note_id)
    message("note off new note")
    wait (200000)
    message ("")
  end if
  if ($EVENT_ID = $original_note_id)
    message("note off original note")
    wait(200000)
    message ("")
  end if
end on

用户演奏音符后,音符回调函数被执行一次,然而通过观察Kontakt状态栏,释放回调函数却执行了两次。play_note()函数可以看做是一只虚拟手,它也在演奏音符。用户演奏音符后,自然会松开琴键,此时会触发释放回调函数。而程序生成的音符也会随之松开,会再次触发释放回调函数。

note_off()与play_note()相关,note_off()函数释放音符。

note_off(<编号>)
note_off()函数会释放音符,同时触发释放回调函数。

play_note()函数中的时值(duration)参数,是可以组合wait()和note_off()来代替的。但是因为play_note()函数运用广泛,为了提升效率,故也可以使用时值参量。如果读者想要完全忽略某时间,可以使用ignore_event()指令。

on note
  ignore_event($EVENT_ID)
  play_note($EVENT_NOTE,$EVENT_VELOCITY,400000,-1)
end on

用户演奏的音依然十分正常,音符序号与力度在回调函数中仍然可用,play_note()函数将音符演奏出来,但是加上了400毫秒的延迟。ignore_event也可以用来忽略释放回调函数。

ignore_event(<编号>)
在回调函数中忽略事件。

未经允许不得转载:编曲资源 » Kontakt Script官方教程 – 事件管理

赞 (5) 打赏

评论 0

*

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏