#320 Un algoritmo no es más que una regla matemática. Puede ser más o menos complejo, pero no es más que una regla matemática. Imagínalo como si fueran múltiples fórmulas matemáticas que cogen una serie de datos que le llegan, operan con ellos y obtienes un resultado. Tú, que ya tienes unos años, recordarás la regla del 9 para comprobar si una división estaba correcta. Eso es un algoritmo. La propia regla de tres para calcular proporciones es un algoritmo. En música, un efecto algorítmico es lo mismo. Por ejemplo, una reverb algorítmica. Tú emites un sonido, se digitaliza (se transforma en señal digital, en números) y el algoritmo coge esos números, los pasa por un montón de fórmulas matemáticas, y obtienes como resultado final ese sonido más una reverberación.
Un script es una lista de tareas ejecutadas una detrás de otra. Al script le llegan una serie de datos, se ejecutan dichas tareas, y obtienes un resultado. A diferencia del algoritmo, aquí no haces operaciones matemáticas sino tareas. En las hojas de cálculo como Excel, un script podría ser coger coger un dato de una determinada casilla y copiarlo en la primera columna libre de una fila concreta. Ese dato puede ser un número o un texto. En música, tienes infinidad de ejemplos. Por ejemplo, en un DAW (Cubase, Reaper, ....) un script que al ejecutarlo ponga todas las pistas que tengas al mismo tamaño de altura, o que minimize el tamaño de las pistas de automatización. En kontakt, los keyswitches son scripts, una serie de instrucciones que transforman una nota que le llega en una orden midi de Cambio de Programa. Tú tocas un Do1 y kontakt te cambia automáticamente a Legato. Tocas un Re1 y automáticamente cambia a Pizzicato.
Esto es un script de kontakt para hacer un keyswitch a medida. Son, como ves, instrucciones, una serie de órdenes puestas una detrás de otra. Le llega una nota y si está dentro del rango definido se pone a hacer todo eso. Como resultado, un cambio de articulación.
--------------------------------------------------------------------------------------------------------------------------------------------
{***********************************************
Note Range to PC
Author: Native Instruments
Written by: Nicki Marinic
Modified: September 8, 2009
*************************************************}
on init
message("")
set_script_title("Notes to Prog Change")
set_ui_height(2)
declare $count
declare $prog_num
declare $learn_counter
declare $a
declare ui_switch $learn_button
set_text($learn_button,"Learn Keyrange")
declare ui_label $label_1 (2,1)
set_text ($label_1,"Transform the note range from")
declare ui_label $label_2 (1,1)
set_text ($label_2,"to PC starting at:")
declare ui_label $readout_label (2,1)
set_text ($readout_label,"Out:")
declare ui_value_edit $Min (0,127,$VALUE_EDIT_MODE_NOTE_NAMES)
$Min := 36
declare ui_value_edit $Max (0,127,$VALUE_EDIT_MODE_NOTE_NAMES)
$Max := 48
declare ui_value_edit $First (1,128,1)
make_persistent ($Min)
make_persistent ($Max)
make_persistent ($First)
set_control_help ($learn_button,"Learn: Click to enable MIDI Learn for the keyrange. The keyrange is set by the next two received MIDI notes.")
set_control_help ($Min,"Min: The lower limit of the keyrange. All notes between <Min> and <Max> will not be played but transfromed into Program Change values.")
set_control_help ($Max,"Max: The higher limit of the keyrange. All notes between <Min> and <Max> will not be played but transfromed into Program Change values.")
set_control_help ($First,"First: Sets the program change value for the lowest, i.e. <Min> note.")
set_control_help ($readout_label,"Out: Displays the sent Program Change values as well as the MIDI channel.")
move_control ($learn_button,1,3)
move_control ($label_1,2,2)
move_control ($Min,2,3)
move_control ($Max,3,3)
move_control ($label_2,4,2)
move_control ($First,4,3)
move_control ($readout_label,5,3)
end on
on ui_control ($Min)
if ($Min > $Max)
$Max := $Min
end if
end on
on ui_control ($Max)
if ($Max < $Min)
$Min := $Max
end if
end on
on midi_in
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 > 0)
{Key Range}
if ($learn_button = 1)
if ($learn_counter = 0)
$Min := $MIDI_BYTE_1
inc($learn_counter)
else
$Max := $MIDI_BYTE_1
$learn_counter := 0
$learn_button := 0
if ($Min > $Max)
$a := $Max
$Max := $Min
$Min := $a
end if
end if
ignore_midi
exit
end if
if (in_range($MIDI_BYTE_1,$Min,$Max))
ignore_midi
$prog_num := $MIDI_BYTE_1- $Min+ $First- 1
if ($prog_num > 127)
$prog_num := 127
end if
set_midi($MIDI_CHANNEL,$MIDI_COMMAND_PROGRAM_CHANGE,$prog_num,0)
set_text ($readout_label,"Out: PC #" & $prog_num+1 & " on MIDI Channel " & $MIDI_CHANNEL+1)
end if
end if
{Note Off Simple}
if (($MIDI_COMMAND = $MIDI_COMMAND_NOTE_ON and $MIDI_BYTE_2 = 0))
if (in_range($MIDI_BYTE_1,$Min,$Max))
set_text ($readout_label,"Out:")
end if
end if
{Note Off True}
if ($MIDI_COMMAND = $MIDI_COMMAND_NOTE_OFF)
if (in_range($MIDI_BYTE_1,$Min,$Max))
set_text ($readout_label,"Out:")
end if
end if
end on
---------------------------------------------------------------------------------------------------------------------------