{ Contact: support@vksr_robertinventor.com Web page: http://robertinventor.com/ftswiki/High_numbered_keyswitches_retuning Copyright (c) 2013 Robert Walker This software is provided as-is, without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. This is the ZLib license suitable for free software and also for open source software and commmercial use https://en.wikipedia.org/wiki/Zlib_License } {YOU MAY NEED TO CONFIGURE THIS SCRIPT * if instrument has keyswitches * to select default user interface * to retune release samples TO CONFIGURE, see start of the "on init" handler IF YOU WANT TO MERTE IT WITH AN EXISTING SCRIPT 1. Add the code from the "on init", "on note", "on release" and "on controller" handlers to your own handlers 2. Copy all the other routines into your own script 3. Configure it if necessary (see start of "on init") 3. If you need to reposition the controls, or hide some of them, see vksr_move_controls, which is also duplicated at end of "on init" All variables and routines start vksr_ or kspML_ so chance of variable collision is low If you do get a variable collision, simply change the prefixes with search and replace of "vksr_" in this code before you do the merge (kspML_ is for code inlined from KSPMathV600, see http://www.bigbobsmusicworld.com/kontakt-scripts/math-library } on init set_script_title("Keyswitch Retuning") make_perfview { Uncomment this to make this into the performance view, the one you see on the front of the instrument } declare ui_value_edit $vksr_value_edit_instrument_range_min (0,127,1) $vksr_value_edit_instrument_range_min :=0 {' If instrument has keyswitches below its range. set this to lowest playable note, defaults to 0 } declare ui_value_edit $vksr_value_edit_instrument_range_max (0,127,1) $vksr_value_edit_instrument_range_max :=127 {' If instrument has keyswitches above its range, set this to highest playable note, defaults to 128 } declare $vksr_hide_user_interface:=0 {' When set to 1, hides everything except reset to 12et button} declare $vksr_ui_extra_vertical_shift:=0 {May be useful if integrating with another script} declare ui_menu $vksr_menu_apply_skin add_menu_item($vksr_menu_apply_skin,"No skin buttons",0) $vksr_menu_apply_skin:=2 add_menu_item($vksr_menu_apply_skin,"Skin buttons, menus etc if available (see script for details)",1) add_menu_item($vksr_menu_apply_skin,"Skin - with transparent label backgrounds",2) {uses as images: "button", "menu", and "transparent_background" - you can change those in @vksr_skin_button, @vksr_skin_menu, @vksr_skin_transparent_background} {One way to make a skin in Kontakt: put images with those file names, extension jpg, png etc into a sub folder called "resources\Pictures" and then go to Instrument Options and choose "Create resource" and save into the parent folder of the resources folder} declare ui_menu $vksr_menu_show_more $vksr_menu_show_more:=0 {when set to 0, this hides the ui knobs - can be changed by the user} declare $vksr_menu_item_pos:=0 add_menu_item($vksr_menu_show_more,"Show less",0) add_menu_item($vksr_menu_show_more,"Less, & scale",1) add_menu_item($vksr_menu_show_more,"Show more",2) add_menu_item($vksr_menu_show_more,"More, & scale",3) add_menu_item($vksr_menu_show_more,"Tuning only",4) add_menu_item($vksr_menu_show_more,"Tuning & scale",5) declare $vksr_sm_LESS :=0 declare $vksr_sm_LESS_WITH_SCALE :=1 declare $vksr_sm_MORE :=2 declare $vksr_sm_MORE_WITH_SCALE :=3 declare $vksr_sm_TUNING_MENU_ONLY :=4 declare $vksr_sm_TUNING_MENU_WITH_SCALE :=5 $vksr_menu_item_pos:=6 add_menu_item($vksr_menu_show_more,"Tweaks",$vksr_menu_item_pos) declare $vksr_sm_TWEAKS $vksr_sm_TWEAKS :=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_show_more,"Documentation",$vksr_menu_item_pos) declare $vksr_sm_DOCUMENTATION $vksr_sm_DOCUMENTATION :=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 set_text($vksr_value_edit_instrument_range_min,"From") set_text($vksr_value_edit_instrument_range_max,"To") declare ui_label $vksr_label_instrument_range2(3,2) declare ui_label $vksr_label_instrument_range(1,1) set_text($vksr_label_instrument_range,"Instrument range") set_text($vksr_label_instrument_range2,"Use instrument range to skip retuning for keyswitches") add_text_line($vksr_label_instrument_range2,"Notes that go outside this range won't be retuned") declare ui_label $vksr_label_ratio_recognition_sensitivity(2,1) declare ui_label $vksr_label_ratio_recognition_sensitivity2(1,1) declare ui_value_edit $vksr_value_edit_ratio_recognition_sensitivity(0,100000,1000) $vksr_value_edit_ratio_recognition_sensitivity:=2 make_persistent($vksr_value_edit_ratio_recognition_sensitivity) set_text($vksr_label_ratio_recognition_sensitivity,"Ratio recognition sensitivity") set_text($vksr_label_ratio_recognition_sensitivity2,"(cents)") set_text($vksr_value_edit_ratio_recognition_sensitivity,"") declare @vksr_skin_button @vksr_skin_button:="button" declare @vksr_skin_transparent_background @vksr_skin_transparent_background:="transparent" declare @vksr_skin_menu @vksr_skin_menu:="menu" declare $vksr_retune_release:=0 { ***UNCONMMENT THIS TO SWITCH ON RELEASE SAMPLE RETUNING*** On many instruments this is unnecessary WARNING - THIS CAN CAUSE DOUBLE NOTES ON SOME INSTRUMENTS set_script_title("Keysw. + Release retuning") $vksr_retune_release:=1 SET_CONDITION(NO_SYS_SCRIPT_RLS_TRIG) {END OF SECTION TO SWITCH ON RELEASE RETUNING} declare $vksr_keyswitchv2_byte_pos:=0 { gets set to e.g. 4 for 4 byte retuning - gets decremented as data is received, retunes when reaches 0 } declare $vksr_keyswitch_instruction:=0 { used for "running status" } declare $vksr_keyswitchv2_extra_fine_pitch_bend_byte_position := 0 declare %vksr_pitch_bend_for_output_note[128] declare %vksr_denum_for_output_note[128] declare %vksr_denom_for_output_note[128] declare %vksr_output_note[128] declare %vksr_pitch_bend_for_output_note_at_note_on[128] declare %vksr_output_note_at_note_on[128] declare %vksr_total_millicents_on_set_denum[128] declare %vksr_is_active[128] declare %vksr_note_id[128] declare $vksr_EVENT_NOTE :=0 declare $vksr_EVENT_VELOCITY :=0 declare $vksr_EVENT_ID :=0 declare $vksr_CC_NUM :=0 declare $vksr_abscents := 0 declare $vksr_input_note := 0 declare $vksr_next_output_note := 0 declare $vksr_next_pitch_bend_coarse := 0 declare $vksr_next_pitch_bend_fine := 0 declare $vksr_next_pitch_bend_extra_fine := 0 declare $vksr_pitch_bend_combined := 0 declare $vksr_Note_shift := 0 declare $vksr_input_pitch_bend_0_at := 8192 declare $vksr_input_pitch_steps_in_semitone := 16384 { Use full pitch bend range to adjust from -50 to 50 cents } declare $CC119_was:=0 declare $vksr_scale_notes:=0 declare $vksr_scale_notes_black:=0 declare $vksr_scale_notes_for_i:=0 declare $vksr_semitone_in_millicents:=100*1000 declare $vksr_3o1_in_millicents :=1901955 declare $vksr_3o2_in_millicents :=701955 declare $vksr_octave_in_millicents :=1200*1000 declare ui_value_edit $vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 (0,127,1) declare ui_value_edit $vksr_value_edit_1o1_transpose (-12700000,12700000,1000) set_text($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,"1/1 at") declare %vksr_ok_denum[128] set_text($vksr_value_edit_1o1_transpose,"tr.") make_persistent($vksr_value_edit_1o1_transpose) make_persistent($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60) $vksr_value_edit_1o1_transpose:=0 $vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 :=60 {The scales in the tuning drop down all use this as the 1/1} _read_persistent_var($vksr_value_edit_1o1_transpose) _read_persistent_var($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60) declare $vksr_1o1_pos $vksr_1o1_pos:=$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 make_persistent($vksr_1o1_pos) _read_persistent_var($vksr_1o1_pos) declare $vksr_1o1_millicents $vksr_1o1_millicents:=$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60*$vksr_semitone_in_millicents make_persistent($vksr_1o1_millicents) _read_persistent_var($vksr_1o1_millicents) declare $vksr_midi_tuning_enabled:=0 make_persistent($vksr_midi_tuning_enabled) _read_persistent_var($vksr_midi_tuning_enabled) declare @vksr_tuning_method @vksr_tuning_method:="" { Cant seem to return value of function, Kontakt 5 not recognizing () -> result So just using a global variable $vksr_result for now to return the values. Okay so long as not multithreaded should be okay for parsing midi. } declare $vksr_arg $vksr_arg := 0 declare $vksr_result $vksr_result := 0 declare $vksr_byte_arg:=0 declare @vksr_return_char @vksr_return_char:="" { these next are local temporary variables except get syntax error messages in Kontakt 5 if I try to declare them within a function so declaring them here as globals, should be okay since midi is serial } declare $vksr_ready_to_retune := 0 declare $vksr_parsed :=0 declare $vksr_adjust_volume:=0 declare $vksr_adjust_pan :=0 declare $vksr_j:=0 declare $vksr_i:= 0 declare $vksr_jj:=0 {for use in functions that might be called in $vksr_i and $vksr_j loops} declare $vksr_ii:= 0 declare $vksr_offset_mod_nnotes:=0 declare $vksr_is_black_note_for_scale_on_black_keys:=0 declare $vksr_istart := 0 declare $vksr_data_value:=0 declare $vksr_next_denom:=0 declare $vksr_next_denom_pos:=1 declare $vksr_next_denum:=0 declare $vksr_next_denum_pos:=1 declare $vksr_scale_degree:=0 declare $vksr_scale_degree_was:=0 declare $vksr_1o1_pos_black:=-1 declare $vksr_1o1_pos_white:=-1 declare $vksr_1o1_pos_make_scale:=60 declare $vksr_temp := 0 declare $vksr_temp2 := 0 declare $vksr_t:=0 declare $vksr_u:=0 declare $vksr_v:=0 declare $vksr_gcd_common_factors_of_2:=1 declare @vksr_temp @vksr_temp :="" declare $vksr_offset_in_millicents:=0 declare $vksr_denum:=0 declare $vksr_denom:=0 declare $vksr_ok_check_knob_Note_for_find_cents_or_ratios_string:=1 declare @vksr_cents_or_ratio_for_offset_in_milliseconds @vksr_cents_or_ratio_for_offset_in_milliseconds:="" declare $vksr_Note_increment:=0 declare $vksr_pitch_increment:=0 { http://www.vi-control.net/forum/viewtopic.php?p=178475&highlight= This is used to make sure the release samplss are tuned in the same way as the note itself } declare $vksr_normal_group { normal groups } declare $vksr_release_group { release groups } declare $vksr_OFF_ID { release sample ID } $vksr_OFF_ID := 0 declare @vksr_pitch_glide_diagnostics_string @vksr_pitch_glide_diagnostics_string := "" declare @vksr_current_instruction_string @vksr_current_instruction_string := "" declare $vksr_show_messages_events_string:=0 declare @vksr_messages_events_string @vksr_messages_events_string := "" { These ui knobs can be used to adjust the pitch of individual notes Method: first select the note to adjust with the first knob Then select the note to retune it to with second knob Third, fourth and fifth knobs adjust the pitch bend } declare ui_knob $vksr_knob_Note(0, 127, 1) set_text ($vksr_knob_Note,"Note") declare ui_knob $vksr_knob_To(0, 127, 1) set_text ($vksr_knob_To,"To") declare ui_knob $vksr_knob_Cents(-50000, 50000, 1000) set_text ($vksr_knob_Cents,"Cents") declare ui_knob $vksr_knob_CentiCents(0, 99, 1) declare ui_knob $vksr_knob_LastDigit(0, 9, 1) declare ui_button $vksr_button_ResetTo12EQ declare ui_value_edit $vksr_value_edit_Cents (-50000, 50000, 1000) declare ui_value_edit $vksr_value_edit_denum (0,100000000,1) declare ui_value_edit $vksr_value_edit_denom (0,100000000,1) make_persistent($vksr_value_edit_denum) make_persistent($vksr_value_edit_denom) $vksr_value_edit_denum:=0 $vksr_value_edit_denom:=0 declare ui_value_edit $vksr_value_edit_Note (0,127,1) set_text ($vksr_value_edit_Note,"Note") declare ui_value_edit $vksr_value_edit_To (0,127,1) declare ui_value_edit $vksr_value_edit_digits_precision (0,3,1) declare ui_label $vksr_label_tuning_method (3,1) set_text ($vksr_label_tuning_method,"Send Ctrlr 119, val. 119 to switch on velocity tuning keyswitches") declare ui_label $vksr_label_documentation(5,6) add_text_line($vksr_label_documentation,"To update tuning table via midi: Send cc 119, val. 119.") add_text_line($vksr_label_documentation,"Then note 127 vel. 4 (= start tuning) then data as input note, output note, pitch bend coarse, fine") add_text_line($vksr_label_documentation,"Data as velocites for note 126, or 127, vel. 127 for zero. Pitch bend in range -50 to 50 cents. ") add_text_line($vksr_label_documentation,"Then note 127 vel. 100 to switch off retuning. You can now play all 128 notes in the table.") add_text_line($vksr_label_documentation,"") add_text_line($vksr_label_documentation,"For more documentation and to update script: http://robertinvenetor.com/velocity.htm") add_text_line($vksr_label_documentation,"Spec for velocity tuning by members of Xenharmonic Alliance") add_text_line($vksr_label_documentation,"Script by Robert Walker, free for any use including commercial (zlib license)") declare ui_menu $vksr_menu_show_diagnostics add_menu_item($vksr_menu_show_diagnostics,"Hide diagnostic messages for debugging",0) add_menu_item($vksr_menu_show_diagnostics,"Show diagnostic messages for debugging",1) make_persistent($vksr_menu_show_diagnostics) { $vksr_menu_show_diagnostics:=0} _read_persistent_var($vksr_menu_show_diagnostics) message("on init" & $vksr_menu_show_diagnostics) if($vksr_menu_show_diagnostics # 0) message("on init") end if declare ui_menu $vksr_menu_midi_tuning_method add_menu_item($vksr_menu_midi_tuning_method,"No midi in tuning",0) add_menu_item($vksr_menu_midi_tuning_method,"Velocity keyswitch tuning - with notes 126 and 127 - you can also select this by sending Controller 119, 119",1) declare ui_menu $vksr_menu_scroll_scale add_menu_item($vksr_menu_scroll_scale,"Scroll scale on ed.",0) add_menu_item($vksr_menu_scroll_scale,"Scroll scale on play",1) add_menu_item($vksr_menu_scroll_scale,"Scroll for both",2) add_menu_item($vksr_menu_scroll_scale,"Scroll to selected note",3) declare $vksr_scroll_scale_ON_EDIT:=0 declare $vksr_scroll_scale_ON_PLAY:=1 declare $vksr_scroll_scale_ON_BOTH:=2 declare $vksr_scroll_scale_TO_SELECTED_NOTE:=3 declare $vksr_Note_user_edited:=-1 {not yet edited} declare $vksr_Note_played:=-1 {not yet pleyd} $vksr_menu_scroll_scale:=$vksr_scroll_scale_ON_BOTH declare ui_value_edit $vksr_value_edit_scroll_scale_midi_start (0,127,1) set_text ($vksr_value_edit_scroll_scale_midi_start,"") $vksr_value_edit_scroll_scale_midi_start:=60 declare ui_value_edit $vksr_value_edit_scroll_scale_show_before (-127,127,1) set_text ($vksr_value_edit_scroll_scale_show_before,"position") $vksr_value_edit_scroll_scale_show_before:=3 declare ui_label $vksr_label_tuning_description (3,1) declare @vksr_tuning_description_string declare $vksr_added_edited_by_user_to_tuning_string:=0 make_persistent($vksr_added_edited_by_user_to_tuning_string) @vksr_tuning_description_string:="Tuning: 12 equal" _read_persistent_var(@vksr_tuning_description_string) set_text ($vksr_label_tuning_description,@vksr_tuning_description_string) declare ui_label $vksr_label_tuning_definition (6,1) declare $vksr_tuning_definition_string_needs_update:=0 declare $vksr_tuning_string_USER_EDITED:=1 declare $vksr_tuning_string_REMAKE_NOT_USER_EDITED:=2 declare @vksr_tuning_definition_string @vksr_tuning_definition_string:="1/1, 100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 1100.0, 2/1" declare @vksr_highlight_black_keys_in_scale_before @vksr_highlight_black_keys_in_scale_before:="[" declare @vksr_highlight_black_keys_in_scale_after @vksr_highlight_black_keys_in_scale_after:="]" _read_persistent_var(@vksr_tuning_definition_string) set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) $vksr_value_edit_Cents := 0 $vksr_value_edit_digits_precision:=2 {*MAKE SCALES DROPLIST MENU AND ADD SCALES TO IT*} declare ui_value_edit $vksr_value_edit_n_equal (1,1000000,1) declare ui_value_edit $vksr_value_edit_first_harmonic (1,1000000,1) $vksr_value_edit_first_harmonic:=8 set_text($vksr_value_edit_first_harmonic,"starts") declare ui_value_edit $vksr_value_edit_first_harmonic_black (1,1000000,1) $vksr_value_edit_first_harmonic_black:=5 set_text($vksr_value_edit_first_harmonic_black,"starts") declare ui_label $vksr_label_note_played (1,1) set_text ($vksr_label_note_played,"(no notes played)") declare ui_menu $vksr_menu_scale_tuning {the scale presets} $vksr_menu_item_pos:=0 declare $vksr_scale_tuning_12_EQUAL:=0 add_menu_item($vksr_menu_scale_tuning,"Twelve Equal",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_tuning,"n-Equal",$vksr_menu_item_pos) declare $vksr_scale_tuning_N_EQUAL $vksr_scale_tuning_N_EQUAL:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_tuning,"Equal div. of 3/1",$vksr_menu_item_pos) declare $vksr_scale_tuning_N_EQUAL_of_3o1 $vksr_scale_tuning_N_EQUAL_of_3o1:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_tuning,"Equal div. of 3/2",$vksr_menu_item_pos) declare $vksr_scale_tuning_N_EQUAL_of_3o2 $vksr_scale_tuning_N_EQUAL_of_3o2:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_tuning,"Harmonics & subharmonics",$vksr_menu_item_pos) declare $vksr_scale_tuning_HARMONIC_AND_SUBHARMONICS $vksr_scale_tuning_HARMONIC_AND_SUBHARMONICS:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare $vksr_scale_tuning_Just_intonation_with_I__II__V_pure $vksr_scale_tuning_Just_intonation_with_I__II__V_pure:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"J.I. with I, II, V pure",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Just_intonation_with_I__II__V_pure[12]:= (... 0 {1/1}, 92179 {135/128}, 203910 {9/8}, 315641 {6/5}, 386314 {5/4}, 519551 {27/20}, ... 590224 {45/32}, 701955 {3/2}, 813686 {8/5}, 905865 {27/16}, 1017596 {9/5}, 1088269 {15/8} ) declare %vksr_scale_Just_intonation_with_I__II__V_pure_denums[12]:= (... 1, 135, 9, 6, 5, 27, 45, 3, 8, 27, 9, 15 ) declare %vksr_scale_Just_intonation_with_I__II__V_pure_denoms[12]:= (... 1, 128, 8, 5, 4, 20, 32, 2, 5, 16, 5, 8 ) declare $vksr_scale_tuning_Just_intonation_with_I__IV__V_pure $vksr_scale_tuning_Just_intonation_with_I__IV__V_pure:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"J.I. with I, IV, V pure",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Just_intonation_with_I__IV__V_pure[12]:= (... 0 {1/1}, 111731 {16/15}, 203910 {9/8}, 315641 {6/5}, 386314 {5/4}, 498045 {4/3}, ... 590224 {45/32}, 701955 {3/2}, 813686 {8/5}, 884359 {5/3}, 1017596 {9/5}, 1088269 {15/8} ) declare %vksr_scale_Just_intonation_with_I__IV__V_pure_denums[12]:= (... 1, 16, 9, 6, 5, 4, 45, 3, 8, 5, 9, 15 ) declare %vksr_scale_Just_intonation_with_I__IV__V_pure_denoms[12]:= (... 1, 15, 8, 5, 4, 3, 32, 2, 5, 3, 5, 8 ) declare $vksr_scale_tuning_Modern_Indian_Gamut___ragas $vksr_scale_tuning_Modern_Indian_Gamut___ragas:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Modern Indian Gamut - ragas",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Modern_Indian_Gamut___ragas[12]:= (... 0 {1/1}, 111731 {16/15}, 203910 {9/8}, 315641 {6/5}, 386314 {5/4}, 498045 {4/3}, ... 590224 {45/32}, 701955 {3/2}, 813686 {8/5}, 905865 {27/16}, 1017596 {9/5}, 1088269 {15/8} ) declare %vksr_scale_Modern_Indian_Gamut___ragas_denums[12]:= (... 1, 16, 9, 6, 5, 4, 45, 3, 8, 27, 9, 15 ) declare %vksr_scale_Modern_Indian_Gamut___ragas_denoms[12]:= (... 1, 15, 8, 5, 4, 3, 32, 2, 5, 16, 5, 8 ) declare $vksr_scale_tuning_Pythagorean__Middle_ages $vksr_scale_tuning_Pythagorean__Middle_ages:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Pythagorean (Middle ages)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Pythagorean__Middle_ages[12]:= (... 0 {1/1}, 90225 {256/243}, 203910 {9/8}, 294135 {32/27}, 407820 {81/64}, 498045 {4/3}, ... 611730 {729/512}, 701955 {3/2}, 792180 {128/81}, 905865 {27/16}, 996090 {16/9}, 1109775 {243/128} ) declare %vksr_scale_Pythagorean__Middle_ages_denums[12]:= (... 1, 256, 9, 32, 81, 4, 729, 3, 128, 27, 16, 243 ) declare %vksr_scale_Pythagorean__Middle_ages_denoms[12]:= (... 1, 243, 8, 27, 64, 3, 512, 2, 81, 16, 9, 128 ) declare $vksr_scale_tuning_Quarter_comma_mean_tone__renaissance_o_baroque $vksr_scale_tuning_Quarter_comma_mean_tone__renaissance_o_baroque:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Quarter comma mean-tone (renaissance / baroque)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Quarter_comma_mean_tone__renaissance_o_baroque[12]:= (... 0 {1/1}, 76049 {76.049}, 193157 {193.157}, 310265 {310.265}, 386314 {5/4}, 503422 {503.422}, ... 579471 {579.471}, 696578 {696.578}, 772627 {25/16}, 889735 {889.735}, 1006843 {1006.843}, 1082892 {1082.892} ) declare %vksr_scale_Quarter_comma_mean_tone__renaissance_o_baroque_denums[12]:= (... 1, 0, 0, 0, 5, 0, 0, 0, 25, 0, 0, 0 ) declare %vksr_scale_Quarter_comma_mean_tone__renaissance_o_baroque_denoms[12]:= (... 1, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0 ) declare $vksr_scale_tuning_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical $vksr_scale_tuning_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Werckmeister III (1691, Bach's time, late baroque / early classical)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical[12]:= (... 0 {1/1}, 90225 {256/243}, 192180 {192.180}, 294135 {32/27}, 390225 {390.225}, 498045 {4/3}, ... 588270 {1024/729}, 696090 {696.090}, 792180 {128/81}, 888270 {888.270}, 996090 {16/9}, 1092180 {1092.180} ) declare %vksr_scale_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical_denums[12]:= (... 1, 256, 0, 32, 0, 4, 1024, 0, 128, 0, 16, 0 ) declare %vksr_scale_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical_denoms[12]:= (... 1, 243, 0, 27, 0, 3, 729, 0, 81, 0, 9, 0 ) declare $vksr_scale_tuning_Lambert_Chaumont_organ_temperament__1695 $vksr_scale_tuning_Lambert_Chaumont_organ_temperament__1695:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Lambert Chaumont organ temperament (1695)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Lambert_Chaumont_organ_temperament__1695[12]:= (... 0 {1/1}, 76049 {76.049}, 193157 {193.157}, 290909 {290.909}, 386314 {5/4}, 503422 {503.422}, ... 579471 {579.471}, 696578 {696.578}, 772627 {25/16}, 889735 {889.735}, 997165 {997.165}, 1082892 {1082.892} ) declare %vksr_scale_Lambert_Chaumont_organ_temperament__1695_denums[12]:= (... 1, 0, 0, 0, 5, 0, 0, 0, 25, 0, 0, 0 ) declare %vksr_scale_Lambert_Chaumont_organ_temperament__1695_denoms[12]:= (... 1, 0, 0, 0, 4, 0, 0, 0, 16, 0, 0, 0 ) declare $vksr_scale_tuning_Rameau_Temperament__in_Nouveau_Systeme__1726 $vksr_scale_tuning_Rameau_Temperament__in_Nouveau_Systeme__1726:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Rameau Temperament in Nouveau Systeme (1726)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Rameau_Temperament__in_Nouveau_Systeme__1726[12]:= (... 0 {1/1}, 92472 {92.472}, 193157 {193.157}, 302053 {302.053}, 386314 {5/4}, 503422 {503.422}, ... 587682 {587.682}, 696578 {696.578}, 797263 {797.263}, 889735 {889.735}, 1006843 {1006.843}, 1082892 {1082.892} ) declare %vksr_scale_Rameau_Temperament__in_Nouveau_Systeme__1726_denums[12]:= (... 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_Rameau_Temperament__in_Nouveau_Systeme__1726_denoms[12]:= (... 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Sixth_comma_mean_tone__Mozart_s_time__classical $vksr_scale_tuning_Sixth_comma_mean_tone__Mozart_s_time__classical:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Sixth comma mean-tone (Mozart's time, classical)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Sixth_comma_mean_tone__Mozart_s_time__classical[12]:= (... 0 {1/1}, 88594 {88.594}, 196741 {196.741}, 304888 {304.888}, 393482 {393.482}, 501629 {501.629}, ... 590224 {45/32}, 698371 {698.371}, 786965 {786.965}, 895112 {895.112}, 1003260 {1003.260}, 1091850 {1091.850} ) declare %vksr_scale_Sixth_comma_mean_tone__Mozart_s_time__classical_denums[12]:= (... 1, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0 ) declare %vksr_scale_Sixth_comma_mean_tone__Mozart_s_time__classical_denoms[12]:= (... 1, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Vallotti_and_Young__1800__late_classical $vksr_scale_tuning_Vallotti_and_Young__1800__late_classical:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Vallotti and Young (1800, late classical)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Vallotti_and_Young__1800__late_classical[12]:= (... 0 {1/1}, 94135 {94.135}, 196090 {196.090}, 298045 {298.045}, 392180 {392.180}, 501955 {501.955}, ... 592180 {592.180}, 698045 {698.045}, 796090 {796.090}, 894135 {894.135}, 1000000 {1000.000}, 1090220 {1090.220} ) declare %vksr_scale_Vallotti_and_Young__1800__late_classical_denums[12]:= (... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_Vallotti_and_Young__1800__late_classical_denoms[12]:= (... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Kirnberger__1779 $vksr_scale_tuning_Kirnberger__1779:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Kirnberger (1779)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Kirnberger__1779[12]:= (... 0 {1/1}, 90225 {256/243}, 193849 {193.849}, 294135 {32/27}, 386314 {386.314}, 498045 {4/3}, ... 590224 {45/32}, 696663 {696.663}, 792180 {128/81}, 889650 {889.650}, 996090 {16/9}, 1088269 {15/8} ) declare %vksr_scale_Kirnberger__1779_denums[12]:= (... 1, 256, 0, 32, 0, 4, 45, 0, 128, 0, 16, 15 ) declare %vksr_scale_Kirnberger__1779_denoms[12]:= (... 1, 243, 0, 27, 0, 3, 32, 0, 81, 0, 9, 8 ) declare $vksr_scale_tuning_Kirnberger_3__1779 $vksr_scale_tuning_Kirnberger_3__1779:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Kirnberger 3 (1779)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Kirnberger_3__1779[12]:= (... 0 {1/1}, 92179 {135/128}, 193157 {193.157}, 294135 {32/27}, 386314 {5/4}, 498045 {4/3}, ... 590224 {45/32}, 696578 {696.578}, 794134 {405/256}, 889735 {889.735}, 996090 {16/9}, 1088269 {15/8} ) declare %vksr_scale_Kirnberger_3__1779_denums[12]:= (... 1, 135, 0, 32, 5, 4, 45, 0, 405, 0, 16, 15 ) declare %vksr_scale_Kirnberger_3__1779_denoms[12]:= (... 1, 128, 0, 27, 4, 3, 32, 0, 256, 0, 9, 8 ) declare $vksr_scale_tuning_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885 $vksr_scale_tuning_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Broadwood's Best (Ellis tuner number 4), Victorian (1885)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885[12]:= (... 0 {1/1}, 95965 {95.965}, 197990 {197.990}, 297955 {297.955}, 392980 {392.980}, 498945 {498.945}, ... 594970 {594.970}, 699995 {699.995}, 796960 {796.960}, 894985 {894.985}, 998950 {998.950}, 1093975 {1093.975} ) declare %vksr_scale_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885_denums[12]:= (... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885_denoms[12]:= (... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Moore__representative_Victorian_well_temperament___1885 $vksr_scale_tuning_Moore__representative_Victorian_well_temperament___1885:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Moore (representative Victorian well-temperament) (1885)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Moore__representative_Victorian_well_temperament___1885[12]:= (... 0 {1/1}, 98604 {98.604}, 203910 {9/8}, 302514 {302.514}, 399441 {399.441}, 498045 {4/3}, ... 603351 {603.351}, 701955 {3/2}, 800559 {800.559}, 897486 {897.486}, 1004470 {1004.470}, 1101400 {1101.400} ) declare %vksr_scale_Moore__representative_Victorian_well_temperament___1885_denums[12]:= (... 1, 0, 9, 0, 0, 4, 0, 3, 0, 0, 0, 0 ) declare %vksr_scale_Moore__representative_Victorian_well_temperament___1885_denoms[12]:= (... 1, 0, 8, 0, 0, 3, 0, 2, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat $vksr_scale_tuning_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Well-temperament Op de Coul, 1998. Fifths 5/14, 4/14 and 5/14 Pyth comma flat",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat[12]:= (... 0 {1/1}, 98604 {98.604}, 203910 {9/8}, 302514 {302.514}, 399441 {399.441}, 498045 {4/3}, ... 603351 {603.351}, 701955 {3/2}, 800559 {800.559}, 897486 {897.486}, 1004470 {1004.470}, 1101400 {1101.400} ) declare %vksr_scale_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat_denums[12]:= (... 1, 0, 9, 0, 0, 4, 0, 3, 0, 0, 0, 0 ) declare %vksr_scale_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat_denoms[12]:= (... 1, 0, 8, 0, 0, 3, 0, 2, 0, 0, 0, 0 ) declare $vksr_scale_tuning_David_Canright_s_7_limit_twelve_tone $vksr_scale_tuning_David_Canright_s_7_limit_twelve_tone:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"David Canright's 7 limit twelve tone",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_David_Canright_s_7_limit_twelve_tone[12]:= (... 0 {1/1}, 62961 {28/27}, 203910 {9/8}, 266871 {7/6}, 386314 {5/4}, 498045 {4/3}, ... 590224 {45/32}, 701955 {3/2}, 764916 {14/9}, 884359 {5/3}, 968826 {7/4}, 1088269 {15/8} ) declare %vksr_scale_David_Canright_s_7_limit_twelve_tone_denums[12]:= (... 1, 28, 9, 7, 5, 4, 45, 3, 14, 5, 7, 15 ) declare %vksr_scale_David_Canright_s_7_limit_twelve_tone_denoms[12]:= (... 1, 27, 8, 6, 4, 3, 32, 2, 9, 3, 4, 8 ) declare $vksr_scale_tuning_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black $vksr_scale_tuning_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"American Gamelan Si Betty as Pelog on white, Slendro on Black",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black[12]:= (... 0 {1/1}, 67367 {67.367}, 184672 {184.672}, 298754 {298.754}, 267713 {267.713}, 603902 {603.902}, ... 566475 {566.475}, 703919 {703.919}, 795496 {795.496}, 796613 {796.613}, 971688 {971.688}, 1063085 {1063.085} ) declare %vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black_denums[12]:= (... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black_denoms[12]:= (... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Modern_Pelog_scale__Dan_Schmidt $vksr_scale_tuning_Modern_Pelog_scale__Dan_Schmidt:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Modern Pelog scale (Dan Schmidt) (7 note scale on white keys)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Modern_Pelog_scale__Dan_Schmidt[7]:= (... 0 {1/1}, 165004 {11/10}, 315641 {6/5}, 582512 {7/5}, 701955 {3/2}, 813686 {8/5}, ... 1017596 {9/5} ) declare %vksr_scale_Modern_Pelog_scale__Dan_Schmidt_denums[7]:= (... 1, 11, 6, 7, 3, 8, 9 ) declare %vksr_scale_Modern_Pelog_scale__Dan_Schmidt_denoms[7]:= (... 1, 10, 5, 5, 2, 5, 5 ) declare $vksr_scale_tuning_Xylophone_from_West_Africa $vksr_scale_tuning_Xylophone_from_West_Africa:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Xylophone from West Africa (7 note scale on white keys)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Xylophone_from_West_Africa[7]:= (... 0 {1/1}, 152000 {152.000}, 287000 {287.000}, 533000 {533.000}, 724000 {724.000}, 890000 {890.000}, ... 1039000 {1039.000} ) declare %vksr_scale_Xylophone_from_West_Africa_denums[7]:= (... 1, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_Xylophone_from_West_Africa_denoms[7]:= (... 1, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Seven_tone_tuning_from_Thailand $vksr_scale_tuning_Seven_tone_tuning_from_Thailand:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Seven tone tuning from Thailand (on white keys)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Seven_tone_tuning_from_Thailand[14]:= (... 0 {1/1}, 129096 {129.096}, 262077 {262.077}, 415113 {415.113}, 703196 {703.196}, 804353 {804.353}, ... 984182 {984.182}, 1200000 {2/1}, 1329100 {1329.100}, 1462080 {1462.080}, 1616580 {1616.580}, 1904440 {1904.440}, ... 2002010 {2002.010}, 2186290 {2186.290} ) declare %vksr_scale_Seven_tone_tuning_from_Thailand_denums[14]:= (... 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_Seven_tone_tuning_from_Thailand_denoms[14]:= (... 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_Golden_horogram_9__7 $vksr_scale_tuning_Golden_horogram_9__7:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Golden horogram 9, 7 (on white keys)",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Golden_horogram_9__7[7]:= (... 0 {1/1}, 81320 {81.320}, 362550 {362.550}, 543970 {543.970}, 725290 {725.290}, 906610 {906.610}, ... 1087940 {1087.940} ) declare %vksr_scale_Golden_horogram_9__7_denums[7]:= (... 1, 0, 0, 0, 0, 0, 0 ) declare %vksr_scale_Golden_horogram_9__7_denoms[7]:= (... 1, 0, 0, 0, 0, 0, 0 ) declare $vksr_scale_tuning_EDITED $vksr_scale_tuning_EDITED:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_tuning,"Edited", $vksr_menu_item_pos) declare ui_menu $vksr_menu_scale_Black declare ui_value_edit $vksr_value_edit_n_equal_black (1,1000000,1) set_text ($vksr_value_edit_n_equal_black,"n (black)") $vksr_value_edit_n_equal_black:=5 $vksr_menu_item_pos:=0 add_menu_item($vksr_menu_scale_Black,"Black: continues white",$vksr_menu_item_pos) declare $vksr_scale_black_SAME_AS_WHITE $vksr_scale_black_SAME_AS_WHITE:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_Black,"Black: n-Equal",$vksr_menu_item_pos) declare $vksr_scale_black_N_EQUAL $vksr_scale_black_N_EQUAL:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_Black,"Black: 3/1 equal divisions",$vksr_menu_item_pos) declare $vksr_scale_black_N_EQUAL_of_3o1 $vksr_scale_black_N_EQUAL_of_3o1:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 add_menu_item($vksr_menu_scale_Black,"Black: 3/2 equal divisions",$vksr_menu_item_pos) declare $vksr_scale_black_N_EQUAL_of_3o2 $vksr_scale_black_N_EQUAL_of_3o2:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare $vksr_scale_black_Pygmie_scale $vksr_scale_black_Pygmie_scale:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_Black,"Pygmie scale",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Pygmie_scale[5]:= (... 0 {1/1}, 231174 {8/7}, 470781 {21/16}, 701955 {3/2}, 968826 {7/4} ) declare %vksr_scale_Pygmie_scale_denums[5]:= (... 1, 8, 21, 3, 7 ) declare %vksr_scale_Pygmie_scale_denoms[5]:= (... 1, 7, 16, 2, 4 ) declare $vksr_scale_black_Japanese_Koto_scale $vksr_scale_black_Japanese_Koto_scale:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_Black,"Japanese Koto scale",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Japanese_Koto_scale[5]:= (... 0 {1/1}, 203910 {9/8}, 315641 {6/5}, 701955 {3/2}, 813686 {8/5} ) declare %vksr_scale_Japanese_Koto_scale_denums[5]:= (... 1, 9, 6, 3, 8 ) declare %vksr_scale_Japanese_Koto_scale_denoms[5]:= (... 1, 8, 5, 2, 5 ) declare $vksr_scale_black_Golden_horogram_3__5 $vksr_scale_black_Golden_horogram_3__5:=$vksr_menu_item_pos add_menu_item($vksr_menu_scale_Black,"Golden horogram 3, 5",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare %vksr_scale_Golden_horogram_3__5[5]:= (... 0 {1/1}, 259860 {259.860}, 519700 {519.700}, 779550 {779.550}, 1039400 {1039.400} ) declare %vksr_scale_Golden_horogram_3__5_denums[5]:= (... 1, 0, 0, 0, 0 ) declare %vksr_scale_Golden_horogram_3__5_denoms[5]:= (... 1, 0, 0, 0, 0 ) add_menu_item($vksr_menu_scale_Black,"Black: Harmonics & subharmonics",$vksr_menu_item_pos) declare $vksr_scale_black_HARMONIC_AND_SUBHARMONICS $vksr_scale_black_HARMONIC_AND_SUBHARMONICS:=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 {*END OF SCALES DROPLIST SECTION} {Find the black and white keys} declare %vksr_white_black_pos[128] $vksr_i:=0 $vksr_temp2:=1 $vksr_temp:=0 while ($vksr_i<128) if($vksr_i mod 12 = 0 or $vksr_i mod 12 = 2 or $vksr_i mod 12 = 4 or $vksr_i mod 12 = 5... or $vksr_i mod 12 = 7 or $vksr_i mod 12 = 9 or $vksr_i mod 12 = 11) {white keys} %vksr_white_black_pos[$vksr_i]:=$vksr_temp $vksr_temp:=$vksr_temp+1 else %vksr_white_black_pos[$vksr_i]:=-$vksr_temp2 $vksr_temp2:=$vksr_temp2+1 end if $vksr_i:=$vksr_i+1 end while declare ui_menu $vksr_menu_1o1_pos_note_name add_menu_item($vksr_menu_1o1_pos_note_name,"C", 0) add_menu_item($vksr_menu_1o1_pos_note_name,"Db",1) add_menu_item($vksr_menu_1o1_pos_note_name,"D", 2) add_menu_item($vksr_menu_1o1_pos_note_name,"Eb",3) add_menu_item($vksr_menu_1o1_pos_note_name,"E",4) add_menu_item($vksr_menu_1o1_pos_note_name,"F",5) add_menu_item($vksr_menu_1o1_pos_note_name,"Gb",6) add_menu_item($vksr_menu_1o1_pos_note_name,"G",7) add_menu_item($vksr_menu_1o1_pos_note_name,"Ab",8) add_menu_item($vksr_menu_1o1_pos_note_name,"A",9) add_menu_item($vksr_menu_1o1_pos_note_name,"Bb",10) add_menu_item($vksr_menu_1o1_pos_note_name,"B",11) make_persistent($vksr_menu_1o1_pos_note_name) declare !vksr_note_names[12] !vksr_note_names[0] := "C" !vksr_note_names[1] := "Db" !vksr_note_names[2] := "D" !vksr_note_names[3] := "Eb" !vksr_note_names[4] := "E" !vksr_note_names[5] := "F" !vksr_note_names[6] := "Gb" !vksr_note_names[7] := "G" !vksr_note_names[8] := "Ab" !vksr_note_names[9] := "A" !vksr_note_names[10] := "Bb" !vksr_note_names[11] := "B" {code inlined from KSPMathV600, see http://www.bigbobsmusicworld.com/kontakt-scripts/math-library} declare %kspML_M_Logs[21] := (1000000000, 584962501, 321928095, 169925001, 87462841, 44394119, 22367813, 11227256, 5624549, 2815016, 1408195, 704269, 352178, 176099, 88052, 44028, 22014, 11006, 5504, 2751, 1376) declare $kspML_M_In declare $kspML_M_Out declare $kspML_M_Out2 declare $kspML__n2 declare $kspML__nx declare $kspML__sx {*END OF code inlined from KSPMathV600} declare $vksr_max_log2_n:=1024 declare $vksr_max_primes:=160 declare %vksr_primes[160]:=(... 2,3,5,7, 11, 13, 17, 19, 23, 29... , 31, 37, 41, 43, 47, 53, 59, 61, 67, 71... , 73, 79, 83, 89, 97,101,103,107,109,113 ... ,127,131,137,139,149,151,157,163,167,173 ... ,179,181,191,193,197,199,211,223,227,229... ... ,233,239,241,251,257,263,269,271,277,281 ... ,283,293,307,311,313,317,331,337,347,349 ... ,353,359,367,373,379,383,389,397,401,409 ... ,419,421,431,433,439,443,449,457,461,463 ... ,467,479,487,491,499,503,509,521,523,541 ... ... ,547,557,563,569,571,577,587,593,599,601 ... ,607,613,617,619,631,641,643,647,653,659 ... ,661,673,677,683,691,701,709,719,727,733 ... ,739,743,751,757,761,769,773,787,797,809 ... ,811,821,823,827,829,839,853,857,859,863 ... ... ,877,881,883,887,907,911,919,929,937,941) declare %vksr_ok_for_n_limit[128] declare $vksr_ok_for_n_limit_up_to_date:=0 declare ui_label $vksr_label_ratios_prime_limit (2,2) declare ui_value_edit $vksr_value_edit_ratios_prime_limit (0,100000,1) $vksr_value_edit_ratios_prime_limit:=13 set_text($vksr_label_ratios_prime_limit,"") set_text($vksr_value_edit_ratios_prime_limit,"Prime lim.") make_persistent($vksr_value_edit_ratios_prime_limit) declare %vksr_log2_n[1024]:= (... -1022000000, 0, 1000000, 1584963, 2000000, 2321928, 2584963, 2807355, 3000000, 3169925, 3321928, 3459432, 3584963, 3700440, 3807355, 3906891, 4000000, 4087463, 4169925, 4247928, 4321928, 4392317, 4459432, 4523562, 4584963, 4643856, 4700440, 4754888, 4807355, 4857981, 4906891, 4954196, ... 5000000, 5044394, 5087463, 5129283, 5169925, 5209453, 5247928, 5285402, 5321928, 5357552, 5392317, 5426265, 5459432, 5491853, 5523562, 5554589, 5584963, 5614710, 5643856, 5672425, 5700440, 5727920, 5754888, 5781360, 5807355, 5832890, 5857981, 5882643, 5906891, 5930737, 5954196, 5977280, ... 6000000, 6022368, 6044394, 6066089, 6087463, 6108524, 6129283, 6149747, 6169925, 6189825, 6209453, 6228819, 6247928, 6266787, 6285402, 6303781, 6321928, 6339850, 6357552, 6375039, 6392317, 6409391, 6426265, 6442943, 6459432, 6475733, 6491853, 6507795, 6523562, 6539159, 6554589, 6569856, ... 6584963, 6599913, 6614710, 6629357, 6643856, 6658211, 6672425, 6686501, 6700440, 6714246, 6727920, 6741467, 6754888, 6768184, 6781360, 6794416, 6807355, 6820179, 6832890, 6845490, 6857981, 6870365, 6882643, 6894818, 6906891, 6918863, 6930737, 6942515, 6954196, 6965784, 6977280, 6988685, ... 7000000, 7011227, 7022368, 7033423, 7044394, 7055282, 7066089, 7076816, 7087463, 7098032, 7108524, 7118941, 7129283, 7139551, 7149747, 7159871, 7169925, 7179909, 7189825, 7199672, 7209453, 7219169, 7228819, 7238405, 7247928, 7257388, 7266787, 7276124, 7285402, 7294621, 7303781, 7312883, ... 7321928, 7330917, 7339850, 7348728, 7357552, 7366322, 7375039, 7383704, 7392317, 7400879, 7409391, 7417853, 7426265, 7434628, 7442943, 7451211, 7459432, 7467606, 7475733, 7483816, 7491853, 7499846, 7507795, 7515700, 7523562, 7531381, 7539159, 7546894, 7554589, 7562242, 7569856, 7577429, ... 7584963, 7592457, 7599913, 7607330, 7614710, 7622052, 7629357, 7636625, 7643856, 7651052, 7658211, 7665336, 7672425, 7679480, 7686501, 7693487, 7700440, 7707359, 7714246, 7721099, 7727920, 7734710, 7741467, 7748193, 7754888, 7761551, 7768184, 7774787, 7781360, 7787903, 7794416, 7800900, ... 7807355, 7813781, 7820179, 7826548, 7832890, 7839204, 7845490, 7851749, 7857981, 7864186, 7870365, 7876517, 7882643, 7888743, 7894818, 7900867, 7906891, 7912889, 7918863, 7924813, 7930737, 7936638, 7942515, 7948367, 7954196, 7960002, 7965784, 7971544, 7977280, 7982994, 7988685, 7994353, ... 8000000, 8005625, 8011227, 8016808, 8022368, 8027906, 8033423, 8038919, 8044394, 8049849, 8055282, 8060696, 8066089, 8071462, 8076816, 8082149, 8087463, 8092757, 8098032, 8103288, 8108524, 8113742, 8118941, 8124121, 8129283, 8134426, 8139551, 8144658, 8149747, 8154818, 8159871, 8164907, ... 8169925, 8174926, 8179909, 8184875, 8189825, 8194757, 8199672, 8204571, 8209453, 8214319, 8219169, 8224002, 8228819, 8233620, 8238405, 8243174, 8247928, 8252665, 8257388, 8262095, 8266787, 8271463, 8276124, 8280771, 8285402, 8290019, 8294621, 8299208, 8303781, 8308339, 8312883, 8317413, ... 8321928, 8326429, 8330917, 8335390, 8339850, 8344296, 8348728, 8353147, 8357552, 8361944, 8366322, 8370687, 8375039, 8379378, 8383704, 8388017, 8392317, 8396605, 8400879, 8405141, 8409391, 8413628, 8417853, 8422065, 8426265, 8430453, 8434628, 8438792, 8442943, 8447083, 8451211, 8455327, ... 8459432, 8463524, 8467606, 8471675, 8475733, 8479780, 8483816, 8487840, 8491853, 8495855, 8499846, 8503826, 8507795, 8511753, 8515700, 8519636, 8523562, 8527477, 8531381, 8535275, 8539159, 8543032, 8546894, 8550747, 8554589, 8558421, 8562242, 8566054, 8569856, 8573647, 8577429, 8581201, ... 8584963, 8588715, 8592457, 8596190, 8599913, 8603626, 8607330, 8611025, 8614710, 8618386, 8622052, 8625709, 8629357, 8632995, 8636625, 8640245, 8643856, 8647458, 8651052, 8654636, 8658211, 8661778, 8665336, 8668885, 8672425, 8675957, 8679480, 8682995, 8686501, 8689998, 8693487, 8696968, ... 8700440, 8703904, 8707359, 8710806, 8714246, 8717676, 8721099, 8724514, 8727920, 8731319, 8734710, 8738092, 8741467, 8744834, 8748193, 8751544, 8754888, 8758223, 8761551, 8764872, 8768184, 8771489, 8774787, 8778077, 8781360, 8784635, 8787903, 8791163, 8794416, 8797662, 8800900, 8804131, ... 8807355, 8810572, 8813781, 8816984, 8820179, 8823367, 8826548, 8829723, 8832890, 8836050, 8839204, 8842350, 8845490, 8848623, 8851749, 8854868, 8857981, 8861087, 8864186, 8867279, 8870365, 8873444, 8876517, 8879583, 8882643, 8885696, 8888743, 8891784, 8894818, 8897845, 8900867, 8903882, ... 8906891, 8909893, 8912889, 8915879, 8918863, 8921841, 8924813, 8927778, 8930737, 8933691, 8936638, 8939579, 8942515, 8945444, 8948367, 8951285, 8954196, 8957102, 8960002, 8962896, 8965784, 8968667, 8971544, 8974415, 8977280, 8980140, 8982994, 8985842, 8988685, 8991522, 8994353, 8997179, ... 9000000, 9002815, 9005625, 9008429, 9011227, 9014020, 9016808, 9019591, 9022368, 9025140, 9027906, 9030667, 9033423, 9036174, 9038919, 9041659, 9044394, 9047124, 9049849, 9052568, 9055282, 9057992, 9060696, 9063395, 9066089, 9068778, 9071462, 9074141, 9076816, 9079485, 9082149, 9084808, ... 9087463, 9090112, 9092757, 9095397, 9098032, 9100662, 9103288, 9105909, 9108524, 9111136, 9113742, 9116344, 9118941, 9121534, 9124121, 9126704, 9129283, 9131857, 9134426, 9136991, 9139551, 9142107, 9144658, 9147205, 9149747, 9152285, 9154818, 9157347, 9159871, 9162391, 9164907, 9167418, ... 9169925, 9172428, 9174926, 9177420, 9179909, 9182394, 9184875, 9187352, 9189825, 9192293, 9194757, 9197217, 9199672, 9202124, 9204571, 9207014, 9209453, 9211888, 9214319, 9216746, 9219169, 9221587, 9224002, 9226412, 9228819, 9231221, 9233620, 9236014, 9238405, 9240791, 9243174, 9245553, ... 9247928, 9250298, 9252665, 9255029, 9257388, 9259743, 9262095, 9264443, 9266787, 9269127, 9271463, 9273796, 9276124, 9278449, 9280771, 9283088, 9285402, 9287712, 9290019, 9292322, 9294621, 9296916, 9299208, 9301496, 9303781, 9306062, 9308339, 9310613, 9312883, 9315150, 9317413, 9319672, ... 9321928, 9324181, 9326429, 9328675, 9330917, 9333155, 9335390, 9337622, 9339850, 9342075, 9344296, 9346514, 9348728, 9350939, 9353147, 9355351, 9357552, 9359750, 9361944, 9364135, 9366322, 9368506, 9370687, 9372865, 9375039, 9377211, 9379378, 9381543, 9383704, 9385862, 9388017, 9390169, ... 9392317, 9394463, 9396605, 9398744, 9400879, 9403012, 9405141, 9407268, 9409391, 9411511, 9413628, 9415742, 9417853, 9419960, 9422065, 9424166, 9426265, 9428360, 9430453, 9432542, 9434628, 9436712, 9438792, 9440869, 9442943, 9445015, 9447083, 9449149, 9451211, 9453271, 9455327, 9457381, ... 9459432, 9461479, 9463524, 9465566, 9467606, 9469642, 9471675, 9473706, 9475733, 9477758, 9479780, 9481799, 9483816, 9485829, 9487840, 9489848, 9491853, 9493855, 9495855, 9497852, 9499846, 9501837, 9503826, 9505812, 9507795, 9509775, 9511753, 9513728, 9515700, 9517669, 9519636, 9521600, ... 9523562, 9525521, 9527477, 9529431, 9531381, 9533330, 9535275, 9537218, 9539159, 9541097, 9543032, 9544964, 9546894, 9548822, 9550747, 9552669, 9554589, 9556506, 9558421, 9560333, 9562242, 9564149, 9566054, 9567956, 9569856, 9571753, 9573647, 9575539, 9577429, 9579316, 9581201, 9583083, ... 9584963, 9586840, 9588715, 9590587, 9592457, 9594325, 9596190, 9598053, 9599913, 9601771, 9603626, 9605480, 9607330, 9609179, 9611025, 9612868, 9614710, 9616549, 9618386, 9620220, 9622052, 9623881, 9625709, 9627534, 9629357, 9631177, 9632995, 9634811, 9636625, 9638436, 9640245, 9642052, ... 9643856, 9645658, 9647458, 9649256, 9651052, 9652845, 9654636, 9656425, 9658211, 9659996, 9661778, 9663558, 9665336, 9667112, 9668885, 9670656, 9672425, 9674192, 9675957, 9677720, 9679480, 9681238, 9682995, 9684749, 9686501, 9688250, 9689998, 9691744, 9693487, 9695228, 9696968, 9698705, ... 9700440, 9702173, 9703904, 9705632, 9707359, 9709084, 9710806, 9712527, 9714246, 9715962, 9717676, 9719389, 9721099, 9722808, 9724514, 9726218, 9727920, 9729621, 9731319, 9733015, 9734710, 9736402, 9738092, 9739781, 9741467, 9743151, 9744834, 9746514, 9748193, 9749869, 9751544, 9753217, ... 9754888, 9756556, 9758223, 9759888, 9761551, 9763212, 9764872, 9766529, 9768184, 9769838, 9771489, 9773139, 9774787, 9776433, 9778077, 9779719, 9781360, 9782998, 9784635, 9786270, 9787903, 9789534, 9791163, 9792790, 9794416, 9796040, 9797662, 9799282, 9800900, 9802516, 9804131, 9805744, ... 9807355, 9808964, 9810572, 9812177, 9813781, 9815383, 9816984, 9818582, 9820179, 9821774, 9823367, 9824959, 9826548, 9828136, 9829723, 9831307, 9832890, 9834471, 9836050, 9837628, 9839204, 9840778, 9842350, 9843921, 9845490, 9847057, 9848623, 9850187, 9851749, 9853310, 9854868, 9856426, ... 9857981, 9859535, 9861087, 9862637, 9864186, 9865733, 9867279, 9868823, 9870365, 9871905, 9873444, 9874981, 9876517, 9878051, 9879583, 9881114, 9882643, 9884171, 9885696, 9887221, 9888743, 9890264, 9891784, 9893302, 9894818, 9896332, 9897845, 9899357, 9900867, 9902375, 9903882, 9905387, ... 9906891, 9908393, 9909893, 9911392, 9912889, 9914385, 9915879, 9917372, 9918863, 9920353, 9921841, 9923327, 9924813, 9926296, 9927778, 9929258, 9930737, 9932215, 9933691, 9935165, 9936638, 9938109, 9939579, 9941048, 9942515, 9943980, 9945444, 9946906, 9948367, 9949827, 9951285, 9952741, ... 9954196, 9955650, 9957102, 9958553, 9960002, 9961450, 9962896, 9964341, 9965784, 9967226, 9968667, 9970106, 9971544, 9972980, 9974415, 9975848, 9977280, 9978710, 9980140, 9981567, 9982994, 9984418, 9985842, 9987264, 9988685, 9990104, 9991522, 9992938, 9994353, 9995767, 9997179, 9998590... ) make_persistent ($vksr_1o1_millicents) make_persistent ($vksr_menu_show_more) make_persistent ($vksr_knob_Note) make_persistent ($vksr_knob_To) make_persistent ($vksr_knob_Cents) make_persistent ($vksr_knob_CentiCents) make_persistent ($vksr_knob_LastDigit) make_persistent ($vksr_button_ResetTo12EQ) make_persistent ($vksr_value_edit_n_equal) make_persistent ($vksr_menu_scale_Black) make_persistent ($vksr_value_edit_n_equal_black) make_persistent ($vksr_menu_scale_tuning) make_persistent ($vksr_label_tuning_description) make_persistent ($vksr_label_tuning_definition) make_persistent (@vksr_tuning_description_string) make_persistent (@vksr_tuning_definition_string) make_persistent (%vksr_pitch_bend_for_output_note) make_persistent (%vksr_total_millicents_on_set_denum) make_persistent (%vksr_denum_for_output_note) make_persistent (%vksr_denom_for_output_note) make_persistent (%vksr_output_note) make_persistent ($vksr_menu_scroll_scale) make_persistent ($vksr_Note_user_edited) make_persistent ($vksr_Note_played) make_persistent ($vksr_value_edit_scroll_scale_midi_start) make_persistent ($vksr_value_edit_scroll_scale_show_before) make_persistent($vksr_value_edit_Note) make_persistent($vksr_value_edit_To) make_persistent($vksr_value_edit_Cents) make_persistent($vksr_value_edit_digits_precision) set_text ($vksr_knob_CentiCents,"Centicents") set_text ($vksr_knob_LastDigit,"Last digit") set_text ($vksr_button_ResetTo12EQ,"Reset to 12-equal") declare $vksr_move_ui_vertically :=0 set_text ($vksr_value_edit_To,"To") set_text ($vksr_value_edit_Cents,"Cents") set_text ($vksr_value_edit_digits_precision,"Dec. pt") set_text ($vksr_value_edit_n_equal,"n") $vksr_value_edit_n_equal:=24 set_text ($vksr_value_edit_n_equal,"n") set_text ($vksr_value_edit_denum,"Ratio") set_text ($vksr_value_edit_denom,"over") _read_persistent_var($vksr_menu_show_more) _read_persistent_var($vksr_value_edit_n_equal_black) _read_persistent_var($vksr_menu_scale_tuning) _read_persistent_var($vksr_menu_scroll_scale) {DUPLICATES ******call hide_user_interface except here it also shows $vksr_button_ResetTo12EQ ********} move_control($vksr_button_ResetTo12EQ,1,1) {just show the reset to 12et button} move_control($vksr_label_tuning_method,0,0) move_control($vksr_label_documentation,0,0) move_control($vksr_value_edit_1o1_transpose,0,0) move_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,0,0) move_control($vksr_label_tuning_method,0,0) move_control($vksr_value_edit_n_equal,0,0) move_control($vksr_value_edit_denum,0,0) move_control($vksr_value_edit_denom,0,0) move_control($vksr_label_note_played,0,0) move_control($vksr_value_edit_digits_precision,0,0) move_control($vksr_menu_scale_tuning,0,0) move_control($vksr_menu_show_more,0,0) move_control($vksr_value_edit_scroll_scale_show_before,0,0) move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_menu_scroll_scale,0,0) move_control($vksr_menu_show_more,0,0) move_control($vksr_knob_Note,0,0) move_control($vksr_menu_midi_tuning_method,0,0) move_control($vksr_knob_To,0,0) move_control($vksr_knob_Cents,0,0) move_control($vksr_value_edit_Note,0,0) move_control($vksr_value_edit_To,0,0) move_control($vksr_value_edit_Cents,0,0) move_control($vksr_value_edit_digits_precision,0,0) move_control($vksr_knob_CentiCents,0,0) move_control($vksr_knob_LastDigit,0,0) move_control($vksr_label_tuning_description,0,0) move_control($vksr_label_tuning_definition,0,0) move_control($vksr_menu_1o1_pos_note_name,0,0) move_control($vksr_value_edit_n_equal_black,0,0) move_control($vksr_menu_show_diagnostics,0,0) move_control($vksr_menu_apply_skin,0,0) move_control($vksr_label_instrument_range,0,2) move_control($vksr_value_edit_instrument_range_min,0,0) move_control($vksr_value_edit_instrument_range_max,0,0) move_control($vksr_label_instrument_range2,0,0) move_control($vksr_value_edit_first_harmonic,0,0) move_control($vksr_value_edit_first_harmonic_black,0,0) move_control($vksr_menu_scale_Black,0,0) move_control($vksr_value_edit_ratios_prime_limit,0,0) move_control($vksr_label_ratios_prime_limit,0,0) move_control($vksr_value_edit_ratio_recognition_sensitivity,0,0) move_control($vksr_label_ratio_recognition_sensitivity,0,0) move_control($vksr_label_ratio_recognition_sensitivity2,0,0) {END OF DUPLICATES ******call hide_user_interface********} if($vksr_hide_user_interface=0) {DUPLICATES: ***********call vksr_move_controls************* - call of function not permitted in on init } $vksr_temp2:=1 $vksr_temp:=6 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} if($vksr_menu_show_more=$vksr_sm_LESS) $vksr_temp:=4 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) $vksr_temp2:=1 $vksr_temp:=5 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_MORE) $vksr_temp:=6 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) $vksr_temp:=3 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) $vksr_temp:=4 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_DOCUMENTATION) move_control($vksr_label_documentation,1,1) move_control($vksr_menu_show_more,6,1) move_control($vksr_button_ResetTo12EQ,6,2) else { if($vksr_menu_show_more=$vksr_sm_PER_NOTE_PAN_AND_VOLUME) move_control($vksr_menu_show_more,6,1) else end if } if($vksr_menu_show_more=$vksr_sm_TWEAKS) move_control($vksr_button_ResetTo12EQ,0,0) move_control($vksr_label_instrument_range,1,1) move_control($vksr_value_edit_instrument_range_min,2,2) move_control($vksr_value_edit_instrument_range_max,3,1) move_control($vksr_label_instrument_range2,1,2) move_control($vksr_menu_show_diagnostics,5,1) move_control($vksr_label_ratio_recognition_sensitivity,1,4) move_control($vksr_value_edit_ratio_recognition_sensitivity,3,4) move_control($vksr_label_ratio_recognition_sensitivity2,4,4) move_control($vksr_value_edit_ratios_prime_limit,5,4) move_control($vksr_label_ratios_prime_limit,5,5) move_control($vksr_label_note_played,1,5) move_control($vksr_value_edit_denum,2,5) move_control($vksr_value_edit_denom,3,5) move_control($vksr_menu_apply_skin,4,1) move_control($vksr_menu_show_more,6,1) move_control($vksr_value_edit_digits_precision,6,2) else move_control($vksr_menu_scale_Black,$vksr_temp2,$vksr_temp+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_n_equal_black,0,0) if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o1... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o2... ) move_control($vksr_value_edit_n_equal_black,$vksr_temp2+1,$vksr_temp+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_scale_black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS) move_control($vksr_value_edit_first_harmonic_black,$vksr_temp2+1,$vksr_temp+$vksr_ui_extra_vertical_shift) end if {(1,$vksr_temp2+6+$vksr_ui_extra_vertical_shift)} $vksr_temp:=0 { for $vksr_value_edit_1o1_transpose etc extra shift} $vksr_temp2:=0 { for $vksr_menu_scale_Black etc extra shift} if($vksr_menu_show_more=$vksr_sm_LESS) $vksr_temp:=-2 $vksr_temp2:=-2 end if if($vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) $vksr_temp:=-1 $vksr_temp2:=0 end if if($vksr_menu_show_more=$vksr_sm_MORE) $vksr_temp:=0 $vksr_temp2:=0 end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) $vksr_temp:=-3 $vksr_temp2:=-3 end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) $vksr_temp:=-2 $vksr_temp2:=-2 end if move_control($vksr_value_edit_1o1_transpose,0,0) {Not really needed, got Tune control anyway in main kontakt instrument disply 4,$vksr_temp+6+$vksr_ui_extra_vertical_shift)} move_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,5,$vksr_temp+6+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_1o1_pos_note_name,6,$vksr_temp+6+$vksr_ui_extra_vertical_shift) if($vksr_menu_show_more=$vksr_sm_MORE_WITH_SCALE) {isn't enough space in ui for these} move_control($vksr_value_edit_n_equal_black,0,0) move_control($vksr_menu_scale_Black,0,0) move_control($vksr_value_edit_1o1_transpose,0,0) move_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,0,0 ) move_control($vksr_menu_1o1_pos_note_name,0,0) end if if($vksr_menu_show_more=$vksr_sm_LESS or $vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE ... or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) {hide knobs} $vksr_move_ui_vertically:=-2 move_control($vksr_knob_Note,0,0) move_control($vksr_knob_To,0,0) move_control($vksr_knob_Cents,0,0) move_control($vksr_knob_CentiCents,0,0) move_control($vksr_knob_LastDigit,0,0) else $vksr_move_ui_vertically:=0 move_control($vksr_knob_Note,1,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_To,2,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_Cents,3,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_CentiCents,4,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_LastDigit,5,1+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY ... or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) {tuning only} $vksr_move_ui_vertically:=-3 move_control($vksr_button_ResetTo12EQ,0,0) move_control($vksr_value_edit_Note,0,0) move_control($vksr_value_edit_To,0,0) move_control($vksr_value_edit_Cents,0,0) move_control($vksr_value_edit_denum,0,0) move_control($vksr_value_edit_denom,0,0) if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) move_control($vksr_menu_show_more,6,2+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) move_control($vksr_menu_scroll_scale,1,4+$vksr_ui_extra_vertical_shift) if($vksr_menu_scroll_scale=$vksr_scroll_scale_TO_SELECTED_NOTE+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_scroll_scale_midi_start,2,4+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_scroll_scale_show_before,0,0) else move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_value_edit_scroll_scale_show_before,2,4+$vksr_ui_extra_vertical_shift) end if move_control($vksr_menu_show_more,6,1+$vksr_ui_extra_vertical_shift) end if else {#($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE+$vksr_ui_extra_vertical_shift) } {tuning + user note edit controls} move_control($vksr_button_ResetTo12EQ,6,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_Note,1,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_To,2,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_Cents,3,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_denum,4,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_denom,5,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) if($vksr_menu_show_more=$vksr_sm_MORE_WITH_SCALE) {Only available space to far right below more drop menu} move_control($vksr_button_ResetTo12EQ,6,2) move_control($vksr_menu_scale_Black,6,3) if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o1... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o2... ) move_control($vksr_value_edit_n_equal_black,6,4) end if if($vksr_menu_scale_black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS) move_control($vksr_value_edit_first_harmonic_black,6,4) end if end if if($vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) {has 12-et reset button at far right so move to positions 4, 5 } if($vksr_menu_scroll_scale=$vksr_scroll_scale_TO_SELECTED_NOTE) move_control($vksr_value_edit_scroll_scale_midi_start,4,5+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_scroll_scale_show_before,0,0) else move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_value_edit_scroll_scale_show_before,4,5+$vksr_ui_extra_vertical_shift) end if move_control($vksr_menu_scroll_scale,3,5+$vksr_ui_extra_vertical_shift) end if {move_control($vksr_menu_show_more,6,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) } move_control($vksr_menu_show_more,6,1+$vksr_ui_extra_vertical_shift) end if move_control($vksr_label_tuning_method,3,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_midi_tuning_method,6,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_definition,3,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_description,3,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_scale_tuning,1,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_label_note_played,1,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_digits_precision,2,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_n_equal,0,0) move_control($vksr_value_edit_first_harmonic,0,0) if($vksr_menu_show_more=$vksr_sm_LESS or $vksr_menu_show_more=$vksr_sm_MORE ... or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) {no tuning definition} move_control($vksr_label_tuning_definition,0,0) move_control($vksr_menu_scroll_scale,0,0) move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_value_edit_scroll_scale_show_before,0,0) end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL... or $vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o1... or $vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o2... ) move_control($vksr_value_edit_n_equal,2,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_HARMONIC_AND_SUBHARMONICS) move_control($vksr_value_edit_first_harmonic,2,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_show_more,6,1+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_method,3,2+$vksr_ui_extra_vertical_shift) {hide everything except tuning drop down and related controls} move_control($vksr_menu_midi_tuning_method,6,2+$vksr_ui_extra_vertical_shift) move_control($vksr_label_note_played,1,2+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_digits_precision,0,0){(2,2+$vksr_ui_extra_vertical_shift) } end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_method,3,2+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_definition,1,3+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_LESS or $vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) {Could hide it?} move_control($vksr_value_edit_digits_precision,0,0) {} end if {end if } end if end if {END OF: DUPLICATES: ************call vksr_move_controls*********** - call of function not permitted in on init } end if {$vksr_hide_user_interface=0} declare $vksr_MilliCents := 0 $vksr_button_ResetTo12EQ := 1 {press the "reset to 12 et" button} _read_persistent_var($vksr_button_ResetTo12EQ) if($vksr_button_ResetTo12EQ=1) {DUPLICATES: ************call vksr_reset_to_12et************** - call of function not permitted in on init } $vksr_knob_Note := 0 $vksr_knob_To := 0 $vksr_knob_Cents := 0 $vksr_knob_CentiCents := 0 $vksr_knob_LastDigit := 0 $vksr_i := 0 while ($vksr_i<128) %vksr_is_active[$vksr_i] := 0 %vksr_note_id[$vksr_i] := 0 %vksr_output_note_at_note_on[$vksr_i] := $vksr_i %vksr_pitch_bend_for_output_note_at_note_on[$vksr_i] := 0 { This has no effect if these are set to make_persistent } %vksr_pitch_bend_for_output_note[$vksr_i] := 0 %vksr_total_millicents_on_set_denum[$vksr_i]:=0 %vksr_denum_for_output_note[$vksr_i] := 0 %vksr_denom_for_output_note[$vksr_i] := 0 %vksr_output_note[$vksr_i] := $vksr_i $vksr_i := $vksr_i+1 end while end if {END OF DUPLICATES *********call vksr_reset_to_12et**********} make_persistent($vksr_menu_apply_skin) _read_persistent_var($vksr_menu_apply_skin) if($vksr_menu_apply_skin#0) { DUPLICATES cal set_skin_or_remove} if($vksr_button_ResetTo12EQ=0) set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,@vksr_skin_button) else set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"") end if {Note, can't seem to do this for value_edits - get kontakt error message "expression expected"} {} if($vksr_button_ResetTo12EQ=0) set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,@vksr_skin_button) else set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"") end if {Note, can't seem to do this for value_edits - get kontakt error message "expression expected"} {} if($vksr_menu_apply_skin=2){transparent label backgrounds} { With transparent background, can't see the scroll bar to right when too much text to fit in page set_control_par_str(get_ui_id($vksr_label_ratios_prime_limit), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) } set_control_par_str(get_ui_id($vksr_label_instrument_range), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_instrument_range2), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_note_played), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_tuning_method), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_tuning_description), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_tuning_definition), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity2), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) else {set_control_par_str(get_ui_id($vksr_label_ratios_prime_limit), $CONTROL_PAR_PICTURE,"")} set_control_par_str(get_ui_id($vksr_label_instrument_range), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_instrument_range2), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_note_played), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_method), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_description), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_definition), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity2), $CONTROL_PAR_PICTURE,"") end if set_control_par_str(get_ui_id($vksr_menu_apply_skin), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_1o1_pos_note_name), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_scroll_scale), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_midi_tuning_method), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_scale_tuning), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_scale_Black), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_show_more), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_show_diagnostics), $CONTROL_PAR_PICTURE,@vksr_skin_menu) end if { END OF DUPLICATES cal set_skin_or_remove} { This is work in progress - may add it later} declare $vksr_ok_process_volume_and_pan_keyswitches:=0 { add_menu_item($vksr_menu_show_more,"Per note stereo pan & volume",$vksr_menu_item_pos) $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare $vksr_sm_PER_NOTE_PAN_AND_VOLUME $vksr_sm_PER_NOTE_PAN_AND_VOLUME :=$vksr_menu_item_pos $vksr_menu_item_pos:=$vksr_menu_item_pos+1 declare ui_menu $vksr_menu_adjust_volume_and_pan add_menu_item($vksr_menu_adjust_volume_and_pan,"Don't adjust volume or pan",0) add_menu_item($vksr_menu_adjust_volume_and_pan,"Adjust volume and pan",1) make_persistent($vksr_menu_adjust_volume_and_pan) $vksr_ok_process_volume_and_pan_keyswitches:1 declare ui_menu $vksr_adjust_pan_and_volume declare ui_knob $vksr_knob_Pan(-500000,500000, 1000) $vksr_knob_Pan:=0 set_text ($vksr_knob_Pan,"Pan") declare ui_value_edit $vksr_value_edit_Pan (0,127,1) set_text ($vksr_value_edit_Pan,"Pan") declare ui_knob $vksr_knob_Volume(0, 100000, 1000) set_text ($vksr_knob_Note,"Volume") $vksr_knob_Volume:=500000 declare ui_value_edit $vksr_value_edit_Volume (0,127,1) set_text ($vksr_value_edit_Volume,"Volume") } end on { on init } function set_skin_or_remove if($vksr_menu_apply_skin#0) { This displays warning about not found - is easy enough to set it using "instrument options" set_control_par_str($INST_WALLPAPER_ID, $CONTROL_PAR_PICTURE,"background") } if($vksr_button_ResetTo12EQ=0) set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,@vksr_skin_button) else set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"") end if {Note, can't seem to do this for value_edits - get kontakt error message "expression expected"} {} if($vksr_button_ResetTo12EQ=0) set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,@vksr_skin_button) else set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"") end if {Note, can't seem to do this for value_edits - get kontakt error message "expression expected"} {} if($vksr_menu_apply_skin=2){transparent label backgrounds} { With transparent background, can't see the scroll bar to right when too much text to fit in page set_control_par_str(get_ui_id($vksr_label_ratios_prime_limit), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) } set_control_par_str(get_ui_id($vksr_label_instrument_range), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_instrument_range2), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_note_played), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_tuning_method), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_tuning_description), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_tuning_definition), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity2), $CONTROL_PAR_PICTURE,@vksr_skin_transparent_background) else {set_control_par_str(get_ui_id($vksr_label_ratios_prime_limit), $CONTROL_PAR_PICTURE,"")} set_control_par_str(get_ui_id($vksr_label_instrument_range), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_instrument_range2), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_note_played), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_method), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_description), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_definition), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity2), $CONTROL_PAR_PICTURE,"") end if set_control_par_str(get_ui_id($vksr_menu_apply_skin), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_1o1_pos_note_name), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_scroll_scale), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_midi_tuning_method), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_scale_tuning), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_scale_Black), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_show_more), $CONTROL_PAR_PICTURE,@vksr_skin_menu) set_control_par_str(get_ui_id($vksr_menu_show_diagnostics), $CONTROL_PAR_PICTURE,@vksr_skin_menu) else {$vksr_menu_apply_skin=0} set_control_par_str(get_ui_id($vksr_menu_1o1_pos_note_name), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_apply_skin), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_scale_Black), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_note_played), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_method), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_description), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_tuning_definition), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_scroll_scale), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_midi_tuning_method), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_scale_tuning), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_show_more), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_menu_show_diagnostics), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_instrument_range), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_instrument_range2), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity), $CONTROL_PAR_PICTURE,"") set_control_par_str(get_ui_id($vksr_label_ratio_recognition_sensitivity2), $CONTROL_PAR_PICTURE,"") end if end function on ui_control ($vksr_menu_apply_skin) call set_skin_or_remove end on function hide_user_interface move_control($vksr_button_ResetTo12EQ,0,0) move_control($vksr_value_edit_1o1_transpose,0,0) move_control($vksr_menu_1o1_pos_note_name,0,0) move_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,0,0) move_control($vksr_label_tuning_method,0,0) move_control($vksr_label_documentation,0,0) move_control($vksr_value_edit_n_equal,0,0) move_control($vksr_value_edit_denum,0,0) move_control($vksr_value_edit_denom,0,0) move_control($vksr_label_note_played,0,0) move_control($vksr_value_edit_digits_precision,0,0) move_control($vksr_menu_scale_tuning,0,0) move_control($vksr_menu_show_more,0,0) move_control($vksr_value_edit_scroll_scale_show_before,0,0) move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_menu_scroll_scale,0,0) move_control($vksr_menu_show_more,0,0) move_control($vksr_knob_Note,0,0) move_control($vksr_menu_midi_tuning_method,0,0) move_control($vksr_knob_To,0,0) move_control($vksr_knob_Cents,0,0) move_control($vksr_value_edit_Note,0,0) move_control($vksr_value_edit_To,0,0) move_control($vksr_value_edit_Cents,0,0) move_control($vksr_value_edit_digits_precision,0,0) move_control($vksr_knob_CentiCents,0,0) move_control($vksr_knob_LastDigit,0,0) move_control($vksr_label_tuning_description,0,0) move_control($vksr_label_tuning_definition,0,0) move_control($vksr_menu_1o1_pos_note_name,0,0) move_control($vksr_menu_scale_Black,0,0) move_control($vksr_value_edit_n_equal_black,0,0) move_control($vksr_menu_show_diagnostics,0,0) move_control($vksr_label_instrument_range,0,2) move_control($vksr_value_edit_instrument_range_min,0,0) move_control($vksr_value_edit_instrument_range_max,0,0) move_control($vksr_label_instrument_range2,0,0) move_control($vksr_value_edit_first_harmonic,0,0) move_control($vksr_value_edit_first_harmonic_black,0,0) move_control($vksr_menu_scale_Black,0,0) move_control($vksr_menu_apply_skin,0,0) move_control($vksr_value_edit_ratio_recognition_sensitivity,0,0) move_control($vksr_value_edit_ratios_prime_limit,0,0) move_control($vksr_label_ratios_prime_limit,0,0) move_control($vksr_label_ratio_recognition_sensitivity,0,0) move_control($vksr_label_ratio_recognition_sensitivity2,0,0) end function function vksr_find_cents_string_for_offset_in_millicents $vksr_temp:=$vksr_offset_in_millicents if($vksr_offset_in_millicents<0) $vksr_temp:=-$vksr_offset_in_millicents end if $vksr_temp:=$vksr_temp mod 1000 $vksr_temp2:=100 select($vksr_value_edit_digits_precision) case 2 {e.g. $vksr_temp = 15 truncate upwards to 20 } $vksr_temp:=($vksr_temp+5)/10 $vksr_temp2:=10 case 1 {e.g. $vksr_temp = 150 truncate upwards to 200 } $vksr_temp:=($vksr_temp+50)/100 $vksr_temp2:=1 case 0 $vksr_temp:=($vksr_temp+500)/1000 end select @vksr_temp:="" {This is used to add leading 0s after decimal point e.g. 50.055 then $vksr_temp will be 55, @vksr_temp needs to be "0" } if($vksr_temp<$vksr_temp2) @vksr_temp:="0" end if if($vksr_temp<$vksr_temp2/10) @vksr_temp:="00" end if if($vksr_temp=0) @vksr_temp:="" end if { now deal with case e.g. offset%vksr_1000 is 500 want to show only the single digit 5 after decimal point i.e. need to remove trailing 0s } if($vksr_temp mod 100 = 0) $vksr_temp:=$vksr_temp/100 end if if($vksr_temp mod 10 = 0) $vksr_temp:=$vksr_temp/10 end if @vksr_cents_or_ratio_for_offset_in_milliseconds:=$vksr_offset_in_millicents/1000 & "."& @vksr_temp & $vksr_temp if($vksr_value_edit_digits_precision=0) $vksr_temp:=$vksr_offset_in_millicents/1000 + $vksr_temp @vksr_cents_or_ratio_for_offset_in_milliseconds:=$vksr_temp & "" end if end function function find_1o1 {idea here, user can set the 1/1 by setting denum and denom to 1 - and then if they change it later to a scale without a 1/1, doesn't matter, remembers this value } $vksr_i:=0 while ($vksr_i<128) if(%vksr_denum_for_output_note[$vksr_i]=1 and %vksr_denom_for_output_note[$vksr_i]=1) $vksr_1o1_millicents:=%vksr_output_note[$vksr_i]*$vksr_semitone_in_millicents... +%vksr_pitch_bend_for_output_note[$vksr_i] end if $vksr_i:=$vksr_i+1 end while end function function find_vksr_istart_for_tuning_definition_string $vksr_istart := $vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 if( $vksr_menu_scroll_scale= $vksr_scroll_scale_TO_SELECTED_NOTE) $vksr_istart:=$vksr_value_edit_scroll_scale_midi_start end if if( $vksr_menu_scroll_scale= $vksr_scroll_scale_ON_EDIT and $vksr_Note_user_edited>=0) $vksr_istart:=$vksr_Note_user_edited-$vksr_value_edit_scroll_scale_show_before end if if( $vksr_menu_scroll_scale=$vksr_scroll_scale_ON_PLAY and $vksr_Note_played>=0) $vksr_istart:=$vksr_Note_played-$vksr_value_edit_scroll_scale_show_before end if if( $vksr_menu_scroll_scale= $vksr_scroll_scale_ON_BOTH) $vksr_istart:=$vksr_knob_Note-$vksr_value_edit_scroll_scale_show_before end if if($vksr_istart<0) $vksr_istart:=0 end if if($vksr_istart>120) $vksr_istart:=120 end if end function {code inlined from KSPMathV600, see http://www.bigbobsmusicworld.com/kontakt-scripts/math-library} function kspML__NLZ $kspML_M_Out := 1 select ($kspML_M_In) case 1 to 127 $kspML_M_Out := 25 case 128 to 4095 $kspML_M_Out := 19 case 4096 to 262143 $kspML_M_Out := 13 case 262144 to 16777215 $kspML_M_Out := 7 end select select (sh_left($kspML_M_In,$kspML_M_Out-1)) case 16777216 to 33554431 $kspML_M_Out := $kspML_M_Out+6 case 33554432 to 67108863 $kspML_M_Out := $kspML_M_Out+5 case 67108864 to 134217727 $kspML_M_Out := $kspML_M_Out+4 case 134217728 to 268435455 $kspML_M_Out := $kspML_M_Out+3 case 268435456 to 536870911 $kspML_M_Out := $kspML_M_Out+2 case 536870912 to 1073741823 $kspML_M_Out := $kspML_M_Out+1 end select end function function kspML__Lg if ($kspML_M_In<=0) $kspML_M_Out := 080000000h else call kspML__NLZ dec($kspML_M_Out) $kspML__nx := sh_left($kspML_M_In,$kspML_M_Out) $kspML_M_Out2 := 30-$kspML_M_Out if ($kspML__nx=1073741824) $kspML_M_Out := 0 else $kspML_M_Out := 999999312 $kspML__n2 := 1 while ($kspML__n2<=20 and ($kspML__nx>=0)) $kspML__sx := sh_right($kspML__nx,$kspML__n2) if (-$kspML__nx-$kspML__sx<0) $kspML__nx := $kspML__nx+$kspML__sx $kspML_M_Out := $kspML_M_Out-%kspML_M_Logs[$kspML__n2] end if inc($kspML__n2) end while $kspML_M_Out := ($kspML_M_Out+500)/1000 end if end if end function function kspML__Log2 call kspML__Lg if ($kspML_M_Out>=0) $kspML_M_Out := $kspML_M_Out+($kspML_M_Out2*1000000) end if end function {end of code inlined from KSPMathV600, see http://www.bigbobsmusicworld.com/kontakt-scripts/math-library} function vksr_Log2_arg if($vksr_arg<$vksr_max_log2_n) $vksr_result:=%vksr_log2_n[$vksr_arg] else { calculates Log2($vksr_arg)*1000000 } $kspML_M_In:=$vksr_arg call kspML__Log2 $vksr_result := $kspML_M_Out end if end function function vksr_convert_ratio_to_millicents {set $vksr_denum and $vksr_denom before calling this } {returns value as $vksr_offset_in_millicents} { Calculate: 1200 *1000 * ( Log2($vksr_value_edit_denum) - log2($vksr_value_edit_denom)) } $vksr_result:=0 $vksr_arg:=$vksr_denum call vksr_Log2_arg $vksr_temp:=$vksr_result $vksr_arg:=$vksr_denom call vksr_Log2_arg $vksr_temp2:=$vksr_result if($vksr_temp2>=0 and $vksr_temp>=0) { $vksr_temp:=12*($vksr_temp-$vksr_temp2)} { $vksr_offset_in_millicents:=$vksr_temp} $vksr_temp:=12*($vksr_temp-$vksr_temp2) $vksr_result:=$vksr_temp/10 {i.e. * $vksr_semitone_in_millicents/1000000} end if end function function vksr_find_gcd_u_v {call with $vksr_u and vksr_v returns gcd$vksr_result } $vksr_result:=0 {GCD(0,v) == v; GCD(u,0) == u, GCD(0,0) == 0 } if ($vksr_u= 0) $vksr_result:=$vksr_v end if if ($vksr_v= 0) $vksr_result:=$vksr_u end if if($vksr_u#0 and $vksr_v#0) $vksr_gcd_common_factors_of_2:=1 while ($vksr_u mod 2 = 0 and $vksr_v mod 2 = 0) $vksr_u:=$vksr_u/2 $vksr_v:=$vksr_v/2 $vksr_gcd_common_factors_of_2 :=$vksr_gcd_common_factors_of_2*2 end while while ($vksr_u mod 2 = 0) {remove non common factors of 2 in $vksr_u} $vksr_u:=$vksr_u/2 end while {From here on, $vksr_u is always odd.} while ($vksr_v#0) while ($vksr_v mod 2 = 0) {remove non common factors of 2 in v} $vksr_v:=$vksr_v/2 end while {v#0 here so while loop will terminate} {Now $vksr_u and v are both odd. Swap if necessary so $vksr_u <= v} if ($vksr_u > $vksr_v) $vksr_t :=$vksr_v $vksr_v := $vksr_u $vksr_u := $vksr_t end if {If $vksr_u and v are both odd, and v = $vksr_u, then gcd(v, $vksr_u) = gcd((v - $vksr_u)/2, $vksr_u)} $vksr_v := $vksr_v - $vksr_u {must be even} end while {restore common factors of 2} $vksr_result:= $vksr_u * $vksr_gcd_common_factors_of_2 end if {$vksr_u#0 and vksr_v#0} { message("u " & $vksr_u & " v " & $vksr_v & " 2f " & $vksr_gcd_common_factors_of_2 & " result " & $vksr_result)} end function function vksr_remove_common_multiples_denum_denom if($vksr_denum>0 and $vksr_denom > 0) $vksr_u:=$vksr_denum $vksr_v:= $vksr_denom call vksr_find_gcd_u_v if($vksr_result#0 and $vksr_denum mod $vksr_result = 0 and $vksr_denom mod $vksr_result = 0) $vksr_denum:=$vksr_denum/$vksr_result $vksr_denom:=$vksr_denom/$vksr_result end if end if end function function vksr_convert_millicents_to_ratio {set $vksr_offset_in_millicents before calling this } {returns value as $vksr_denum and $vksr_denom} {Not optimized so best called in response to user action rather than in big while loop} $vksr_ii:=1 if($vksr_ok_for_n_limit_up_to_date=0) {check to find out which numbers are okay to the prime limit i.e. only divisible by primes less than $vksr_value_edit_ratios_prime_limit} $vksr_ok_for_n_limit_up_to_date:=1 @vksr_temp:="" if($vksr_value_edit_ratios_prime_limit=0) while ($vksr_ii<128) %vksr_ok_for_n_limit[$vksr_ii]:=1 @vksr_temp:=@vksr_temp & $vksr_ii & ", " $vksr_ii:=$vksr_ii+1 end while else while ($vksr_ii<128) %vksr_ok_for_n_limit[$vksr_ii]:=0 $vksr_temp:=$vksr_ii $vksr_jj:=0 while ($vksr_jj<=$vksr_max_primes and %vksr_primes[$vksr_jj]<128 and %vksr_primes[$vksr_jj]<=$vksr_value_edit_ratios_prime_limit) if($vksr_temp mod %vksr_primes[$vksr_jj] = 0) $vksr_temp:=$vksr_temp/%vksr_primes[$vksr_jj] else $vksr_jj:=$vksr_jj+1 end if end while if($vksr_temp=1) @vksr_temp:=@vksr_temp & $vksr_ii & ", " %vksr_ok_for_n_limit[$vksr_ii]:=1 end if $vksr_ii:=$vksr_ii+1 end while end if set_text($vksr_label_ratios_prime_limit,@vksr_temp) end if {$vksr_ok_for_n_limit_up_to_date=0} $vksr_temp:=0 $vksr_ii:=1 $vksr_jj:=1 $vksr_denum:=0 $vksr_denom:=0 {try all ratios from 1/1 to 128/128 - this is 16384 iterations so well withiun the kontakt limit of 49999 iterations } while ($vksr_ii<128) if(%vksr_ok_for_n_limit[$vksr_ii]#0) $vksr_jj:=1 while ($vksr_jj<128) if(%vksr_ok_for_n_limit[$vksr_jj]#0) if($vksr_denum=0 or $vksr_denom=0) $vksr_denum:=$vksr_ii $vksr_denom:=$vksr_jj call vksr_convert_ratio_to_millicents if($vksr_menu_show_diagnostics#0) { if($vksr_denum=3) if($vksr_denom=2) message(" test: offset " & $vksr_offset_in_millicents ... & " ratio " & $vksr_denum... & "/" & $vksr_denom & " is " & $vksr_result ) end if end if } end if if($vksr_result>($vksr_offset_in_millicents+$vksr_value_edit_ratio_recognition_sensitivity)... or $vksr_result<($vksr_offset_in_millicents-$vksr_value_edit_ratio_recognition_sensitivity)... ) $vksr_denum:=0 $vksr_denom:=0 else if($vksr_menu_show_diagnostics#0) { if($vksr_denum=3) if($vksr_denom=2) message(" test: offset " & $vksr_offset_in_millicents ... & " ratio " & $vksr_denum... & "/" & $vksr_denom & " is " & $vksr_result ) end if end if } end if end if end if {$vksr_denum=0 or $vksr_denom=0} end if {vksr_ok_for_n_limit[$vksr_jj]#0} $vksr_jj:=$vksr_jj+1 end while end if {%vksr_ok_for_n_limit[$vksr_ii]#0} $vksr_ii:=$vksr_ii+1 end while call vksr_remove_common_multiples_denum_denom end function function vksr_find_cents_or_ratios_string_for_arg_check_knob_Note if($vksr_arg>=0 and $vksr_arg< 128) if($vksr_ok_check_knob_Note_for_find_cents_or_ratios_string#0 and $vksr_arg=$vksr_knob_Note) $vksr_value_edit_denum:=0 $vksr_value_edit_denom:=0 end if $vksr_offset_in_millicents:=%vksr_output_note[$vksr_arg]*$vksr_semitone_in_millicents+ %vksr_pitch_bend_for_output_note[$vksr_arg] if($vksr_menu_show_diagnostics#0) { if($vksr_arg=$vksr_knob_Note) message("note (same as user edited) " & $vksr_arg & " offset " & $vksr_offset_in_millicents & " from " & $vksr_1o1_millicents... & " millicents from midi 0 = " & %vksr_total_millicents_on_set_denum[$vksr_arg] ... & " ratio " & %vksr_denum_for_output_note[$vksr_arg]... & "/" & %vksr_denom_for_output_note[$vksr_arg]... & " user interface ratio " & $vksr_value_edit_denum & " / " & $vksr_value_edit_denom) end if } end if $vksr_offset_in_millicents:=$vksr_offset_in_millicents-$vksr_1o1_millicents call vksr_find_cents_string_for_offset_in_millicents if(%vksr_denum_for_output_note[$vksr_arg]#0 and %vksr_denom_for_output_note[$vksr_arg]#0) if(%vksr_total_millicents_on_set_denum[$vksr_arg]=... $vksr_semitone_in_millicents*%vksr_output_note[$vksr_arg]+%vksr_pitch_bend_for_output_note[$vksr_arg]) {same cents value in milliseconds as when scale was made so can use the denum and denom ratio value as set for the scale if non 0 } if($vksr_menu_show_diagnostics#0) { if($vksr_arg=$vksr_knob_Note) message("note (same as user edited) " & $vksr_arg & "millicents from midi 0 = " & %vksr_total_millicents_on_set_denum[$vksr_arg]... & " = 1000*" & %vksr_output_note[$vksr_arg] & " + " & %vksr_pitch_bend_for_output_note[$vksr_arg]... & " ratio " & %vksr_denum_for_output_note[$vksr_arg]... & "/" & %vksr_denom_for_output_note[$vksr_arg]) end if } end if @vksr_cents_or_ratio_for_offset_in_milliseconds:= %vksr_denum_for_output_note[$vksr_arg]... & "/" & %vksr_denom_for_output_note[$vksr_arg] if($vksr_arg=$vksr_knob_Note) if($vksr_menu_show_diagnostics#0) { message("User edited note " & $vksr_arg & "millicents from midi 0 = " & %vksr_total_millicents_on_set_denum[$vksr_arg]... & " = 1000*" & %vksr_output_note[$vksr_arg] & " + " & %vksr_pitch_bend_for_output_note[$vksr_arg]... & " ratio " & %vksr_denum_for_output_note[$vksr_arg]... & "/" & %vksr_denom_for_output_note[$vksr_arg]) } end if $vksr_value_edit_denum:=%vksr_denum_for_output_note[$vksr_arg] $vksr_value_edit_denom:=%vksr_denom_for_output_note[$vksr_arg] end if else if($vksr_menu_show_diagnostics#0) { message("Note: " & $vksr_arg & "millicents from midi 0 = " & %vksr_total_millicents_on_set_denum[$vksr_arg]... & " # " & $vksr_semitone_in_millicents & "*" & %vksr_output_note[$vksr_arg] & " + " & %vksr_pitch_bend_for_output_note[$vksr_arg]) } end if if($vksr_ok_check_knob_Note_for_find_cents_or_ratios_string#0 and $vksr_arg=$vksr_knob_Note) $vksr_value_edit_denum:=0 $vksr_value_edit_denom:=0 end if end if end if if($vksr_ok_check_knob_Note_for_find_cents_or_ratios_string#0 and $vksr_arg=$vksr_knob_Note and ($vksr_value_edit_denum=0 or $vksr_value_edit_denom=0)) $vksr_value_edit_denum:=0 $vksr_value_edit_denom:=0 {Is this a recgnized ratio anyway?} call vksr_convert_millicents_to_ratio if($vksr_menu_show_diagnostics#0) { message("Try convert user edited note to ratio: " & $vksr_knob_Note & " offset " & $vksr_offset_in_millicents... & " millicents from midi note 0 "... & %vksr_total_millicents_on_set_denum[$vksr_arg]... & " # " & $vksr_semitone_in_millicents & "*" & %vksr_output_note[$vksr_knob_Note] & " + " & %vksr_pitch_bend_for_output_note[$vksr_knob_Note] ... & " found " & $vksr_denum & "/" & $vksr_denom) } end if if($vksr_denum#$vksr_value_edit_denum or $vksr_denom#$vksr_value_edit_denom) $vksr_value_edit_denum:=$vksr_denum $vksr_value_edit_denom:=$vksr_denom end if end if end if { $vksr_arg>=0 and $vksr_arg< 128} end function function vksr_find_cents_or_ratios_string_for_arg $vksr_ok_check_knob_Note_for_find_cents_or_ratios_string:=0 call vksr_find_cents_or_ratios_string_for_arg_check_knob_Note $vksr_ok_check_knob_Note_for_find_cents_or_ratios_string:=1 end function function update_user_denum_denom_for_knob_Note $vksr_arg:=$vksr_knob_Note if($vksr_menu_show_diagnostics#0) {} message("arg " & $vksr_arg & " for check for millicents same as ratio " ) {} end if call vksr_find_cents_or_ratios_string_for_arg_check_knob_Note end function function vksr_update_tuning_definition_string_if_nec if($vksr_menu_show_diagnostics#0) {message("$vksr_tuning_definition_string_needs_update " & $vksr_tuning_definition_string_needs_update)} end if if($vksr_tuning_definition_string_needs_update#0) @vksr_tuning_definition_string:="..." call find_vksr_istart_for_tuning_definition_string call find_1o1 $vksr_i:=$vksr_istart while ($vksr_i<$vksr_istart+20 and $vksr_i<128) $vksr_arg:=$vksr_i call vksr_find_cents_or_ratios_string_for_arg if($vksr_i=$vksr_knob_Note) @vksr_tuning_definition_string:=@vksr_tuning_definition_string & ", " if(%vksr_white_black_pos[$vksr_i]<0) @vksr_tuning_definition_string:=@vksr_tuning_definition_string & @vksr_highlight_black_keys_in_scale_before end if @vksr_tuning_definition_string:=@vksr_tuning_definition_string & "*" & @vksr_cents_or_ratio_for_offset_in_milliseconds @vksr_tuning_definition_string:=@vksr_tuning_definition_string & "*" if(%vksr_white_black_pos[$vksr_i]<0) @vksr_tuning_definition_string:=@vksr_tuning_definition_string & @vksr_highlight_black_keys_in_scale_after end if else if($vksr_i=$vksr_knob_Note+1) {extra space after the "*, "} @vksr_tuning_definition_string:=@vksr_tuning_definition_string & ", " else @vksr_tuning_definition_string:=@vksr_tuning_definition_string & ", " end if if(%vksr_white_black_pos[$vksr_i]<0) @vksr_tuning_definition_string:=@vksr_tuning_definition_string & @vksr_highlight_black_keys_in_scale_before end if @vksr_tuning_definition_string:=@vksr_tuning_definition_string & @vksr_cents_or_ratio_for_offset_in_milliseconds if(%vksr_white_black_pos[$vksr_i]<0) @vksr_tuning_definition_string:=@vksr_tuning_definition_string & @vksr_highlight_black_keys_in_scale_after end if end if $vksr_i:= $vksr_i+1 end while @vksr_tuning_definition_string:=@vksr_tuning_definition_string & "..." call vksr_find_cents_or_ratios_string_for_arg_check_knob_Note end if {$vksr_tuning_definition_string_needs_update#0} end function function vksr_set_tuning_text set_text ($vksr_label_tuning_description,@vksr_tuning_description_string) set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) end function function vksr_set_button_ResetTo12EQ_skin if($vksr_menu_apply_skin#0) if($vksr_button_ResetTo12EQ=0) set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"button") else set_control_par_str(get_ui_id($vksr_button_ResetTo12EQ), $CONTROL_PAR_PICTURE,"") end if end if end function function vksr_tuning_edited $vksr_menu_scale_tuning:=$vksr_scale_tuning_EDITED call vksr_set_tuning_text $vksr_button_ResetTo12EQ := 0 {unpress the "reset to 12 et" button} call vksr_set_button_ResetTo12EQ_skin move_control($vksr_value_edit_n_equal,0,0) end function function vksr_remake_tuning_definition_user_edited @vksr_tuning_definition_string:="(user edited)" $vksr_tuning_definition_string_needs_update:=$vksr_tuning_string_USER_EDITED call vksr_update_tuning_definition_string_if_nec call vksr_tuning_edited end function function vksr_remake_tuning_definition_not_user_edited $vksr_tuning_definition_string_needs_update:=$vksr_tuning_string_REMAKE_NOT_USER_EDITED call vksr_update_tuning_definition_string_if_nec call vksr_set_tuning_text end function function vksr_set_the_ui_knobs { calling proc should set $vksr_knob_Note, then reest is set here} $vksr_knob_To := %vksr_output_note[$vksr_knob_Note] $vksr_knob_Cents := %vksr_pitch_bend_for_output_note[$vksr_knob_Note] $vksr_value_edit_Cents:=$vksr_knob_Cents $vksr_value_edit_Note:=$vksr_knob_Note $vksr_value_edit_To:=$vksr_knob_To { $vksr_value_edit_denum:=%vksr_denum_for_output_note[$vksr_knob_Note] $vksr_value_edit_denom:=%vksr_denom_for_output_note[$vksr_knob_Note] } if($vksr_value_edit_To<$vksr_value_edit_instrument_range_min or $vksr_value_edit_To>$vksr_value_edit_instrument_range_max) message("OUT OF RANGE note set - " & $vksr_value_edit_Note & " -> " ... & $vksr_value_edit_To & " - WILL BE IGNORED - INSTRUMENT RANGE " &$vksr_value_edit_instrument_range_min ... & " to "& $vksr_value_edit_instrument_range_max... ) $vksr_knob_To:=0 $vksr_knob_Cents:=0 $vksr_value_edit_denum:=0 $vksr_value_edit_denom:=0 end if { Calculate the other knob values from the $vksr_knob_Cents value Note the $vksr_knob_CentiCents value has been declared as a ui variable range 0 to 100, so cant accept values greater than 100, thats why its necessary to introduce a new variable $vksr_Millicents to do the calculation here } if ($vksr_knob_Cents<0) $vksr_abscents :=-$vksr_knob_Cents $vksr_MilliCents := $vksr_abscents-1000*($vksr_abscents/1000) else $vksr_abscents := $vksr_knob_Cents $vksr_MilliCents := ($vksr_knob_Cents-1000*($vksr_knob_Cents/1000)) end if $vksr_knob_CentiCents := $vksr_MilliCents/10 $vksr_knob_LastDigit := $vksr_MilliCents-10*$vksr_knob_CentiCents end function function vksr_reset_to_12et if($vksr_menu_show_diagnostics#0) message("Reset to 12-et") end if $vksr_i := 0 $vksr_temp:=32 $vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60:=60 while ($vksr_i<128) %vksr_is_active[$vksr_i] := 0 %vksr_note_id[$vksr_i] := 0 %vksr_pitch_bend_for_output_note[$vksr_i] := 0 %vksr_pitch_bend_for_output_note_at_note_on[$vksr_i] := 0 %vksr_total_millicents_on_set_denum[$vksr_i]:=0 %vksr_denum_for_output_note[$vksr_i] := 0 %vksr_denom_for_output_note[$vksr_i] := 0 %vksr_output_note[$vksr_i] := $vksr_i %vksr_output_note_at_note_on[$vksr_i] := $vksr_i if($vksr_i mod 12 = 0) %vksr_denum_for_output_note[$vksr_i]:=1 %vksr_denom_for_output_note[$vksr_i]:=$vksr_temp if($vksr_i>$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60) %vksr_denum_for_output_note[$vksr_i]:=$vksr_temp %vksr_denom_for_output_note[$vksr_i]:=1 $vksr_temp:=$vksr_temp*2 else $vksr_temp:=$vksr_temp/2 end if %vksr_total_millicents_on_set_denum[$vksr_i]:=$vksr_i*$vksr_semitone_in_millicents if($vksr_menu_show_diagnostics#0 and $vksr_i=0) { message("at " & $vksr_i ... & " millicents from midi 0 = " & %vksr_total_millicents_on_set_denum[$vksr_i] ... & " ratio " & %vksr_denum_for_output_note[$vksr_i]... & "/" & %vksr_denom_for_output_note[$vksr_i] ) } end if end if $vksr_i := $vksr_i+1 end while $vksr_button_ResetTo12EQ := 1 {press the "reset to 12 et" button} $vksr_menu_scale_Black:=0 call vksr_set_button_ResetTo12EQ_skin @vksr_tuning_description_string:="Tuining: 12 equal" @vksr_tuning_definition_string:="1/1, 100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 1100.0, 2/1" $vksr_menu_scale_tuning:=0 set_text ($vksr_label_tuning_description,@vksr_tuning_description_string) set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) $vksr_next_pitch_bend_extra_fine:= 0 $vksr_keyswitch_instruction:=0 $vksr_keyswitchv2_byte_pos:= 0 $vksr_1o1_millicents:=$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60*$vksr_semitone_in_millicents $vksr_value_edit_1o1_transpose:=0 $vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60:=60 $vksr_menu_1o1_pos_note_name:=0 call vksr_set_the_ui_knobs end function function vksr_set_ui_tuning_method_label if ($vksr_midi_tuning_enabled = 121) @vksr_tuning_method:="RPN retuning" end if if ($vksr_midi_tuning_enabled = 119) {enable_high_note_keyswitches_retuning_v2 } @vksr_tuning_method:="Velocity keyswitch retuning (126, 127)" $vksr_menu_midi_tuning_method:=1 end if if ($vksr_midi_tuning_enabled = 118) {enable_high_note_keyswitches_retuning } @vksr_tuning_method:="Velocity keyswitch retuning (122 to 127)" end if if ($vksr_midi_tuning_enabled = 120) { enable_controller_retuning } @vksr_tuning_method:="Undefined controllers retuning" end if if($vksr_midi_tuning_enabled<118 or $vksr_midi_tuning_enabled > 121) if($CC119_was >=118 and $CC119_was<= 121) @vksr_tuning_method := "WAS: " & @vksr_tuning_method end if $vksr_menu_midi_tuning_method:=0 end if $CC119_was:=$vksr_midi_tuning_enabled set_text ($vksr_label_tuning_method,@vksr_tuning_method) end function function vksr_retune_currently_active_note { If $vksr_input_note is currently active, retune it immediately } if($vksr_menu_show_diagnostics # 0) {message("Retune active note - In: " & $vksr_input_note & " not active ")} end if if (%vksr_is_active[$vksr_input_note] # 0) if($vksr_menu_show_diagnostics # 0) message("Retune active note - In: " & $vksr_input_note & " Out on Note ON " & %vksr_output_note_at_note_on[$vksr_input_note] & " Out Now " & %vksr_output_note[$vksr_input_note] & " Bend " & %vksr_pitch_bend_for_output_note[$vksr_input_note]/1000) end if if (%vksr_output_note_at_note_on[$vksr_input_note]=%vksr_output_note[$vksr_input_note]) change_tune(%vksr_note_id[$vksr_input_note],%vksr_pitch_bend_for_output_note[$vksr_input_note],0) else $vksr_Note_shift := %vksr_output_note[$vksr_input_note]-%vksr_output_note_at_note_on[$vksr_input_note] change_tune(%vksr_note_id[$vksr_input_note],%vksr_pitch_bend_for_output_note[$vksr_input_note]... +($vksr_note_shift*100000),0) end if end if { %vksr_is_active[$vksr_input_note]#0} end function function vksr_set_input_note_and_retune_currently_active_note $vksr_input_note := $vksr_knob_Note %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_knob_Cents call vksr_retune_currently_active_note end function function vksr_diagnostics_message_for_current_instruction if($vksr_menu_show_diagnostics # 0) message(@vksr_messages_events_string) message(@vksr_current_instruction_string) {comment this out if you want to see the @vksr_messages_events_string diagnostics} message(@vksr_pitch_glide_diagnostics_string) end if end function function vksr_get_return_char_for_byte_arg @vksr_return_char:="" if($vksr_byte_arg=32) @vksr_return_char:=" " end if if($vksr_byte_arg=33) @vksr_return_char:="!" end if if($vksr_byte_arg=34) @vksr_return_char:="\"" end if if($vksr_byte_arg=35) @vksr_return_char:="#" end if if($vksr_byte_arg=36) @vksr_return_char:="$vksr_" end if if($vksr_byte_arg=37) @vksr_return_char:="%vksr_" end if if($vksr_byte_arg=38) @vksr_return_char:="&" end if if($vksr_byte_arg=39) @vksr_return_char:="'" end if if($vksr_byte_arg=40) @vksr_return_char:="(" end if if($vksr_byte_arg=41) @vksr_return_char:=")" end if if($vksr_byte_arg=42) @vksr_return_char:="*" end if if($vksr_byte_arg=43) @vksr_return_char:="+" end if if($vksr_byte_arg=44) @vksr_return_char:="," end if if($vksr_byte_arg=45) @vksr_return_char:="-" end if if($vksr_byte_arg=46) @vksr_return_char:="." end if if($vksr_byte_arg=47) @vksr_return_char:="/" end if if($vksr_byte_arg=48) @vksr_return_char:="0" end if if($vksr_byte_arg=49) @vksr_return_char:="1" end if if($vksr_byte_arg=50) @vksr_return_char:="2" end if if($vksr_byte_arg=51) @vksr_return_char:="3" end if if($vksr_byte_arg=52) @vksr_return_char:="4" end if if($vksr_byte_arg=53) @vksr_return_char:="5" end if if($vksr_byte_arg=54) @vksr_return_char:="6" end if if($vksr_byte_arg=55) @vksr_return_char:="7" end if if($vksr_byte_arg=56) @vksr_return_char:="8" end if if($vksr_byte_arg=57) @vksr_return_char:="9" end if if($vksr_byte_arg=58) @vksr_return_char:=":" end if if($vksr_byte_arg=59) @vksr_return_char:=";" end if if($vksr_byte_arg=60) @vksr_return_char:="<" end if if($vksr_byte_arg=61) @vksr_return_char:=":=" end if if($vksr_byte_arg=62) @vksr_return_char:=">" end if if($vksr_byte_arg=63) @vksr_return_char:="?" end if if($vksr_byte_arg=64) @vksr_return_char:="@vksr_" end if if($vksr_byte_arg=65) @vksr_return_char:="A" end if if($vksr_byte_arg=66) @vksr_return_char:="B" end if if($vksr_byte_arg=67) @vksr_return_char:="C" end if if($vksr_byte_arg=68) @vksr_return_char:="D" end if if($vksr_byte_arg=69) @vksr_return_char:="E" end if if($vksr_byte_arg=70) @vksr_return_char:="F" end if if($vksr_byte_arg=71) @vksr_return_char:="G" end if if($vksr_byte_arg=72) @vksr_return_char:="H" end if if($vksr_byte_arg=73) @vksr_return_char:="I" end if if($vksr_byte_arg=74) @vksr_return_char:="J" end if if($vksr_byte_arg=75) @vksr_return_char:="K" end if if($vksr_byte_arg=76) @vksr_return_char:="L" end if if($vksr_byte_arg=77) @vksr_return_char:="M" end if if($vksr_byte_arg=78) @vksr_return_char:="N" end if if($vksr_byte_arg=79) @vksr_return_char:="O" end if if($vksr_byte_arg=80) @vksr_return_char:="P" end if if($vksr_byte_arg=81) @vksr_return_char:="Q" end if if($vksr_byte_arg=82) @vksr_return_char:="R" end if if($vksr_byte_arg=83) @vksr_return_char:="S" end if if($vksr_byte_arg=84) @vksr_return_char:="T" end if if($vksr_byte_arg=85) @vksr_return_char:="U" end if if($vksr_byte_arg=86) @vksr_return_char:="V" end if if($vksr_byte_arg=87) @vksr_return_char:="W" end if if($vksr_byte_arg=88) @vksr_return_char:="X" end if if($vksr_byte_arg=89) @vksr_return_char:="Y" end if if($vksr_byte_arg=90) @vksr_return_char:="Z" end if if($vksr_byte_arg=91) @vksr_return_char:="[" end if { This is a compile error for the "\" - why? Anyway can just use / instead} if($vksr_byte_arg=92) @vksr_return_char:="/" end if if($vksr_byte_arg=93) @vksr_return_char:="]" end if if($vksr_byte_arg=94) @vksr_return_char:="^" end if if($vksr_byte_arg=95) @vksr_return_char:="_" end if if($vksr_byte_arg=96) @vksr_return_char:=" " end if if($vksr_byte_arg=97) @vksr_return_char:="a" end if if($vksr_byte_arg=98) @vksr_return_char:="b" end if if($vksr_byte_arg=99) @vksr_return_char:="c" end if if($vksr_byte_arg=100) @vksr_return_char:="d" end if if($vksr_byte_arg=101) @vksr_return_char:="e" end if if($vksr_byte_arg=102) @vksr_return_char:="f" end if if($vksr_byte_arg=103) @vksr_return_char:="g" end if if($vksr_byte_arg=104) @vksr_return_char:="h" end if if($vksr_byte_arg=105) @vksr_return_char:="i" end if if($vksr_byte_arg=106) @vksr_return_char:="j" end if if($vksr_byte_arg=107) @vksr_return_char:="k" end if if($vksr_byte_arg=108) @vksr_return_char:="l" end if if($vksr_byte_arg=109) @vksr_return_char:="m" end if if($vksr_byte_arg=110) @vksr_return_char:="n" end if if($vksr_byte_arg=111) @vksr_return_char:="o" end if if($vksr_byte_arg=112) @vksr_return_char:="p" end if if($vksr_byte_arg=113) @vksr_return_char:="q" end if if($vksr_byte_arg=114) @vksr_return_char:="r" end if if($vksr_byte_arg=115) @vksr_return_char:="s" end if if($vksr_byte_arg=116) @vksr_return_char:="t" end if if($vksr_byte_arg=117) @vksr_return_char:="u" end if if($vksr_byte_arg=118) @vksr_return_char:="v" end if if($vksr_byte_arg=119) @vksr_return_char:="w" end if if($vksr_byte_arg=120) @vksr_return_char:="x" end if if($vksr_byte_arg=121) @vksr_return_char:="y" end if if($vksr_byte_arg=122) @vksr_return_char:="z" end if if($vksr_byte_arg=123) @vksr_return_char:="{" end if if($vksr_byte_arg=124) @vksr_return_char:="|" end if if($vksr_byte_arg=125) @vksr_return_char:="}" end if if($vksr_byte_arg=126) @vksr_return_char:="~" end if if($vksr_byte_arg=127) @vksr_return_char:="" end if end function function on_receive_retune_keyswitch @vksr_tuning_description_string:="Tuning: (Updated via Midi In, no description yet)" @vksr_tuning_definition_string:="(Updated via Midi In)" $vksr_Note_user_edited:=-1 {not yet edited} $vksr_Note_played:=-1 {not yet pleyd} $vksr_tuning_definition_string_needs_update:=$vksr_tuning_string_REMAKE_NOT_USER_EDITED end function function vksr_reset_denum_denom_for_input_note %vksr_total_millicents_on_set_denum[$vksr_input_note]:=0 %vksr_denum_for_output_note[$vksr_input_note]:=0 %vksr_denom_for_output_note[$vksr_input_note]:=0 if($vksr_input_note=$vksr_knob_Note) $vksr_value_edit_denum:=0 $vksr_value_edit_denom:=0 end if end function function vksr_PROCESS_TUNING_KEYSWITCHES $vksr_data_value:=-1 if ($vksr_EVENT_NOTE=126) $vksr_data_value:=$vksr_EVENT_VELOCITY end if if ($vksr_EVENT_NOTE=127 and $vksr_EVENT_VELOCITY=127) $vksr_data_value:=0 end if if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) @vksr_messages_events_string := @vksr_messages_events_string & " (N " & $vksr_EVENT_NOTE & ", " & $vksr_EVENT_VELOCITY & ")" message(@vksr_messages_events_string) end if if($vksr_menu_show_diagnostics # 0) {}message($vksr_midi_tuning_enabled & " (N " & $vksr_EVENT_NOTE & ", " & $vksr_EVENT_VELOCITY & ")" ) end if $vksr_ready_to_retune:=0 $vksr_parsed:=0 if ($vksr_midi_tuning_enabled = 119) {enable_high_note_keyswitches_retuning_v2 } call vksr_set_ui_tuning_method_label if($vksr_menu_show_diagnostics # 0) { and $vksr_%CC_119_was # 119)} {' message("enable_high_note_keyswitches_retuning_v2")} end if { CHECK FOR INSTRUCTIONS FOR 126, 127 METHOD - E.G. 127, 4 FOR COMPLETE RETUNING MESSAGE FOR A SINGLE NOTE } { 127, 126 = Reset to 12-et 127,4 = Retune instruction (I chose 4 because it reminds you how many data bytes follow) 126, input note 126, output note 126, coarse pitch bend 126, fine pitch bend 127, 127 = data value 0 } if ($vksr_EVENT_NOTE#127 and $vksr_EVENT_NOTE#126) { not recognized as instruction or data - so stop processing any instruction in progress } if($vksr_menu_show_diagnostics # 0 and $vksr_keyswitch_instruction #0) { and $vksr_%CC_119_was # 119)} message("ignoring rest of this instruction" & $vksr_keyswitch_instruction & " note " & $vksr_EVENT_NOTE& " not an instruction (127) or data (126)") end if $vksr_keyswitch_instruction:=0 $vksr_keyswitchv2_byte_pos:=0 else { $vksr_EVENT_NOTE#127 and $vksr_EVENT_NOTE#126 } if($vksr_menu_show_diagnostics # 0) {message(" instr " & $vksr_keyswitch_instruction & " byte pos " & $vksr_keyswitchv2_byte_pos &" note " & $vksr_EVENT_NOTE & " velocity " & $vksr_EVENT_VELOCITY)} end if end if { $vksr_EVENT_NOTE#127 and $vksr_EVENT_NOTE#126 } if ($vksr_EVENT_NOTE=127 and $vksr_EVENT_VELOCITY#127) { "Instructions - except for 127, 127 for data 0 case, done separately } $vksr_keyswitch_instruction:=$vksr_EVENT_VELOCITY $vksr_keyswitchv2_byte_pos:=0 select($vksr_keyswitch_instruction) case 121 {tuning description} @vksr_tuning_description_string:= "Tuning:" if($vksr_menu_show_diagnostics # 0) set_text ($vksr_label_tuning_method,"Start tuning description (midi instruction received): " & @vksr_tuning_description_string) end if $vksr_parsed:=1 case 120{tuning definition} @vksr_tuning_definition_string:= "" $vksr_tuning_definition_string_needs_update:=0 if($vksr_menu_show_diagnostics # 0) set_text ($vksr_label_tuning_method,"Start tuning definition (midi instruction received): " & @vksr_tuning_definition_string) end if $vksr_parsed:=1 case 11 { 127,11 = set extra fine pitch adjustment for next note to be retuned 126, e } $vksr_keyswitchv2_extra_fine_pitch_bend_byte_position := 1 $vksr_parsed:=1 if($vksr_menu_show_diagnostics#0) @vksr_current_instruction_string := @vksr_current_instruction_string & " pitch bend extra fine" end if case 112 { ratio denominator } $vksr_next_denom:=0 $vksr_next_denom_pos:=1 $vksr_parsed:=1 case 113 { end ratio denominator } %vksr_denom_for_output_note[$vksr_input_note]:=$vksr_next_denom %vksr_total_millicents_on_set_denum[$vksr_input_note]:=... $vksr_semitone_in_millicents*%vksr_output_note[$vksr_input_note]+%vksr_pitch_bend_for_output_note[$vksr_input_note] $vksr_parsed:=1 case 110 { ratio numerator } $vksr_next_denum:=0 $vksr_next_denum_pos:=1 $vksr_parsed:=1 case 111 {end ratio numerator } %vksr_denum_for_output_note[$vksr_input_note]:=$vksr_next_denum %vksr_total_millicents_on_set_denum[$vksr_input_note]:=... $vksr_semitone_in_millicents*%vksr_output_note[$vksr_input_note]+%vksr_pitch_bend_for_output_note[$vksr_input_note] $vksr_parsed:=1 case 126 { note 127, vel 126 = Reset to 12-et} call vksr_reset_to_12et $vksr_parsed:=1 case 6 {per note volume instruction } if($vksr_ok_process_volume_and_pan_keyswitches#0) $vksr_keyswitchv2_byte_pos:=2 if($vksr_menu_show_diagnostics#0) @vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & "pan " ... & $vksr_keyswitchv2_byte_pos & " bytes " end if end if $vksr_parsed:=1 case 5 {per note pan instruction } if($vksr_ok_process_volume_and_pan_keyswitches#0) $vksr_keyswitchv2_byte_pos:=2 if($vksr_menu_show_diagnostics#0) @vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & "pan " ... & $vksr_keyswitchv2_byte_pos & " bytes " end if $vksr_parsed:=1 end if case 4 {4 byte Retune instruction } call on_receive_retune_keyswitch $vksr_keyswitchv2_byte_pos:=4 if($vksr_menu_show_diagnostics#0) @vksr_tuning_description_string:="(Updated via Midi In, no description yet - 4 byte message)" @vksr_current_instruction_string := "retune " & $vksr_keyswitchv2_byte_pos & " bytes " @vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & "retune " & $vksr_keyswitchv2_byte_pos & " bytes " end if $vksr_parsed:=1 {DECIDED NOT TO DO THIS case 3 call on_receive_retune_keyswitch $vksr_keyswitchv2_byte_pos:=3 if($vksr_menu_show_diagnostics#0) @vksr_tuning_description_string:="(Updated via Midi In, no description yet - 3 byte message)" @vksr_current_instruction_string := "retune " & $vksr_keyswitchv2_byte_pos & " bytes " @vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & "retune " & $vksr_keyswitchv2_byte_pos & " bytes " end if $vksr_parsed:=1 case 2 call on_receive_retune_keyswitch $vksr_keyswitchv2_byte_pos:=2 if($vksr_menu_show_diagnostics#0) @vksr_tuning_description_string:="(Updated via Midi In, no description yet - 2 byte message)" @vksr_current_instruction_string := "retune " & $vksr_keyswitchv2_byte_pos & " bytes " @vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & "retune " & $vksr_keyswitchv2_byte_pos & " bytes " end if $vksr_parsed:=1 case 1 call on_receive_retune_keyswitch $vksr_keyswitchv2_byte_pos:=1 if($vksr_menu_show_diagnostics#0) @vksr_tuning_description_string:="(Updated via Midi In, no description yet - 1 byte message)" @vksr_current_instruction_string := "retune " & $vksr_keyswitchv2_byte_pos & " byte " @vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & "retune " & $vksr_keyswitchv2_byte_pos & " bytes " end if $vksr_parsed:=1 } end select if($vksr_parsed#0) { set_text ($vksr_label_tuning_description,"Tuning: " & @vksr_tuning_description_string) set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) } if($vksr_menu_show_diagnostics # 0) {' message(" Parsed instruction: note " & $vksr_EVENT_NOTE & " velocity " & $vksr_keyswitch_instruction)} end if end if { $vksr_parsed#0 } if($vksr_parsed = 0) { not recognized as instruction or data - so stop processing any instruction in progress } if($vksr_menu_show_diagnostics # 0 and $vksr_keyswitch_instruction #0) { and $vksr_%CC_119_was # 119)} { message("End tuning with unrecognized instruction at: byte position: " & $vksr_keyswitch_instruction & " note " & $vksr_EVENT_NOTE & " velocity " & $vksr_EVENT_VELOCITY & " unsupported or unrecognized instruction")} @vksr_current_instruction_string := @vksr_current_instruction_string & " End tuning (instr: " & $vksr_EVENT_VELOCITY & ")" if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) @vksr_messages_events_string := @vksr_messages_events_string & " " end if call vksr_diagnostics_message_for_current_instruction call vksr_update_tuning_definition_string_if_nec call vksr_set_tuning_text end if call vksr_update_tuning_definition_string_if_nec call vksr_set_tuning_text if($vksr_keyswitch_instruction = 100) {' end tuning and switch off tuning method} $vksr_midi_tuning_enabled:=0 @vksr_current_instruction_string := @vksr_current_instruction_string & " - switch of midi retuning " if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) @vksr_messages_events_string := @vksr_messages_events_string & " (T " & $vksr_midi_tuning_enabled & ") " call vksr_diagnostics_message_for_current_instruction end if call vksr_set_ui_tuning_method_label end if $vksr_keyswitchv2_byte_pos:=0 $vksr_keyswitch_instruction:=0 { @vksr_current_instruction_string := ""} end if { $vksr_parsed = 0 } end if { ($vksr_EVENT_NOTE=127 and $vksr_EVENT_VELOCITY#127) } { CHECK FOR EXTRA FINE PITCH BEND FOR 126, 127 METHOD } if($vksr_keyswitchv2_extra_fine_pitch_bend_byte_position=1) if ($vksr_data_value>=0) $vksr_next_pitch_bend_extra_fine:=$vksr_data_value $vksr_ready_to_retune:=1 end if if($vksr_menu_show_diagnostics # 0) @vksr_current_instruction_string := @vksr_current_instruction_string & "extra fine pb: " & $vksr_keyswitchv2_extra_fine_pitch_bend_byte_position call vksr_diagnostics_message_for_current_instruction end if $vksr_keyswitchv2_extra_fine_pitch_bend_byte_position:=0 end if { $vksr_keyswitchv2_extra_fine_pitch_bend_byte_position=1 } if($vksr_menu_show_diagnostics # 0 and $vksr_keyswitchv2_byte_pos#0) message(" $vksr_keyswitchv2_byte_pos " & $vksr_keyswitchv2_byte_pos) end if { CHECK FOR DATA FOR 126, 127 METHOD - THIS WILL BE EITHER 126, N OR 127, 127 FOR DATA VALUE 0 } if($vksr_keyswitch_instruction = 112 ){ratio denominator } {arbitrary precision, received least significant byte first} if($vksr_data_value>=0) $vksr_next_denom:=$vksr_next_denom+$vksr_next_denom_pos*$vksr_data_value $vksr_next_denom_pos:=$vksr_next_denom_pos*128 end if end if if($vksr_keyswitch_instruction = 110 ){ratio numerator } if($vksr_data_value>=0) if($vksr_menu_show_diagnostics#0) {@vksr_current_instruction_string:=@vksr_current_instruction_string & " calc : "... & $vksr_next_denum & " + " & $vksr_next_denum_pos & "*" & $vksr_data_value} end if $vksr_next_denum:=$vksr_next_denum+$vksr_next_denum_pos*$vksr_data_value if($vksr_menu_show_diagnostics#0) {@vksr_current_instruction_string:=@vksr_current_instruction_string & " (= " & $vksr_next_denum & ")"} end if $vksr_next_denum_pos:=$vksr_next_denum_pos*128 end if end if if($vksr_keyswitch_instruction = 121 ){tuning description} {receives all the bytes of string as ascii characters, end with zero} if($vksr_data_value>0) if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) { @vksr_messages_events_string:=@vksr_messages_events_string & " <<" & $vksr_EVENT_VELOCITY & ">>" } end if $vksr_byte_arg:=$vksr_data_value call vksr_get_return_char_for_byte_arg @vksr_tuning_description_string:= @vksr_tuning_description_string & @vksr_return_char set_text ($vksr_label_tuning_description,@vksr_tuning_description_string) end if if ($vksr_data_value=0) set_text ($vksr_label_tuning_description,@vksr_tuning_description_string) $vksr_keyswitch_instruction:=0 {End of description} end if end if {$vksr_keyswitch_instruction = 121} if($vksr_keyswitch_instruction = 120 ){tuning definition} if ($vksr_data_value>0) if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) { @vksr_messages_events_string:=@vksr_messages_events_string & " <<" & $vksr_EVENT_VELOCITY & ">>" } end if $vksr_byte_arg:=$vksr_EVENT_VELOCITY call vksr_get_return_char_for_byte_arg @vksr_tuning_definition_string:= @vksr_tuning_definition_string & @vksr_return_char set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) end if if ($vksr_data_value=0) set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) $vksr_keyswitch_instruction:=0 {End of definition} end if end if {$vksr_keyswitch_instruction = 120} if($vksr_keyswitchv2_byte_pos#0) { Data byte for input note, output note, coarse or fine pitch bend depending on $vksr_keyswitchv2_byte_pos } if ($vksr_data_value>=0) select($vksr_keyswitch_instruction) case 6 {per note volume instruction } if($vksr_ok_process_volume_and_pan_keyswitches#0) select($vksr_keyswitchv2_byte_pos) case 3 {input note} $vksr_input_note := $vksr_data_value case 2 { vol, coarse} $vksr_adjust_volume:=$vksr_data_value*128 case 1 {vol, fine} $vksr_adjust_volume:=$vksr_adjust_volume+$vksr_data_value end select end if case 5 {per note pan instruction } if($vksr_ok_process_volume_and_pan_keyswitches#0) select($vksr_keyswitchv2_byte_pos) case 3 {input note} $vksr_input_note := $vksr_data_value case 2 { pan, coarse} $vksr_adjust_pan:=$vksr_data_value*128 case 1 {pan, fine} $vksr_adjust_pan:=$vksr_adjust_pan+$vksr_data_value end select end if case 4 {4 byte retune instruction } select($vksr_keyswitchv2_byte_pos) case 4 {input note} $vksr_input_note := $vksr_data_value call vksr_reset_denum_denom_for_input_note if($vksr_menu_show_diagnostics # 0) @vksr_current_instruction_string := @vksr_current_instruction_string & " input note: " & $vksr_data_value & " " {@vksr_pitch_glide_diagnostics_string :=@vksr_pitch_glide_diagnostics_string & " i. note: " & $vksr_data_value & " "} end if case 3 {output note} $vksr_next_output_note := $vksr_data_value call vksr_reset_denum_denom_for_input_note if($vksr_menu_show_diagnostics # 0) @vksr_current_instruction_string := @vksr_current_instruction_string & " output note: " & $vksr_data_value & " " {@vksr_pitch_glide_diagnostics_string := @vksr_pitch_glide_diagnostics_string & " o. note: " & $vksr_data_value & " "} end if case 2 $vksr_next_pitch_bend_coarse := $vksr_data_value $vksr_next_pitch_bend_extra_fine:=0 call vksr_reset_denum_denom_for_input_note if($vksr_menu_show_diagnostics # 0) @vksr_current_instruction_string := @vksr_current_instruction_string & " pb coarse: " & $vksr_data_value & " " {@vksr_pitch_glide_diagnostics_string := @vksr_pitch_glide_diagnostics_string & " pbc: " & $vksr_data_value & " "} end if case 1 $vksr_next_pitch_bend_fine := $vksr_data_value $vksr_next_pitch_bend_extra_fine:=0 call vksr_reset_denum_denom_for_input_note if($vksr_menu_show_diagnostics # 0) @vksr_current_instruction_string := @vksr_current_instruction_string & " pb fine: " & $vksr_data_value & " " {@vksr_pitch_glide_diagnostics_string := @vksr_pitch_glide_diagnostics_string & " pbf: " & $vksr_data_value & " "} end if end select end select { After data recieved - Decrement byte position} $vksr_keyswitchv2_byte_pos:=$vksr_keyswitchv2_byte_pos-1 if($vksr_menu_show_diagnostics # 0) message(" $vksr_keyswitchv2_byte_pos " & $vksr_keyswitchv2_byte_pos) end if { If tuning position is zero, then ready to retune } if ($vksr_keyswitchv2_byte_pos = 0) select($vksr_keyswitch_instruction) case 6 {per note volume instruction } if($vksr_ok_process_volume_and_pan_keyswitches#0) $vksr_keyswitchv2_byte_pos:=3 {for running status} if (%vksr_is_active[$vksr_input_note] # 0) change_vol(%vksr_note_id[$vksr_input_note],$vksr_adjust_volume,0) end if end if case 5 {per note pan instruction } if($vksr_ok_process_volume_and_pan_keyswitches#0) $vksr_keyswitchv2_byte_pos:=2 {for running status} if (%vksr_is_active[$vksr_input_note] # 0) change_pan(%vksr_note_id[$vksr_input_note],$vksr_adjust_pan,0) end if end if case 4 {4 byte retune instruction } $vksr_ready_to_retune:=1 { actual retuning done below } { @vksr_current_instruction_string := @vksr_current_instruction_string & " ready to retune "} $vksr_keyswitchv2_byte_pos:=$vksr_keyswitch_instruction { example 4 for 127, 4, can then keep resending the data in groups of 4 as input, output, fine, coarse dont need to keep resending the insruction as well } end select end if end if {$vksr_data_value>=0 } call vksr_diagnostics_message_for_current_instruction end if { $vksr_keyswitchv2_byte_pos#0 } end if {$vksr_midi_tuning_enabled = 119} if ($vksr_midi_tuning_enabled = 118) {enable_high_note_keyswitches_retuning } call vksr_set_ui_tuning_method_label if($vksr_menu_show_diagnostics # 0) message("enable_high_note_keyswitches_retuning") end if { **** HIGH NUMBERED KEYSWITCHES METHOD TO SET TUNING **** } { 127, 1 = reset tuning to 12-et for entire channel 126, v = input note 125, v = output note 124, v = pitch bend (coarse) 123, v = pitch bend (fine) - and update tuning 122, v = pitch bend (extra fine) - optional, send before 123 where v (= $vksr_EVENT_VELOCITY) > 0 For v = 0 use 127, 6 = input note 0 127, 5 = output note 0 127, 4 = pitch bend (coarse) 0 127, 3 = pitch bend (fine) 0 127, 2 = pitch bend (ultra fine) 0 } if ($vksr_EVENT_NOTE=127) if($vksr_EVENT_VELOCITY=6) $vksr_input_note := 0 $vksr_next_output_note := %vksr_output_note[$vksr_input_note] { $vksr_next_output_note := 0 { also set the output note to nn } end if if($vksr_EVENT_VELOCITY=5) $vksr_next_output_note := 0 end if if($vksr_EVENT_VELOCITY=4) $vksr_next_pitch_bend_coarse := 0 end if if($vksr_EVENT_VELOCITY=2) $vksr_next_pitch_bend_extra_fine := 0 end if if($vksr_EVENT_VELOCITY=1) { reset tuning to 12-et } if($vksr_menu_show_diagnostics # 0) message("reset tuning to 12-et") end if call vksr_reset_to_12et end if end if if ($vksr_EVENT_NOTE=126) $vksr_input_note := $vksr_EVENT_VELOCITY $vksr_next_output_note := %vksr_output_note[$vksr_input_note] { $vksr_next_output_note :=$vksr_EVENT_VELOCITY { also set the output note to nn - this was just an idea, seems better to leave it as it is} end if if ($vksr_EVENT_NOTE=125) $vksr_next_output_note := $vksr_EVENT_VELOCITY end if if ($vksr_EVENT_NOTE=124) $vksr_next_pitch_bend_coarse :=$vksr_EVENT_VELOCITY end if if ($vksr_EVENT_NOTE=122) $vksr_next_pitch_bend_extra_fine := $vksr_EVENT_VELOCITY end if if ($vksr_EVENT_NOTE=123 or ($vksr_EVENT_NOTE=127 and $vksr_EVENT_VELOCITY=3)) $vksr_next_pitch_bend_fine := $vksr_EVENT_VELOCITY if($vksr_EVENT_NOTE=127 and $vksr_EVENT_VELOCITY=3) $vksr_next_pitch_bend_fine:=0 end if $vksr_ready_to_retune:=1 end if end if {enable_high_note_keyswitches_retuning } if ($vksr_midi_tuning_enabled = 118 or $vksr_midi_tuning_enabled = 119) {enable_high_note_keyswitches_retuning or enable_high_note_keyswitches_retuning_v2} if($vksr_ready_to_retune#0) if($vksr_menu_show_diagnostics # 0) @vksr_current_instruction_string:=@vksr_current_instruction_string & " RETUNED " call vksr_diagnostics_message_for_current_instruction end if %vksr_output_note[$vksr_input_note] := $vksr_next_output_note { This is the simpler calculation of pitch bend in millicents from input pitch bend } $vksr_pitch_bend_combined := $vksr_next_pitch_bend_coarse*128+$vksr_next_pitch_bend_fine %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($vksr_pitch_bend_combined-$vksr_input_pitch_bend_0_at)/($vksr_input_pitch_steps_in_semitone) if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) { @vksr_messages_events_string := @vksr_messages_events_string & " PB " & $vksr_pitch_bend_combined & " cents " & %vksr_pitch_bend_for_output_note[$vksr_input_note] /1000 } end if { This is the calculation to do to take account of the extra fine byte for the pitch bend } $vksr_pitch_bend_combined := $vksr_next_pitch_bend_coarse*128+$vksr_next_pitch_bend_fine { Ideally would do this, but Kontakt values are only integers not floating point so would overflow: $vksr_pitch_bend_combined := ($vksr_next_pitch_bend_coarse*128+$vksr_next_pitch_bend_fine)*128+$vksr_next_pitch_bend_extra_fine %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($vksr_pitch_bend_combined-$vksr_input_pitch_bend_0_at*128)/($vksr_input_pitch_steps_in_semitone*128) } { So instead do this - which could be out by perhaps 1 millicent from the correct value: } %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($vksr_pitch_bend_combined-$vksr_input_pitch_bend_0_at)/($vksr_input_pitch_steps_in_semitone) %vksr_pitch_bend_for_output_note[$vksr_input_note] := %vksr_pitch_bend_for_output_note[$vksr_input_note] + ($vksr_semitone_in_millicents*$vksr_next_pitch_bend_extra_fine)/($vksr_input_pitch_steps_in_semitone*128) $vksr_next_pitch_bend_extra_fine := 0 { have used it, so reset now, dont want it to carry over to next note} call vksr_tuning_edited {unpress the "reset to 12 et" button} if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) { @vksr_messages_events_string := @vksr_messages_events_string & " PBEF " & $vksr_pitch_bend_combined & " cents " & %vksr_pitch_bend_for_output_note[$vksr_input_note] /1000 } { message("Note " & $vksr_knob_Note & " To " & $vksr_knob_To & " Bend " & $vksr_knob_Cents)} { message("Note " & $vksr_knob_Note & " To " & $vksr_knob_To & " Bend " & $vksr_knob_Cents)} end if if($vksr_menu_show_diagnostics # 0) @vksr_pitch_glide_diagnostics_string := @vksr_pitch_glide_diagnostics_string & "R " ... & $vksr_input_note & " -> " & %vksr_output_note[$vksr_input_note] & " bend " ... & %vksr_pitch_bend_for_output_note[$vksr_input_note] & " " call vksr_diagnostics_message_for_current_instruction end if $vksr_knob_Note := $vksr_input_note call vksr_set_the_ui_knobs call vksr_retune_currently_active_note end if { $vksr_ready_to_retune#0 } end if {$vksr_midi_tuning_enabled = 118 or $vksr_midi_tuning_enabled = 119 enable_high_note_keyswitches_retuning or enable_high_note_keyswitches_retuning_v2} end function function vksr_on_release %vksr_is_active[$vksr_EVENT_NOTE] := 0 %vksr_note_id[$vksr_EVENT_NOTE] := 0 end function {************************************************************** Undefined controller 119 is used to switch on and off tuning methods cc 119, 118 - vel retuning using note velocities for notes 124 to 127. cc 119, 119 = vel retuning using note velocities for notes 127, 126 only cc 119, 120 = RPN retuning CC 119, 121 = CC retuning cc 119, 0 = switch off retuning cc 119, anything else = If the CC value is not recognized, then switches tuning off } { *** UNDEFINED CONTROLLERS RETUNING METHOD ***} function vksr_on_controller if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) @vksr_messages_events_string := @vksr_messages_events_string & " (C " & $vksr_CC_NUM & " V " & %CC[$vksr_CC_NUM] & ")" message(@vksr_messages_events_string) end if if($vksr_CC_NUM = 119) {on receipt of %CC[119], switches midi tuning on if %CC[119] = 119 and otherwise switches it off} $vksr_midi_tuning_enabled:=%CC[119] call vksr_set_ui_tuning_method_label end if if ($vksr_midi_tuning_enabled = 120) { enable_controller_retuning } call vksr_set_ui_tuning_method_label if($vksr_menu_show_diagnostics # 0) message("enable_controller_retuning") end if { 113, 0 = reset tuning to 12-et for entire channel 114, n = input note 115, n = output note 116, n = pitch bend (coarse) 117 n = pitch bend (fine) - and update tuning 118, n = pitch bend (extra fine) - optional, send before 118 } if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) if($vksr_CC_NUM >=113) if($vksr_CC_NUM <= 118) @vksr_messages_events_string := @vksr_messages_events_string & " C " & $vksr_CC_NUM & " V " & %CC[$vksr_CC_NUM] message(@vksr_messages_events_string) end if end if end if if ($vksr_CC_NUM=114) $vksr_input_note := %CC[114] end if if ($vksr_CC_NUM=115) $vksr_next_output_note := %CC[115] end if if ($vksr_CC_NUM=116) $vksr_next_pitch_bend_coarse := %CC[116] end if if ($vksr_CC_NUM=118) $vksr_next_pitch_bend_extra_fine := %CC[118] end if if ($vksr_CC_NUM=117) $vksr_next_pitch_bend_fine := %CC[117] %vksr_output_note[$vksr_input_note] := $vksr_next_output_note { This is the simpler calculation of pitch bend in millicents from input pitch bend } $vksr_pitch_bend_combined := $vksr_next_pitch_bend_coarse*128+$vksr_next_pitch_bend_fine %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($vksr_pitch_bend_combined-$vksr_input_pitch_bend_0_at)/($vksr_input_pitch_steps_in_semitone) if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) { @vksr_messages_events_string := @vksr_messages_events_string & " PB " & $vksr_pitch_bend_combined & " cents " & %vksr_pitch_bend_for_output_note[$vksr_input_note] /1000 } end if { This is the calculation to do to take account of the extra fine byte for the pitch bend } $vksr_pitch_bend_combined := $vksr_next_pitch_bend_coarse*128+$vksr_next_pitch_bend_fine { Ideally would do this, but Kontakt values are only integers not floating point so would overflow: $vksr_pitch_bend_combined := ($vksr_next_pitch_bend_coarse*128+$vksr_next_pitch_bend_fine)*128+$vksr_next_pitch_bend_extra_fine %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($vksr_pitch_bend_combined-$vksr_input_pitch_bend_0_at*128)/($vksr_input_pitch_steps_in_semitone*128) } { So instead do this - which could be out by perhaps 1 millicent from the correct value: } %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($vksr_pitch_bend_combined-$vksr_input_pitch_bend_0_at)/($vksr_input_pitch_steps_in_semitone) %vksr_pitch_bend_for_output_note[$vksr_input_note] := %vksr_pitch_bend_for_output_note[$vksr_input_note] + ($vksr_semitone_in_millicents*$vksr_next_pitch_bend_extra_fine)/($vksr_input_pitch_steps_in_semitone*128) call vksr_tuning_edited {unpress the "reset to 12 et" button} if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) { @vksr_messages_events_string := @vksr_messages_events_string & " PBEF " & $vksr_pitch_bend_combined & " cents " & %vksr_pitch_bend_for_output_note[$vksr_input_note] /1000 } { message("Note " & $vksr_knob_Note & " To " & $vksr_knob_To & " Bend " & $vksr_knob_Cents)} end if $vksr_knob_Note := $vksr_input_note call vksr_set_the_ui_knobs call vksr_retune_currently_active_note end if if ($vksr_CC_NUM=113) { reset tuning to 12-et } if($vksr_menu_show_diagnostics # 0) message("reset tuning to 12-et") end if call vksr_reset_to_12et end if end if { enable_controller_retuning } end function { *** UNDEFINED RPN RETUNING METHOD ***} on rpn if ($vksr_midi_tuning_enabled = 120) {enable_rpn_retuning } call vksr_set_ui_tuning_method_label if($vksr_menu_show_diagnostics # 0) message("enable_rpn_retuning") end if { Uses: RPN 100, n = set input note to n, data gives coarse and fine pitch bend to apply to output (default is output note same as input note) Then RPN 101, n = set output note to n, data ignored RPN 102, 0 = reset tuning to 12-et } if($vksr_menu_show_diagnostics # 0) message(" RPN " & $RPN_ADDRESS & " Value " & $RPN_VALUE) end if if ($RPN_ADDRESS>=(100*128) and $RPN_ADDRESS<101*128) { LSB part of the RPN gives the input note} $vksr_input_note := $RPN_ADDRESS-(100*128) { Data for the RPN gives the bend away from the output note} %vksr_pitch_bend_for_output_note[$vksr_input_note] := $vksr_semitone_in_millicents*($RPN_VALUE-$vksr_input_pitch_bend_0_at)/$vksr_input_pitch_steps_in_semitone call vksr_tuning_edited {unpress the "reset to 12 et" button} $vksr_knob_Note := $vksr_input_note call vksr_set_the_ui_knobs call vksr_retune_currently_active_note end if if ($RPN_ADDRESS>=101*128 and $RPN_ADDRESS<102*128) { LSB part of the RPN gives the input note} { LSB part of the Data gives the output note Tuning update occurs on receipt of the data for the pitch bend so dont retune the note here } $vksr_input_note := $RPN_ADDRESS-101*128 if($vksr_menu_show_diagnostics # 0) message("input note " & $vksr_input_note & " output note " & $RPN_VALUE) end if %vksr_output_note[$vksr_input_note] := $RPN_VALUE call vksr_tuning_edited {unpress the "reset to 12 et" button} $vksr_knob_Note := $vksr_input_note call vksr_set_the_ui_knobs end if { ($RPN_ADDRESS>=101*128 and $RPN_ADDRESS<102*128)} if ($RPN_ADDRESS=102*128) call vksr_reset_to_12et end if end if { enable_rpn_retuning } end on {**** RESPOND TO THE RESET BUTTON AND KNOBS WHEN ADJUSTED BY USER ****} function vksr_remake_tuning_definition_and_description_user_edited {Not sure this is needed, after all menu shows "Edited" if($vksr_added_edited_by_user_to_tuning_string#0) @vksr_tuning_description_string:="Edited: " & @vksr_tuning_description_string $vksr_added_edited_by_user_to_tuning_string:=1 end if } call vksr_remake_tuning_definition_user_edited end function function vksr_set_the_ui_knobs_user_edited call vksr_set_the_ui_knobs call update_user_denum_denom_for_knob_Note call vksr_remake_tuning_definition_and_description_user_edited end function function vksr_set_the_ui_knobs_for_Note $vksr_Note_user_edited:=$vksr_knob_Note call vksr_set_the_ui_knobs call update_user_denum_denom_for_knob_Note call vksr_remake_tuning_definition_not_user_edited end function on ui_control ($vksr_value_edit_Note) $vksr_knob_Note:=$vksr_value_edit_Note call vksr_set_the_ui_knobs_for_Note end on { on ui_control ($vksr_knob_Note) } on ui_control ($vksr_knob_Note) call vksr_set_the_ui_knobs_for_Note end on { on ui_control ($vksr_knob_Note) } function vksr_process_To call vksr_tuning_edited {unpress the "reset to 12 et" button} %vksr_output_note[$vksr_knob_Note] := $vksr_knob_To if($vksr_menu_show_diagnostics # 0) { message("Change To - In: " & $vksr_input_note & " Out on Note ON " & %vksr_output_note_at_note_on[$vksr_input_note] & " Out Now " & %vksr_output_note[$vksr_input_note] & " Bend " & %vksr_pitch_bend_for_output_note[$vksr_input_note]/1000)} end if call vksr_set_input_note_and_retune_currently_active_note call vksr_remake_tuning_definition_and_description_user_edited call vksr_find_cents_or_ratios_string_for_arg_check_knob_Note call update_user_denum_denom_for_knob_Note end function on ui_control ($vksr_value_edit_To) $vksr_knob_To:=$vksr_value_edit_To call vksr_process_To end on { on ui_control ($vksr_knob_To) } on ui_control ($vksr_knob_To) $vksr_value_edit_To:=$vksr_knob_To call vksr_process_To end on { on ui_control ($vksr_knob_To) } on ui_control ($vksr_value_edit_Cents) call vksr_tuning_edited {unpress the "reset to 12 et" button} $vksr_knob_Cents:=$vksr_value_edit_Cents %vksr_pitch_bend_for_output_note[$vksr_knob_Note]:=$vksr_knob_Cents call update_user_denum_denom_for_knob_Note call vksr_set_the_ui_knobs_user_edited call vksr_set_input_note_and_retune_currently_active_note call vksr_remake_tuning_definition_and_description_user_edited end on on ui_control ($vksr_knob_Cents) call vksr_tuning_edited {unpress the "reset to 12 et" button} %vksr_pitch_bend_for_output_note[$vksr_knob_Note]:=$vksr_knob_Cents call update_user_denum_denom_for_knob_Note call vksr_set_the_ui_knobs_user_edited call vksr_set_input_note_and_retune_currently_active_note call vksr_remake_tuning_definition_and_description_user_edited end on { on ui_control ($vksr_knob_Cents) } on ui_control ($vksr_knob_CentiCents) call vksr_tuning_edited if ($vksr_knob_Cents<0) $vksr_abscents :=-$vksr_knob_Cents $vksr_knob_Cents := - ( 1000*($vksr_abscents/1000) + $vksr_knob_CentiCents*10 + $vksr_knob_LastDigit ) else $vksr_knob_Cents := 1000*($vksr_knob_Cents/1000) + $vksr_knob_CentiCents*10 + $vksr_knob_LastDigit end if { check for end of range} if($vksr_knob_Cents=200000) $vksr_knob_CentiCents := 0 end if if($vksr_knob_Cents=-200000) $vksr_knob_CentiCents := 0 end if $vksr_value_edit_Cents := $vksr_knob_Cents call update_user_denum_denom_for_knob_Note call vksr_set_input_note_and_retune_currently_active_note call vksr_remake_tuning_definition_and_description_user_edited end on { on ui_control ($vksr_knob_Cents) } on ui_control ($vksr_knob_LastDigit) call vksr_tuning_edited {unpress the "reset to 12 et" button} { $vksr_knob_LastDigit has range 0 to 100 for the ui knob, but in the code here we continually take the last digit so it always ends up in range 0 to 9 at the end of the ui action This makes it possible to adjust the last digit quickly with small movements of the mouse. The user can also pull the knob around past the 9 position which will increase the $vksr_knob_CentiCents knob as well but the number will reset to a number between 0 and 9 when the knob is released (if this explanation is hard to follow, try it out and see how it works } if ($vksr_knob_Cents<0) $vksr_abscents :=-$vksr_knob_Cents $vksr_knob_Cents := - ( 1000*($vksr_abscents/1000) + $vksr_knob_CentiCents*10 + $vksr_knob_LastDigit ) else $vksr_knob_Cents := 1000*($vksr_knob_Cents/1000) + $vksr_knob_CentiCents*10 + $vksr_knob_LastDigit end if $vksr_knob_CentiCents := $vksr_knob_CentiCents + $vksr_knob_LastDigit/10 $vksr_knob_LastDigit := $vksr_knob_LastDigit - 10*($vksr_knob_LastDigit/10) { check for end of range} if($vksr_knob_Cents=200000) $vksr_knob_CentiCents := 0 end if if($vksr_knob_Cents=-200000) $vksr_knob_CentiCents := 0 end if $vksr_value_edit_Cents := $vksr_knob_Cents call update_user_denum_denom_for_knob_Note call vksr_set_input_note_and_retune_currently_active_note call vksr_remake_tuning_definition_and_description_user_edited end on { on ui_control ($vksr_knob_CentiCents) } function find_note_and_pitch_increment_for_offset_in_millicents $vksr_Note_increment:=$vksr_offset_in_millicents/($vksr_semitone_in_millicents) $vksr_pitch_increment:=$vksr_offset_in_millicents-$vksr_Note_increment*($vksr_semitone_in_millicents) if($vksr_pitch_increment>$vksr_semitone_in_millicents/2) $vksr_pitch_increment:=$vksr_pitch_increment-$vksr_semitone_in_millicents $vksr_Note_increment:=$vksr_Note_increment+1 end if if($vksr_pitch_increment<-$vksr_semitone_in_millicents/2) $vksr_pitch_increment:=$vksr_pitch_increment+$vksr_semitone_in_millicents $vksr_Note_increment:=$vksr_Note_increment-1 end if end function function vksr_convert_ratio_to_vksr_offset_in_millicents {set $vksr_denum and $vksr_denom before calling this } {returns value as $vksr_offset_in_millicents} call vksr_convert_ratio_to_millicents $vksr_offset_in_millicents:=$vksr_result end function function on_denum_denom_changed if($vksr_value_edit_denum>0 and $vksr_value_edit_denom>0) $vksr_denum:=$vksr_value_edit_denum $vksr_denom:=$vksr_value_edit_denom call vksr_convert_ratio_to_vksr_offset_in_millicents {calculate as offset from midi note 0} $vksr_offset_in_millicents:=$vksr_1o1_millicents+$vksr_offset_in_millicents call find_note_and_pitch_increment_for_offset_in_millicents message("offset " & $vksr_offset_in_millicents & " note increment " & $vksr_Note_increment & " pitch increment " &$vksr_pitch_increment ) %vksr_output_note[$vksr_knob_Note] := $vksr_Note_increment %vksr_pitch_bend_for_output_note[$vksr_knob_Note]:=$vksr_pitch_increment %vksr_total_millicents_on_set_denum[$vksr_knob_Note]:=... $vksr_semitone_in_millicents*%vksr_output_note[$vksr_knob_Note]+%vksr_pitch_bend_for_output_note[$vksr_knob_Note] call vksr_tuning_edited call vksr_set_the_ui_knobs_user_edited call vksr_set_input_note_and_retune_currently_active_note call vksr_remake_tuning_definition_and_description_user_edited end if end function on ui_control ($vksr_value_edit_denum) %vksr_denum_for_output_note[$vksr_knob_Note]:=$vksr_value_edit_denum call on_denum_denom_changed end on on ui_control ($vksr_value_edit_denom) %vksr_denom_for_output_note[$vksr_knob_Note]:=$vksr_value_edit_denom call on_denum_denom_changed end on on ui_control ($vksr_button_ResetTo12EQ) $vksr_button_ResetTo12EQ := 1 {press the "reset to 12 et" button} call vksr_set_button_ResetTo12EQ_skin { This button cant be unpressed. Idea is to show as pressed on init, or if reset to 12 et either through pressing this button or through midi in event.. gets unpressed when you change the tuning of one of the notes. - note, if you adjust the notes individually to 12-et then wont show it as pressed } call vksr_reset_to_12et end on { on ui_control ($vksr_button_ResetTo12EQ) } function vksr_2_to_power_arg {finds 2^$vksr_arg} $vksr_result:=sh_left(1,$vksr_arg) { $vksr_temp2:=$vksr_arg $vksr_temp:=1 while ($vksr_arg>=1) $vksr_temp:=$vksr_temp*2 $vksr_arg:=$vksr_arg-1 end while $vksr_result:=$vksr_temp $vksr_arg:=$vksr_temp2 } {restore arg so can be reused} end function function vksr_exp_4_to_power_arg $vksr_result:=sh_left(1,$vksr_arg*2) { $vksr_temp2:=$vksr_arg $vksr_temp:=1 while ($vksr_arg>=1) $vksr_temp:=$vksr_temp*4 $vksr_arg:=$vksr_arg-1 end while $vksr_result:=$vksr_temp $vksr_arg:=$vksr_temp2 }{restore arg so can be reused} end function function vksr_exp_3_to_power_arg $vksr_temp2:=$vksr_arg $vksr_temp:=1 while ($vksr_arg>=1) $vksr_temp:=$vksr_temp*3 $vksr_arg:=$vksr_arg-1 end while $vksr_result:=$vksr_temp $vksr_arg:=$vksr_temp2 {restore arg so can be reused} end function function vksr_MAKE_SCALE $vksr_added_edited_by_user_to_tuning_string:=0 $vksr_1o1_pos:=$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 $vksr_1o1_pos_make_scale:=$vksr_1o1_pos $vksr_1o1_pos_white:=-1 $vksr_1o1_pos_black:=-1 $vksr_is_black_note_for_scale_on_black_keys:=0 $vksr_scale_notes:=12 {for octave repeating scales given in tables} $vksr_scale_notes_black:=12 if($vksr_menu_scale_tuning=$vksr_scale_tuning_Xylophone_from_West_Africa) $vksr_scale_notes:=7 end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Seven_tone_tuning_from_Thailand) $vksr_scale_notes:=14 end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Modern_Pelog_scale__Dan_Schmidt) $vksr_scale_notes:=7 end if if($vksr_menu_scale_Black=$vksr_scale_black_Pygmie_scale) $vksr_scale_notes_black:=5 end if if($vksr_menu_scale_Black=$vksr_scale_black_Japanese_Koto_scale) $vksr_scale_notes_black:=5 end if if($vksr_menu_scale_Black=$vksr_scale_black_Golden_horogram_3__5) $vksr_scale_notes_black:=5 end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Golden_horogram_9__7) $vksr_scale_notes:=7 end if if($vksr_menu_show_diagnostics # 0) {message("1/1 pos " & $vksr_1o1_pos& " millicents " & $vksr_1o1_millicents)} { message(" 1/1 pos white " & $vksr_1o1_pos_white& " black: " &$vksr_1o1_pos_black )} { message("$vksr_menu_scale_Black " & $vksr_menu_scale_Black & " $vksr_scale_black_SAME_AS_WHITE " & $vksr_scale_black_SAME_AS_WHITE & " $vksr_scale_notes " & $vksr_scale_notes) } end if if($vksr_menu_scale_Black#$vksr_scale_black_SAME_AS_WHITE... or ($vksr_menu_scale_Black=$vksr_scale_black_SAME_AS_WHITE and $vksr_scale_notes mod 12 #0)... ) {the or(...) part here is for scales such as Modern pelog only want to play it on white keys - need to find $vksr_1o1_pos_white} {set $vksr_1o1_pos_black (black 1/1 pos) to next after white pos} {- might be better to put this as control into ui?} if(%vksr_white_black_pos[$vksr_1o1_pos]>=0) {white} $vksr_1o1_pos_white:=$vksr_1o1_pos $vksr_i := $vksr_1o1_pos while ($vksr_i<128) if(%vksr_white_black_pos[$vksr_i]<0 and $vksr_1o1_pos_black<0) $vksr_1o1_pos_black:=$vksr_i end if $vksr_i:=$vksr_i+1 end while else $vksr_1o1_pos_black:=$vksr_1o1_pos $vksr_i := $vksr_1o1_pos $vksr_1o1_pos_white:=-1 while ($vksr_i<128) if(%vksr_white_black_pos[$vksr_i]>=0 and $vksr_1o1_pos_white<0) $vksr_1o1_pos_white:=$vksr_i end if $vksr_i:=$vksr_i+1 end while end if $vksr_1o1_pos_make_scale:=$vksr_1o1_pos_white end if {$vksr_menu_scale_Black#$vksr_scale_black_SAME_AS_WHITE or ...} if($vksr_1o1_pos_white<0) $vksr_1o1_pos_white:=0 end if if($vksr_1o1_pos_black<0) $vksr_1o1_pos_black:=0 end if $vksr_1o1_millicents:=$vksr_1o1_pos*$vksr_semitone_in_millicents... + $vksr_value_edit_1o1_transpose $vksr_i := 0 while ($vksr_i<128) $vksr_is_black_note_for_scale_on_black_keys:=0 %vksr_is_active[$vksr_i] := 0 %vksr_note_id[$vksr_i] := 0 $vksr_scale_degree:=$vksr_i -$vksr_1o1_pos_make_scale if($vksr_menu_scale_Black#$vksr_scale_black_SAME_AS_WHITE) if(%vksr_white_black_pos[$vksr_i]<0){black notes} {+ve for white, -ve for black} $vksr_is_black_note_for_scale_on_black_keys:=1 end if end if $vksr_scale_notes_for_i:=$vksr_scale_notes if($vksr_is_black_note_for_scale_on_black_keys#0) $vksr_scale_notes_for_i:=$vksr_scale_notes_black end if if($vksr_menu_scale_Black#$vksr_scale_black_SAME_AS_WHITE) if($vksr_is_black_note_for_scale_on_black_keys#0) $vksr_scale_degree:=-(%vksr_white_black_pos[$vksr_i]-%vksr_white_black_pos[$vksr_1o1_pos_black]) else if($vksr_scale_notes_for_i mod 12 #0) $vksr_scale_degree:=(%vksr_white_black_pos[$vksr_i]-%vksr_white_black_pos[$vksr_1o1_pos_white]) end if end if end if if($vksr_menu_scale_Black=$vksr_scale_black_SAME_AS_WHITE and $vksr_scale_notes_for_i mod 12 #0) {scale with different number of notes from 12, is confusing to play it consecutively for most prob. as the multiples of 2/1 keep going in different places } {just use the white notes offset - and if is black key do same as previous white} $vksr_1o1_pos_make_scale:=$vksr_1o1_pos_white if(%vksr_white_black_pos[$vksr_i]<0) {black key} $vksr_scale_degree:=$vksr_scale_degree_was else {white key} $vksr_scale_degree:=(%vksr_white_black_pos[$vksr_i]-%vksr_white_black_pos[$vksr_1o1_pos_white]) end if end if $vksr_scale_degree_was:=$vksr_scale_degree $vksr_offset_mod_nnotes:=( $vksr_scale_degree+ (127/$vksr_scale_notes_for_i+1)*$vksr_scale_notes_for_i) {This just a multiple of $vksr_scale_notes to make it positive} ... mod $vksr_scale_notes_for_i { added multiple of $vksr_scale_notes enough to be sure it is positive} if($vksr_menu_scale_Black#$vksr_scale_black_SAME_AS_WHITE and $vksr_scale_notes_for_i#12) {so for the option to play different scales on black and white, white notes play consecutive notes of scale so override calc above of - except don't go in here for 12 tone scales, as it makes more sense to just tune - the white notes normally and in that case prev calc of $vksr_offset_mod_nnotes is okay } $vksr_offset_mod_nnotes:=$vksr_scale_degree mod $vksr_scale_notes_for_i if($vksr_offset_mod_nnotes<0) $vksr_offset_mod_nnotes:=$vksr_offset_mod_nnotes+ $vksr_scale_notes_for_i end if end if {Find the root denom and denum for this octave repeat of the scale} { This is the 1/4, 1/2, 1/1, 2/1, 4/1 etc } $vksr_denom:=1 $vksr_denum:=1 {find denom and denum by counting number of repeats of the scale (i.e. number of multiples of $vksr_scale_notes_for_i) away from $vksr_1o1_pos_make_scale and multiplying or dividing by 2 the requisite number of times } if($vksr_i<$vksr_1o1_pos_make_scale) {below the 1/1} $vksr_arg:=(-$vksr_scale_degree)/$vksr_scale_notes_for_i if($vksr_menu_scale_tuning=$vksr_scale_tuning_Seven_tone_tuning_from_Thailand) call vksr_exp_4_to_power_arg {it's a 2 octave scale} else call vksr_2_to_power_arg end if $vksr_denom:=$vksr_result if($vksr_menu_scale_tuning=$vksr_scale_tuning_Seven_tone_tuning_from_Thailand) end if else {above the 1/1} $vksr_arg:=$vksr_scale_degree/$vksr_scale_notes_for_i if($vksr_menu_scale_tuning=$vksr_scale_tuning_Seven_tone_tuning_from_Thailand) call vksr_exp_4_to_power_arg {it's a 2 octave scale} else call vksr_2_to_power_arg end if $vksr_denum:=$vksr_result end if if($vksr_menu_show_diagnostics # 0 and $vksr_i=48) { message("i " & $vksr_i & " black or white pos " & %vksr_white_black_pos[$vksr_i] & " offset " & $vksr_scale_degree & " offset for black " & $vksr_scale_degree... & " 1/1 black pos " & $vksr_1o1_pos_black & " value " & %vksr_white_black_pos[$vksr_1o1_pos_black]... & " offset mod notes " & $vksr_offset_mod_nnotes & " root " & $vksr_denum & "/" & $vksr_denom ... ) {} end if if ($vksr_offset_mod_nnotes=0) if($vksr_scale_notes_for_i=12) $vksr_offset_in_millicents:=$vksr_semitone_in_millicents*$vksr_scale_degree else {use our $vksr_denum and $vksr_denom to calculate the offset} call vksr_convert_ratio_to_vksr_offset_in_millicents end if end if if($vksr_offset_mod_nnotes#0) if($vksr_is_black_note_for_scale_on_black_keys#0) if($vksr_menu_scale_Black=$vksr_scale_black_Pygmie_scale) $vksr_denom:=$vksr_denom*%vksr_scale_Pygmie_scale_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Pygmie_scale_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Pygmie_scale[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Pygmie scale" @vksr_tuning_definition_string:="8/7 21/16 3/2 7/4 2/1" end if if($vksr_menu_scale_Black=$vksr_scale_black_Golden_horogram_3__5) $vksr_denom:=$vksr_denom*%vksr_scale_Golden_horogram_3__5_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Golden_horogram_3__5_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Golden_horogram_3__5[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Golden horogram 3, 5" @vksr_tuning_definition_string:="259.86 519.7 779.55 1039.4 2/1" end if if($vksr_menu_scale_Black=$vksr_scale_black_Japanese_Koto_scale) $vksr_denom:=$vksr_denom*%vksr_scale_Japanese_Koto_scale_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Japanese_Koto_scale_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Japanese_Koto_scale[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Japanese Koto scale" @vksr_tuning_definition_string:="9/8 6/5 3/2 8/5 2/1" end if else {case $vksr_is_black_note_for_scale_on_black_keys=0} if($vksr_menu_scale_tuning=$vksr_scale_tuning_Xylophone_from_West_Africa) $vksr_denom:=$vksr_denom*%vksr_scale_Xylophone_from_West_Africa_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Xylophone_from_West_Africa_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Xylophone_from_West_Africa[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Xylophone from West Africa" @vksr_tuning_definition_string:="152.0 287.0 533.0 724.0 890.0 1039.0 2/1" end if {note this uses /24 for $vksr_offset_in_millicents because it is a 2 octave scale} {$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/24} if($vksr_menu_scale_tuning=$vksr_scale_tuning_Seven_tone_tuning_from_Thailand) $vksr_denom:=$vksr_denom*%vksr_scale_Seven_tone_tuning_from_Thailand_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Seven_tone_tuning_from_Thailand_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Seven_tone_tuning_from_Thailand[$vksr_offset_mod_nnotes]+2*$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/24) {note this is /24 because it is a 2 octave scale} if($vksr_i<$vksr_1o1_pos_make_scale) $vksr_offset_in_millicents:=$vksr_offset_in_millicents-$vksr_octave_in_millicents end if @vksr_tuning_description_string:="Seven tone tuning from Thailand (two octaves)" @vksr_tuning_definition_string:="129.096 262.077 415.113 703.196 804.353 984.182 2/1 1329.1 1462.08 1616.58 1904.44 2002.01 2186.29 4/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Golden_horogram_9__7) $vksr_denom:=$vksr_denom*%vksr_scale_Golden_horogram_9__7_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Golden_horogram_9__7_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Golden_horogram_9__7[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Golden horogram 9, 7" @vksr_tuning_definition_string:="81.32 362.55 543.97 725.29 906.61 1087.94 2/1" end if if($vksr_menu_show_diagnostics # 0 and $vksr_i=48) { message("i " & $vksr_i & " black or white pos " & %vksr_white_black_pos[$vksr_i] & " offset " & $vksr_scale_degree & " offset for black " & $vksr_scale_degree... & " 1/1 black pos " & $vksr_1o1_pos_black & " value " & %vksr_white_black_pos[$vksr_1o1_pos_black]... & " offset mod notes " & $vksr_offset_mod_nnotes & " root " & $vksr_denum & "/" & $vksr_denom ... & " scale val " & %vksr_scale_Seven_tone_tuning_from_Thailand[$vksr_offset_mod_nnotes] ... ) } end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Modern_Pelog_scale__Dan_Schmidt) $vksr_denom:=$vksr_denom*%vksr_scale_Modern_Pelog_scale__Dan_Schmidt_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Modern_Pelog_scale__Dan_Schmidt_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Modern_Pelog_scale__Dan_Schmidt[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Modern Pelog scale (Dan Schmidt) - harmonic fragment" @vksr_tuning_definition_string:="11/10 6/5 7/5 3/2 8/5 9/5 2/1" end if { Octave repeating scales. The calc here doesn't work for $vksr_i mod 12 = 0 } if($vksr_menu_scale_tuning=$vksr_scale_tuning_Modern_Indian_Gamut___ragas) $vksr_denom:=$vksr_denom*%vksr_scale_Modern_Indian_Gamut___ragas_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Modern_Indian_Gamut___ragas_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Modern_Indian_Gamut___ragas[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Modern Indian Gamut - ragas" @vksr_tuning_definition_string:="16/15 9/8 6/5 5/4 4/3 45/32 3/2 8/5 27/16 9/5 15/8 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Just_intonation_with_I__II__V_pure) $vksr_denom:=$vksr_denom*%vksr_scale_Just_intonation_with_I__II__V_pure_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Just_intonation_with_I__II__V_pure_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Just_intonation_with_I__II__V_pure[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Just intonation with I, II, V pure pure" @vksr_tuning_definition_string:="135/128 9/8 6/5 5/4 27/20 45/32 3/2 8/5 27/16 9/5 15/8 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Just_intonation_with_I__IV__V_pure) $vksr_denom:=$vksr_denom*%vksr_scale_Just_intonation_with_I__IV__V_pure_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Just_intonation_with_I__IV__V_pure_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Just_intonation_with_I__IV__V_pure[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Just intonation with I, IV, V pure" @vksr_tuning_definition_string:="16/15 9/8 6/5 5/4 4/3 45/32 3/2 8/5 5/3 9/5 15/8 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical) $vksr_denom:=$vksr_denom*%vksr_scale_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Werckmeister_III__1691__Bach_s_time__late_baroque_o_early_classical[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Werckmeister III (1691, Bach's time, late baroque / early classical)" @vksr_tuning_definition_string:="256/243 192.18 32/27 390.225 4/3 1024/729 696.09 128/81 888.27 16/9 1092.18 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Rameau_Temperament__in_Nouveau_Systeme__1726) $vksr_denom:=$vksr_denom*%vksr_scale_Rameau_Temperament__in_Nouveau_Systeme__1726_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Rameau_Temperament__in_Nouveau_Systeme__1726_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Rameau_Temperament__in_Nouveau_Systeme__1726[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Rameau Temperament in Nouveau Systeme (1726)" @vksr_tuning_definition_string:="92.472 193.157 302.053 5/4 503.422 587.682 696.578 797.263 889.735 1006.843 1082.892 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Moore__representative_Victorian_well_temperament___1885) $vksr_denom:=$vksr_denom*%vksr_scale_Moore__representative_Victorian_well_temperament___1885_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Moore__representative_Victorian_well_temperament___1885_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Moore__representative_Victorian_well_temperament___1885[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Moore (representative Victorian well-temperament) (1885)" @vksr_tuning_definition_string:="98.604 9/8 302.514 399.441 4/3 603.351 3/2 800.559 897.486 1004.47 1101.4 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885) $vksr_denom:=$vksr_denom*%vksr_scale_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Broadwood_s_Best__Ellis_tuner_number_4___Victorian__1885[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-60)/12) @vksr_tuning_description_string:="Broadwood's Best (Ellis tuner number 4), Victorian (1885)" @vksr_tuning_definition_string:="95.965 197.99 297.955 392.98 498.945 594.97 699.995 796.96 894.985 998.95 1093.975 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Lambert_Chaumont_organ_temperament__1695) $vksr_denom:=$vksr_denom*%vksr_scale_Lambert_Chaumont_organ_temperament__1695_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Lambert_Chaumont_organ_temperament__1695_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Lambert_Chaumont_organ_temperament__1695[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Lambert Chaumont organ temperament (1695)" @vksr_tuning_definition_string:="76.049 193.157 290.909 5/4 503.422 579.471 696.578 25/16 889.735 997.165 1082.892 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Quarter_comma_mean_tone__renaissance_o_baroque) $vksr_denom:=$vksr_denom*%vksr_scale_Quarter_comma_mean_tone__renaissance_o_baroque_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Quarter_comma_mean_tone__renaissance_o_baroque_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Quarter_comma_mean_tone__renaissance_o_baroque[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Quarter comma mean-tone (renaissance / baroque)" @vksr_tuning_definition_string:="76.049 193.157 310.265 5/4 503.422 579.471 696.578 25/16 889.735 1006.843 1082.892 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Kirnberger__1779) $vksr_denom:=$vksr_denom*%vksr_scale_Kirnberger__1779_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Kirnberger__1779_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Kirnberger__1779[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Kirnberger (1779)" @vksr_tuning_definition_string:="256/243 193.849 32/27 386.314 4/3 45/32 696.663 128/81 889.65 16/9 15/8 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Kirnberger_3__1779) $vksr_denom:=$vksr_denom*%vksr_scale_Kirnberger_3__1779_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Kirnberger_3__1779_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Kirnberger_3__1779[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Kirnberger 3 (1779)" @vksr_tuning_definition_string:="135/128 193.157 32/27 5/4 4/3 45/32 696.578 405/256 889.735 16/9 15/8 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Vallotti_and_Young__1800__late_classical) $vksr_denom:=$vksr_denom*%vksr_scale_Vallotti_and_Young__1800__late_classical_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Vallotti_and_Young__1800__late_classical_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Vallotti_and_Young__1800__late_classical[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Vallotti and Young (1800, late classical)" @vksr_tuning_definition_string:="94.135 196.09 298.045 392.18 501.955 592.18 698.045 796.09 894.135 1000.0 1090.22 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Sixth_comma_mean_tone__Mozart_s_time__classical) $vksr_denom:=$vksr_denom*%vksr_scale_Sixth_comma_mean_tone__Mozart_s_time__classical_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Sixth_comma_mean_tone__Mozart_s_time__classical_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Sixth_comma_mean_tone__Mozart_s_time__classical[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Sixth comma mean-tone (Mozart's time, classical)" @vksr_tuning_definition_string:="88.594 196.741 304.888 393.482 501.629 45/32 698.371 786.965 895.112 1003.26 1091.85 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Pythagorean__Middle_ages) $vksr_denom:=$vksr_denom*%vksr_scale_Pythagorean__Middle_ages_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Pythagorean__Middle_ages_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Pythagorean__Middle_ages[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Pythagorean (Middle ages)" @vksr_tuning_definition_string:="1/1, 256/243, 9/8, 32/27, 81/64, 4/3, 729/512, 3/2, 128/81, 27/16, 16/9, 243/128, 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat) $vksr_denom:=$vksr_denom*%vksr_scale_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_Well_temperament_Op_de_Coul__1998__Fifths_5o14__4o14_and_5o14_Pyth_comma_flat[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="Well-temperament Op de Coul, 1998. Fifths 5/14, 4/14 and 5/14 Pyth comma flat" @vksr_tuning_definition_string:="98.604 9/8 302.514 399.441 4/3 603.351 3/2 800.559 897.486 1004.47 1101.4 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_David_Canright_s_7_limit_twelve_tone) $vksr_denom:=$vksr_denom*%vksr_scale_David_Canright_s_7_limit_twelve_tone_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_David_Canright_s_7_limit_twelve_tone_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_David_Canright_s_7_limit_twelve_tone[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="David Canright's 7 limit twelve tone" @vksr_tuning_definition_string:="28/27 9/8 7/6 5/4 4/3 45/32 3/2 14/9 5/3 7/4 15/8 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black) $vksr_denom:=$vksr_denom*%vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="American Gamelan Si Betty as Pelog on white, Slendro on Black" @vksr_tuning_definition_string:="67.367 184.672 298.754 267.713 603.902 566.475 703.919 795.496 796.613 971.688 1063.085 2/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black) $vksr_denom:=$vksr_denom*%vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black_denoms[$vksr_offset_mod_nnotes] $vksr_denum:=$vksr_denum*%vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black_denums[$vksr_offset_mod_nnotes] $vksr_offset_in_millicents:=%vksr_scale_American_Gamelan_Si_Betty_as_Pelog_on_white__Slendro_on_Black[$vksr_offset_mod_nnotes]+$vksr_octave_in_millicents*(($vksr_i-$vksr_1o1_pos_make_scale)/12) @vksr_tuning_description_string:="American Gamelan Si Betty as Pelog on white, Slendro on Black" @vksr_tuning_definition_string:="67.367 184.672 298.754 267.713 603.902 566.475 703.919 795.496 796.613 971.688 1063.085 2/1" end if end if {case $vksr_is_black_note_for_scale_on_black_keys = 0} if($vksr_i<$vksr_1o1_pos_make_scale) {is out by one octave after calc unless you do this:} $vksr_offset_in_millicents:=$vksr_offset_in_millicents-$vksr_octave_in_millicents end if end if {if($vksr_offset_mod_nnotes#0 0)} { Octave repeating 12 tone scales.} { Other scales - override the above calc. } if(($vksr_menu_scale_tuning=$vksr_scale_tuning_HARMONIC_AND_SUBHARMONICS and $vksr_is_black_note_for_scale_on_black_keys=0) ... or ($vksr_menu_scale_Black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS and $vksr_is_black_note_for_scale_on_black_keys#0)... ) {harmonics and subharmonics} {work out denum and denom from scale degree example if $vksr_value_edit_first_harmonic=8 then want (8+$vksr_scale_degree)/8 for $vksr_scale_degree>=0 and 8/(8+$vksr_scale_degree) for $vksr_scale_degree<0 } $vksr_temp:=$vksr_scale_degree $vksr_temp2:=$vksr_value_edit_first_harmonic if($vksr_menu_scale_Black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS and %vksr_white_black_pos[$vksr_i]<0) { on black keys} $vksr_temp2:=$vksr_value_edit_first_harmonic_black end if if($vksr_temp>=0) $vksr_denum:=$vksr_temp2+$vksr_temp {$vksr_temp2 := $vksr_value_edit_first_harmonic } $vksr_denom:=$vksr_temp2 else $vksr_temp:=-$vksr_temp $vksr_denom:=$vksr_temp2+$vksr_temp $vksr_denum:=$vksr_temp2 end if {Now find the offset using logs - this routine converts $vksr_denum/$vksr_denom to $vksr_offset_in_millicents, which is what we want } call vksr_convert_ratio_to_vksr_offset_in_millicents end if if($vksr_is_black_note_for_scale_on_black_keys=0) if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o1) $vksr_denum:=0 $vksr_denom:=0 {Actual value of 3/1 in cents is 1901.955000865 and here using approximation: 1901955/1000 } $vksr_offset_in_millicents:=($vksr_scale_degree*$vksr_3o1_in_millicents)/$vksr_value_edit_n_equal end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o2) $vksr_denum:=0 $vksr_denom:=0 { here using 701955/1000 as approximation for 701.95500086} $vksr_offset_in_millicents:=($vksr_scale_degree*$vksr_3o2_in_millicents)/$vksr_value_edit_n_equal end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL) $vksr_denum:=0 $vksr_denom:=0 $vksr_offset_in_millicents:=($vksr_scale_degree*$vksr_octave_in_millicents)/$vksr_value_edit_n_equal end if end if {Separate scale on black} if($vksr_is_black_note_for_scale_on_black_keys#0) {same calculation as above but usees $vksr_scale_degree and $vksr_value_edit_n_equal_black} if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o1) $vksr_denum:=0 $vksr_denom:=0 $vksr_offset_in_millicents:=($vksr_scale_degree*$vksr_3o1_in_millicents)/$vksr_value_edit_n_equal_black end if if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o2) $vksr_denum:=0 $vksr_denom:=0 $vksr_offset_in_millicents:=($vksr_scale_degree*$vksr_3o2_in_millicents)/$vksr_value_edit_n_equal_black end if if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL) $vksr_denum:=0 $vksr_denom:=0 $vksr_offset_in_millicents:=($vksr_scale_degree*$vksr_octave_in_millicents)/$vksr_value_edit_n_equal_black end if end if if($vksr_is_black_note_for_scale_on_black_keys=0) if($vksr_scale_tuning_12_EQUAL= $vksr_menu_scale_tuning ) if($vksr_i mod 12 # 0) $vksr_denum:=0 $vksr_denom:=0 end if {twelve equal notes} $vksr_offset_in_millicents:=$vksr_semitone_in_millicents*($vksr_i-$vksr_1o1_pos_make_scale) end if end if if($vksr_menu_show_diagnostics # 0 and $vksr_i=72) { message("i " & $vksr_i & " offset " & $vksr_offset_in_millicents & " 1/1 " & $vksr_offset_in_millicents) } end if {Display of 1/1, 2/1, 3/1, 3/2 etc from millicents values - can't do all ratios but this saves need to work them out for the equal divisions of 3/1, 3/2 and 2/1 and can catch other examples if missed out in scales } {} if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL) if($vksr_scale_degree=0) @vksr_tuning_definition_string :="1/1" end if if($vksr_scale_degree>0 and $vksr_offset_in_millicents < $vksr_octave_in_millicents) call vksr_find_cents_string_for_offset_in_millicents @vksr_tuning_definition_string:=@vksr_tuning_definition_string & ", " & @vksr_cents_or_ratio_for_offset_in_milliseconds end if if($vksr_offset_in_millicents=$vksr_octave_in_millicents) @vksr_tuning_definition_string :=@vksr_tuning_definition_string & ", 2/1" end if end if {} if($vksr_offset_in_millicents mod $vksr_3o2_in_millicents = 0) if($vksr_offset_in_millicents<0) $vksr_denum:=2 $vksr_denom:=3 $vksr_arg:=-$vksr_offset_in_millicents/$vksr_3o2_in_millicents $vksr_arg:=$vksr_arg-1 call vksr_2_to_power_arg $vksr_denum:=$vksr_denum*$vksr_result call vksr_exp_3_to_power_arg $vksr_denom:=$vksr_denom*$vksr_result else $vksr_denum:=3 $vksr_denom:=2 $vksr_arg:=$vksr_offset_in_millicents/$vksr_3o2_in_millicents $vksr_arg:=$vksr_arg-1 call vksr_exp_3_to_power_arg $vksr_denum:=$vksr_denum*$vksr_result call vksr_2_to_power_arg $vksr_denom:=$vksr_denom*$vksr_result end if end if if($vksr_offset_in_millicents mod $vksr_3o1_in_millicents = 0) if($vksr_offset_in_millicents<0) $vksr_denum:=1 $vksr_denom:=3 $vksr_arg:=-$vksr_offset_in_millicents/$vksr_3o1_in_millicents $vksr_arg:=$vksr_arg-1 call vksr_exp_3_to_power_arg $vksr_denom:=$vksr_denom*$vksr_result else $vksr_denum:=3 $vksr_denom:=1 $vksr_arg:=$vksr_offset_in_millicents/$vksr_3o1_in_millicents $vksr_arg:=$vksr_arg-1 call vksr_exp_3_to_power_arg $vksr_denum:=$vksr_denum*$vksr_result end if end if if($vksr_offset_in_millicents mod $vksr_octave_in_millicents = 0) $vksr_denom:=1 $vksr_denum:=1 if($vksr_offset_in_millicents<0) $vksr_arg:=-$vksr_offset_in_millicents/$vksr_octave_in_millicents $vksr_arg:=$vksr_arg call vksr_2_to_power_arg $vksr_denom:=$vksr_result else $vksr_arg:=$vksr_offset_in_millicents/$vksr_octave_in_millicents $vksr_arg:=$vksr_arg call vksr_2_to_power_arg $vksr_denum:=$vksr_result end if end if call vksr_remove_common_multiples_denum_denom $vksr_offset_in_millicents:=$vksr_offset_in_millicents+$vksr_value_edit_1o1_transpose call find_note_and_pitch_increment_for_offset_in_millicents %vksr_output_note[$vksr_i] := $vksr_1o1_pos_make_scale+$vksr_Note_increment %vksr_pitch_bend_for_output_note[$vksr_i]:=$vksr_pitch_increment %vksr_denum_for_output_note[$vksr_i]:=$vksr_denum %vksr_denom_for_output_note[$vksr_i]:=$vksr_denom %vksr_total_millicents_on_set_denum[$vksr_i]:=... $vksr_semitone_in_millicents*%vksr_output_note[$vksr_i]+%vksr_pitch_bend_for_output_note[$vksr_i] %vksr_output_note_at_note_on[$vksr_i] := %vksr_output_note[$vksr_i] $vksr_i := $vksr_i+1 end while $vksr_button_ResetTo12EQ := 0 {unpress the "reset to 12 et" button} call vksr_set_button_ResetTo12EQ_skin if($vksr_value_edit_Note<0 and $vksr_Note_played <0 and $vksr_1o1_pos_make_scale>=0 and $vksr_1o1_pos_make_scale<127) $vksr_knob_Note:=$vksr_1o1_pos_make_scale+1 end if call vksr_set_the_ui_knobs if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL... or $vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o1... or $vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o2... ) @vksr_tuning_description_string:= $vksr_value_edit_n_equal & " equal" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o2) @vksr_tuning_description_string:= @vksr_tuning_description_string & " divisions of 3/2" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o1) @vksr_tuning_description_string:= @vksr_tuning_description_string & " divisions of 3/1" end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_HARMONIC_AND_SUBHARMONICS) @vksr_tuning_description_string:= "Harmonics & subharmonics ..." $vksr_temp:=$vksr_value_edit_first_harmonic+3 $vksr_temp2:=$vksr_value_edit_first_harmonic while($vksr_temp>$vksr_value_edit_first_harmonic) $vksr_denum:=$vksr_temp2 $vksr_denom:=$vksr_temp call vksr_remove_common_multiples_denum_denom @vksr_tuning_description_string:=@vksr_tuning_description_string & " " & $vksr_denum & "/" & $vksr_denom & ", " $vksr_temp:=$vksr_temp-1 end while $vksr_temp:=$vksr_value_edit_first_harmonic $vksr_temp2:=$vksr_value_edit_first_harmonic while($vksr_temp<=$vksr_value_edit_first_harmonic+3) $vksr_denum:=$vksr_temp $vksr_denom:=$vksr_temp2 call vksr_remove_common_multiples_denum_denom @vksr_tuning_description_string:=@vksr_tuning_description_string & " " & $vksr_denum & "/" & $vksr_denom & ", " $vksr_temp:=$vksr_temp+1 end while @vksr_tuning_description_string:=@vksr_tuning_description_string & "..." @vksr_tuning_definition_string:= "..." $vksr_temp:=$vksr_value_edit_first_harmonic+10 $vksr_temp2:=$vksr_value_edit_first_harmonic while($vksr_temp>$vksr_value_edit_first_harmonic) $vksr_denum:=$vksr_temp2 $vksr_denom:=$vksr_temp call vksr_remove_common_multiples_denum_denom @vksr_tuning_definition_string:=@vksr_tuning_definition_string & " " & $vksr_denum & "/" & $vksr_denom & ", " $vksr_temp:=$vksr_temp-1 end while $vksr_temp:=$vksr_value_edit_first_harmonic $vksr_temp2:=$vksr_value_edit_first_harmonic while($vksr_temp<=$vksr_value_edit_first_harmonic+10) $vksr_denum:=$vksr_temp $vksr_denom:=$vksr_temp2 call vksr_remove_common_multiples_denum_denom @vksr_tuning_definition_string:=@vksr_tuning_definition_string & " " & $vksr_denum & "/" & $vksr_denom & ", " $vksr_temp:=$vksr_temp+1 end while @vksr_tuning_definition_string:=@vksr_tuning_definition_string & "..." { @vksr_tuning_description_string:= "Harmonics & subharmonics ...4/5, 8/9, 1/1, 9/8, 5/4, 11/8,..." @vksr_tuning_definition_string:= "...4/9, 8/17, 1/2, 8/15, 4/7, 8/13, 2/3, 8/11, 4/5, 8/9, 1/1, 9/8, 5/4, 11/8, 3/2, 13/8, 7/4, 15/8, 2/1, 17/8, 9/4..." } end if if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL) @vksr_tuning_description_string:= "Black: " & $vksr_value_edit_n_equal_black & " equal, White: " & @vksr_tuning_description_string end if if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o1) @vksr_tuning_description_string:= "Black: " & $vksr_value_edit_n_equal_black & " equal div. of 3/1, White: " & @vksr_tuning_description_string end if if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o2) @vksr_tuning_description_string:= "Black: " & $vksr_value_edit_n_equal_black & " equal div. of 3/2, White: " & @vksr_tuning_description_string end if if($vksr_menu_scale_Black=$vksr_scale_black_Pygmie_scale) @vksr_tuning_description_string:= "Black: Pygmie, White: " & @vksr_tuning_description_string end if if($vksr_menu_scale_Black=$vksr_scale_black_Japanese_Koto_scale) @vksr_tuning_description_string:= "Black: Japanese Koto, White: " & @vksr_tuning_description_string end if if($vksr_menu_scale_Black#$vksr_scale_black_SAME_AS_WHITE) call vksr_remake_tuning_definition_not_user_edited {because is a mix of two scales} end if if($vksr_menu_scale_Black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS) @vksr_tuning_description_string:= "Black: Harmonics & subh. " & ", White: " & @vksr_tuning_description_string end if set_text ($vksr_label_tuning_description,@vksr_tuning_description_string) set_text ($vksr_label_tuning_definition,"Scale: " & @vksr_tuning_definition_string) $vksr_next_pitch_bend_extra_fine:= 0 $vksr_keyswitch_instruction:=0 $vksr_keyswitchv2_byte_pos:= 0 end function on ui_control($vksr_value_edit_n_equal) call vksr_MAKE_SCALE end on on ui_control($vksr_menu_midi_tuning_method) if($vksr_menu_midi_tuning_method=0) $vksr_midi_tuning_enabled:=0 end if if($vksr_menu_midi_tuning_method=1) $vksr_midi_tuning_enabled:=119 end if call vksr_set_ui_tuning_method_label end on function vksr_move_controls call hide_user_interface $vksr_temp2:=1 $vksr_temp:=6 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} if($vksr_menu_show_more=$vksr_sm_LESS) $vksr_temp:=4 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) $vksr_temp2:=1 $vksr_temp:=5 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_MORE) $vksr_temp:=6 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) $vksr_temp:=3 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) $vksr_temp:=4 {position for $vksr_menu_scale_Black and $vksr_value_edit_n_equal_black} end if if($vksr_menu_show_more=$vksr_sm_DOCUMENTATION) move_control($vksr_label_documentation,1,1) move_control($vksr_menu_show_more,6,1) move_control($vksr_button_ResetTo12EQ,6,2) else { if($vksr_menu_show_more=$vksr_sm_PER_NOTE_PAN_AND_VOLUME) move_control($vksr_menu_show_more,6,1) else end if } if($vksr_menu_show_more=$vksr_sm_TWEAKS) move_control($vksr_button_ResetTo12EQ,0,0) move_control($vksr_label_instrument_range,1,1) move_control($vksr_value_edit_instrument_range_min,2,2) move_control($vksr_value_edit_instrument_range_max,3,1) move_control($vksr_label_instrument_range2,1,2) move_control($vksr_menu_show_diagnostics,5,1) move_control($vksr_label_ratio_recognition_sensitivity,1,4) move_control($vksr_value_edit_ratio_recognition_sensitivity,3,4) move_control($vksr_label_ratio_recognition_sensitivity2,4,4) move_control($vksr_value_edit_ratios_prime_limit,5,4) move_control($vksr_label_ratios_prime_limit,5,5) move_control($vksr_label_note_played,1,5) move_control($vksr_value_edit_denum,2,5) move_control($vksr_value_edit_denom,3,5) move_control($vksr_menu_apply_skin,4,1) move_control($vksr_menu_show_more,6,1) move_control($vksr_value_edit_digits_precision,6,2) else move_control($vksr_menu_scale_Black,$vksr_temp2,$vksr_temp+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_n_equal_black,0,0) if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o1... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o2... ) move_control($vksr_value_edit_n_equal_black,$vksr_temp2+1,$vksr_temp+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_scale_black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS) move_control($vksr_value_edit_first_harmonic_black,$vksr_temp2+1,$vksr_temp+$vksr_ui_extra_vertical_shift) end if {(1,$vksr_temp2+6+$vksr_ui_extra_vertical_shift)} $vksr_temp:=0 { for $vksr_value_edit_1o1_transpose etc extra shift} $vksr_temp2:=0 { for $vksr_menu_scale_Black etc extra shift} if($vksr_menu_show_more=$vksr_sm_LESS) $vksr_temp:=-2 $vksr_temp2:=-2 end if if($vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) $vksr_temp:=-1 $vksr_temp2:=0 end if if($vksr_menu_show_more=$vksr_sm_MORE) $vksr_temp:=0 $vksr_temp2:=0 end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) $vksr_temp:=-3 $vksr_temp2:=-3 end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) $vksr_temp:=-2 $vksr_temp2:=-2 end if move_control($vksr_value_edit_1o1_transpose,0,0) {Not really needed, got Tune control anyway in main kontakt instrument disply 4,$vksr_temp+6+$vksr_ui_extra_vertical_shift)} move_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,5,$vksr_temp+6+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_1o1_pos_note_name,6,$vksr_temp+6+$vksr_ui_extra_vertical_shift) if($vksr_menu_show_more=$vksr_sm_MORE_WITH_SCALE) {isn't enough space in ui for these} move_control($vksr_value_edit_n_equal_black,0,0) move_control($vksr_menu_scale_Black,0,0) move_control($vksr_value_edit_1o1_transpose,0,0) move_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60,0,0 ) move_control($vksr_menu_1o1_pos_note_name,0,0) end if if($vksr_menu_show_more=$vksr_sm_LESS or $vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE ... or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) {hide knobs} $vksr_move_ui_vertically:=-2 move_control($vksr_knob_Note,0,0) move_control($vksr_knob_To,0,0) move_control($vksr_knob_Cents,0,0) move_control($vksr_knob_CentiCents,0,0) move_control($vksr_knob_LastDigit,0,0) else $vksr_move_ui_vertically:=0 move_control($vksr_knob_Note,1,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_To,2,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_Cents,3,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_CentiCents,4,1+$vksr_ui_extra_vertical_shift) move_control($vksr_knob_LastDigit,5,1+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY ... or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) {tuning only} $vksr_move_ui_vertically:=-3 move_control($vksr_button_ResetTo12EQ,0,0) move_control($vksr_value_edit_Note,0,0) move_control($vksr_value_edit_To,0,0) move_control($vksr_value_edit_Cents,0,0) move_control($vksr_value_edit_denum,0,0) move_control($vksr_value_edit_denom,0,0) if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) move_control($vksr_menu_show_more,6,2+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE) move_control($vksr_menu_scroll_scale,1,4+$vksr_ui_extra_vertical_shift) if($vksr_menu_scroll_scale=$vksr_scroll_scale_TO_SELECTED_NOTE+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_scroll_scale_midi_start,2,4+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_scroll_scale_show_before,0,0) else move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_value_edit_scroll_scale_show_before,2,4+$vksr_ui_extra_vertical_shift) end if move_control($vksr_menu_show_more,6,1+$vksr_ui_extra_vertical_shift) end if else {#($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE+$vksr_ui_extra_vertical_shift) } {tuning + user note edit controls} move_control($vksr_button_ResetTo12EQ,6,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_Note,1,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_To,2,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_Cents,3,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_denum,4,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_denom,5,3+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) if($vksr_menu_show_more=$vksr_sm_MORE_WITH_SCALE) {Only available space to far right below more drop menu} move_control($vksr_button_ResetTo12EQ,6,2) move_control($vksr_menu_scale_Black,6,3) if($vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o1... or $vksr_menu_scale_Black=$vksr_scale_black_N_EQUAL_of_3o2... ) move_control($vksr_value_edit_n_equal_black,6,4) end if if($vksr_menu_scale_black=$vksr_scale_black_HARMONIC_AND_SUBHARMONICS) move_control($vksr_value_edit_first_harmonic_black,6,4) end if end if if($vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) {has 12-et reset button at far right so move to positions 4, 5 } if($vksr_menu_scroll_scale=$vksr_scroll_scale_TO_SELECTED_NOTE) move_control($vksr_value_edit_scroll_scale_midi_start,4,5+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_scroll_scale_show_before,0,0) else move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_value_edit_scroll_scale_show_before,4,5+$vksr_ui_extra_vertical_shift) end if move_control($vksr_menu_scroll_scale,3,5+$vksr_ui_extra_vertical_shift) end if {move_control($vksr_menu_show_more,6,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) } move_control($vksr_menu_show_more,6,1+$vksr_ui_extra_vertical_shift) end if move_control($vksr_label_tuning_method,3,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_midi_tuning_method,6,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_definition,3,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_description,3,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_scale_tuning,1,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_label_note_played,1,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_digits_precision,2,5+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_n_equal,0,0) move_control($vksr_value_edit_first_harmonic,0,0) if($vksr_menu_show_more=$vksr_sm_LESS or $vksr_menu_show_more=$vksr_sm_MORE ... or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY) {no tuning definition} move_control($vksr_label_tuning_definition,0,0) move_control($vksr_menu_scroll_scale,0,0) move_control($vksr_value_edit_scroll_scale_midi_start,0,0) move_control($vksr_value_edit_scroll_scale_show_before,0,0) end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL... or $vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o1... or $vksr_menu_scale_tuning=$vksr_scale_tuning_N_EQUAL_of_3o2... ) move_control($vksr_value_edit_n_equal,2,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_scale_tuning=$vksr_scale_tuning_HARMONIC_AND_SUBHARMONICS) move_control($vksr_value_edit_first_harmonic,2,4+$vksr_move_ui_vertically+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_ONLY or $vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE+$vksr_ui_extra_vertical_shift) move_control($vksr_menu_show_more,6,1+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_method,3,2+$vksr_ui_extra_vertical_shift) {hide everything except tuning drop down and related controls} move_control($vksr_menu_midi_tuning_method,6,2+$vksr_ui_extra_vertical_shift) move_control($vksr_label_note_played,1,2+$vksr_ui_extra_vertical_shift) move_control($vksr_value_edit_digits_precision,0,0){(2,2+$vksr_ui_extra_vertical_shift) } end if if($vksr_menu_show_more=$vksr_sm_TUNING_MENU_WITH_SCALE+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_method,3,2+$vksr_ui_extra_vertical_shift) move_control($vksr_label_tuning_definition,1,3+$vksr_ui_extra_vertical_shift) end if if($vksr_menu_show_more=$vksr_sm_LESS or $vksr_menu_show_more=$vksr_sm_LESS_WITH_SCALE) {Could hide it?} move_control($vksr_value_edit_digits_precision,0,0) {} end if {end if } end if end if end function function on_menu_scale_change $vksr_Note_user_edited:=-1 {not yet edited} $vksr_Note_played:=-1 {not yet pleyd} call find_vksr_istart_for_tuning_definition_string if($vksr_istart#$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60) call vksr_remake_tuning_definition_not_user_edited end if call vksr_move_controls if($vksr_menu_scale_tuning=0 and $vksr_menu_scale_Black=0) call vksr_reset_to_12et end if if(($vksr_menu_scale_tuning>0 or $vksr_menu_scale_Black#0) and $vksr_menu_scale_tuning#$vksr_scale_tuning_EDITED) call vksr_MAKE_SCALE end if end function on ui_control($vksr_menu_scale_tuning) call on_menu_scale_change end on on ui_control($vksr_menu_scale_Black) call on_menu_scale_change end on function vksr_on_scroll_scale_etc call vksr_remake_tuning_definition_not_user_edited if($vksr_menu_scale_tuning>0 and $vksr_menu_scale_tuning#$vksr_scale_tuning_EDITED) if($vksr_value_edit_scroll_scale_midi_start=$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 and $vksr_Note_played<0) {If user scrolls scale to its default position and no notes played, then can use the original definition string as set for the scale, easiest way to do that is just to call vksr_MAKE_SCALE again } call vksr_MAKE_SCALE end if end if call vksr_move_controls end function on ui_control($vksr_value_edit_n_equal) call vksr_MAKE_SCALE end on on ui_control($vksr_value_edit_n_equal_black) call vksr_MAKE_SCALE end on on ui_control($vksr_value_edit_first_harmonic_black) call vksr_MAKE_SCALE end on on ui_control($vksr_value_edit_first_harmonic) call vksr_MAKE_SCALE end on on ui_control($vksr_value_edit_1o1_transpose) call vksr_MAKE_SCALE end on on ui_control($vksr_menu_1o1_pos_note_name) $vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60:=12*($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60/12)... + $vksr_menu_1o1_pos_note_name call vksr_MAKE_SCALE end on on ui_control($vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60) $vksr_menu_1o1_pos_note_name:=$vksr_value_edit_1o1_pos_for_make_scale_DEFAULT_60 mod 12 call vksr_MAKE_SCALE end on on ui_control ($vksr_value_edit_ratios_prime_limit) $vksr_ok_for_n_limit_up_to_date:=0 call vksr_convert_millicents_to_ratio {just to update the $vksr_label_ratios_prime_limit} call vksr_on_scroll_scale_etc end on on ui_control ($vksr_value_edit_ratio_recognition_sensitivity) call vksr_on_scroll_scale_etc end on on ui_control ($vksr_value_edit_digits_precision) if($vksr_Note_played>=0) $vksr_arg:=$vksr_Note_played call vksr_find_cents_or_ratios_string_for_arg_check_knob_Note if($vksr_value_edit_instrument_range_min<=%vksr_output_note[$vksr_Note_played] and %vksr_output_note[$vksr_Note_played] <=$vksr_value_edit_instrument_range_max) set_text ($vksr_label_note_played,... "Played: " & @vksr_cents_or_ratio_for_offset_in_milliseconds... & " (" & !vksr_note_names[%vksr_output_note[$vksr_Note_played] mod 12] & ") ") end if end if call vksr_on_scroll_scale_etc end on on ui_control($vksr_value_edit_scroll_scale_midi_start) call vksr_on_scroll_scale_etc end on on ui_control($vksr_value_edit_scroll_scale_show_before) call vksr_on_scroll_scale_etc end on on ui_control($vksr_menu_scroll_scale) call vksr_on_scroll_scale_etc end on on ui_control($vksr_menu_show_more) call vksr_move_controls end on function vksr_retune_note_on if($vksr_menu_show_diagnostics # 0 and $vksr_show_messages_events_string#0) @vksr_messages_events_string := @vksr_messages_events_string & " n " & $vksr_EVENT_NOTE & "," { " [Note " & $vksr_EVENT_NOTE & ", " & $vksr_EVENT_VELOCITY & "]"} message(@vksr_messages_events_string) end if %vksr_is_active[$vksr_EVENT_NOTE] := 1 { Record the output note now, to use to work out the total pitch bend later on using the change of output note since the note on } %vksr_output_note_at_note_on[$vksr_EVENT_NOTE] := %vksr_output_note[$vksr_EVENT_NOTE] %vksr_pitch_bend_for_output_note_at_note_on[$vksr_EVENT_NOTE] := %vksr_pitch_bend_for_output_note[$vksr_EVENT_NOTE] $vksr_knob_Note := $vksr_EVENT_NOTE $vksr_Note_played:=$vksr_knob_Note call vksr_set_the_ui_knobs call vksr_remake_tuning_definition_not_user_edited {Check that the note is not a keyswitch after retuning - if it is then is "out of range silent" } $vksr_arg:=$vksr_EVENT_NOTE call vksr_find_cents_or_ratios_string_for_arg_check_knob_Note if($vksr_value_edit_instrument_range_min<=%vksr_output_note[$vksr_EVENT_NOTE] and %vksr_output_note[$vksr_EVENT_NOTE] <=$vksr_value_edit_instrument_range_max) %vksr_note_id[$vksr_EVENT_NOTE] := play_note(%vksr_output_note[$vksr_EVENT_NOTE],$vksr_EVENT_VELOCITY,0,-1) {Make sure it has same pan positions and volume as before (as in KSP Reference Manual under ignore_event() } change_vol(%vksr_note_id[$vksr_EVENT_NOTE],get_event_par($vksr_EVENT_ID,$EVENT_PAR_VOLUME),0) change_pan(%vksr_note_id[$vksr_EVENT_NOTE],get_event_par($vksr_EVENT_ID,$EVENT_PAR_PAN),0) if($vksr_ok_process_volume_and_pan_keyswitches#0) { change_vol(%vksr_note_id[$vksr_EVENT_NOTE],%vksr_output_note_volume[$vksr_EVENT_NOTE],0) change_pan(%vksr_note_id[$vksr_EVENT_NOTE],%vksr_output_note_pan[$vksr_EVENT_NOTE],0) } end if set_text ($vksr_label_note_played,... "Played: " & @vksr_cents_or_ratio_for_offset_in_milliseconds... & " (" & !vksr_note_names[%vksr_output_note[$vksr_EVENT_NOTE] mod 12] & ") ") change_tune... (%vksr_note_id[$vksr_EVENT_NOTE]... ,%vksr_pitch_bend_for_output_note[$vksr_EVENT_NOTE]... ,0) else message("OUT OF RANGE note to play - " & $vksr_EVENT_NOTE & " -> " ... & %vksr_output_note[$vksr_EVENT_NOTE] & " - IGNORED - INSTRUMENT RANGE " &$vksr_value_edit_instrument_range_min ... & " to " & $vksr_value_edit_instrument_range_max... ) set_text ($vksr_label_note_played,... "OUT OF RANGE: " & @vksr_cents_or_ratio_for_offset_in_milliseconds) end if end function on note $vksr_EVENT_NOTE:=$EVENT_NOTE $vksr_EVENT_VELOCITY:=$EVENT_VELOCITY $vksr_EVENT_ID:=$EVENT_ID if( ($vksr_midi_tuning_enabled = 119 and $vksr_EVENT_NOTE >=126 ) or ($vksr_midi_tuning_enabled = 118 and $vksr_EVENT_NOTE >=122) ) {enable_high_note_keyswitches_retuning_v2 or enable_high_note_keyswitches_retuning } ignore_event($EVENT_ID) call vksr_PROCESS_TUNING_KEYSWITCHES else { else case for ($vksr_midi_tuning_enabled = 119 and $vksr_EVENT_NOTE >=126 ) or ($vksr_midi_tuning_enabled = 118 and $vksr_EVENT_NOTE >=122)} if($vksr_value_edit_instrument_range_min<=$vksr_EVENT_NOTE and $vksr_EVENT_NOTE <=$vksr_value_edit_instrument_range_max) ignore_event($EVENT_ID) if($vksr_retune_release#0) { http://www.vi-control.net/forum/viewtopic.php?p=178475&highlight= Need to make sure release sample is same tuning as the note itself } { activate normal and deactivate release groups } disallow_group($ALL_GROUPS) $vksr_normal_group := 0 while ($vksr_normal_group <= $NUM_GROUPS-1) if (_get_engine_par($ENGINE_PAR_RELEASE_TRIGGER, $vksr_normal_group, -1, -1) = 0) allow_group($vksr_normal_group) end if inc($vksr_normal_group) end while end if {$vksr_retune_release#0} call vksr_retune_note_on end if {$vksr_value_edit_instrument_range_min<=$vksr_EVENT_NOTE and $vksr_EVENT_NOTE <=$vksr_value_edit_instrument_range_max } end if {($vksr_midi_tuning_enabled = 119 and $vksr_EVENT_NOTE >=126 ) or ($vksr_midi_tuning_enabled = 118 and $vksr_EVENT_NOTE >=122)} end on on release $vksr_EVENT_NOTE:=$EVENT_NOTE call vksr_on_release if( ($vksr_midi_tuning_enabled = 119 and $vksr_EVENT_NOTE >=126 ) or ($vksr_midi_tuning_enabled = 118 and $vksr_EVENT_NOTE >=122) ) { this is a keyswitch note release } else if($vksr_retune_release#0) { http://www.vi-control.net/forum/viewtopic.php?p=178475&highlight= Need to make sure release sample is same tuning as the note itself } { activate release groups and deactivate normal groups } disallow_group($ALL_GROUPS) $vksr_release_group := 0 while ($vksr_release_group <= $NUM_GROUPS-1) if (_get_engine_par($ENGINE_PAR_RELEASE_TRIGGER, $vksr_release_group, -1, -1) # 0) allow_group($vksr_release_group) end if inc($vksr_release_group) end while { "manually" trigger release sample with same pitch and velocity as original event } $vksr_OFF_ID := play_note($vksr_EVENT_NOTE, $vksr_EVENT_VELOCITY, 0, 0) { Now retune the release sample using this new $vksr_OFF_ID } %vksr_note_id[$vksr_EVENT_NOTE] := $vksr_OFF_ID if (%vksr_output_note_at_note_on[$vksr_EVENT_NOTE]=%vksr_output_note[$vksr_EVENT_NOTE]) change_tune(%vksr_note_id[$vksr_EVENT_NOTE],%vksr_pitch_bend_for_output_note[$vksr_EVENT_NOTE],0) else $vksr_Note_shift := %vksr_output_note[$vksr_EVENT_NOTE]-%vksr_output_note_at_note_on[$vksr_EVENT_NOTE] change_tune(%vksr_note_id[$vksr_EVENT_NOTE],%vksr_pitch_bend_for_output_note[$vksr_EVENT_NOTE]+($vksr_Note_shift*$vksr_octave_in_millicents),0) end if end if end if end on on controller $vksr_CC_NUM:=$CC_NUM call vksr_on_controller end on