さて前回予告した通り今回は実際のスクリプトを紹介します。考え方としては、CSS(Cinematic Studio Strings)で”使用していない”鍵盤を使ってCC58の値をKontaktに送信して奏法の切り替えを行う、わけです。劇伴の作曲家をしている恐らく100%の人が88鍵のキーボードを使用しているでしょうからその前提で話を進めます。
今回のスクリプトの要になる部分にフォーカスしましょう。
if ($MIDI_BYTE_1 = 33)
message("Note A0 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 16)
exit
end if
前回のマニュアルを読むとCC58のバリュー16~20を受け取ると「Staccatissimo」に切り替わる、と書いてありますね?ですから「もしMIDIノートナンバー33つまりA0を受け取ったらMIDI_COMMAND_CC, 58をValue16を送信する」というスクリプトを書いてあげればよいのかなと。そして、どのKSがどこに割り当てているか毎回思い出せるほどの記憶力は持ち合わせていないので、ラベルとしてKSPのウィンドウ内にメモしておいた方が良いなと。
declare ui_label $label_1 (1, 1)
これと次がペアになってるわけですね。
set_text($label_1, "A-1 : Legato On”)
以下自分に必要な分だけ繰り返すと今日の記事の最後にあるようなスクリプトになるわけですね。これで久しぶりにCSSを起動させてもレガートのオンオフのKSどこだったかな?とスクリプトを見直す必要もなくなりますね。
CSSの他に同じメーカーからWoodwindsとBrassのシリーズがリリースされていますが、どちらもバランスの取れた良い音源だと思います。ただ今日紹介したスクリプトをそのまま転用はできません。それは各自スクリプトを書き換えて調整してください。
それから、Kontaktスクリプトをサードパーティーのテキストエディターで記述してKontakt内のエディターにコピペする時にたまに出るエラーで「”」のフォント違いで上手くいかない事があるんです。原因は理解できていないのですが、「”」が複数あるというの理由だと思います。そういう時は一度「”」を削除してKSPのエディター内でもう一度「”」を打つと正しく動作します。
以下実際のスクリプトです。
on init
message("Script initialized")
set_script_title("KSP for CSS")
set_ui_height(0)
declare ui_label $label_1 (1, 1)
declare ui_label $label_2 (1, 1)
declare ui_label $label_3 (1, 1)
declare ui_label $label_4 (1, 1)
declare ui_label $label_5 (1, 1)
declare ui_label $label_6 (1, 1)
declare ui_label $label_7 (1, 1)
declare ui_label $label_8 (1, 1)
declare ui_label $label_9 (1, 1)
declare ui_label $label_10 (1,1)
declare ui_label $label_11 (1,1)
set_text($label_1, "A-1 : Legato On")
set_text($label_2, "B-1 : Legato ff")
set_text($label_3, "A#-1 : Pizz")
set_text($label_4, "G#1 : Spicatto")
set_text($label_5, "A1 : Staccatissimo")
set_text($label_6, "A#1 : Staccato")
set_text($label_7, "B1 : Sfz")
set_text($label_8, "D#6 : Con sord On")
set_text($label_9, "E6 : Con sord Off")
set_text($label_10, "F6 : Bartok Snap")
set_text($label_11, "F#6 : Col Legno")
end on
on midi_in
message("Received MIDI command: " & $MIDI_COMMAND)
message("Received note: " & $MIDI_BYTE_1)
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 > 0)
if ($MIDI_BYTE_1 = 32)
message("Note G#0 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 11)
exit
end if
if ($MIDI_BYTE_1 = 33)
message("Note A0 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 16)
exit
end if
if ($MIDI_BYTE_1 = 21)
message("Note A-1 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 76)
exit
end if
if ($MIDI_BYTE_1 = 23)
message("Note B-1 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 81)
exit
end if
if ($MIDI_BYTE_1 = 22)
message("Note A#-1 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 31)
exit
end if
if ($MIDI_BYTE_1 = 34)
message("Note A#0 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 21)
exit
end if
if ($MIDI_BYTE_1 = 35)
message("Note B0 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 26)
exit
end if
if ($MIDI_BYTE_1 = 101)
message("Note F6 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 36)
exit
end if
if ($MIDI_BYTE_1 = 102)
message("Note F6 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 41)
exit
end if
if ($MIDI_BYTE_1 = 99)
message("Note D#6 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 86)
exit
end if
if ($MIDI_BYTE_1 = 100)
message("Note E6 received")
ignore_midi
set_midi($MIDI_CHANNEL, $MIDI_COMMAND_CC, 58, 91)
exit
end if
end if
end on