Найти тему

Язык скриптов Kontakt 3 Перевод

Изображение с официального сайта
Изображение с официального сайта

Обновления в версии 3

Прошу обратить внимание - дзен режет табуляцию, поэтому скрипты будут выглядеть немножко неприятно.

Не забудьте подписаться - чем больше подписчиков, тем больше переводов.

Что нового в Контакте 3 – KSP

Авторское право © 2007 Native Instruments Software Synthesis GmbH. Все права защищены.

Последнее изменение: 8 октября 2007 г.

Обработка представления производительности

Теперь можно использовать более одного сценария в качестве сценария просмотра производительности — все пять сценариев можно вывести на передний план с помощью кнопки make_persistent команда.

С помощью новой команды

_set_skin_offset(<offset in pixel>) (_set_skin_offset(<смещение в пикселях>))

смещает выбранный фоновый tga-файл на указанное количество пикселей

Если в параметрах прибора был выбран фоновый графический файл tga, и этот файл больше, чем максимальная высота представления производительности, вы можете использовать эту команду для смещения фонового рисунка, создавая таким образом отдельные фоны для каждого из слотов скрипта.

Взаимодействие между сценариями: PGS

Теперь можно отправлять и получать значения из одного сценария в другой, отбрасывая обычный порядок слева направо, используя новые команды Program Global Storage (PGS). PGS — это динамическая память, которая может быть прочитана/записана любым скриптом. Вот команды:

Команды PGS

_pgs_create_key(<key-id>,<size>) (<идентификатор ключа>,<размер>)

_pgs_key_exists(<key-id>) (<идентификатор ключа>)

_pgs_set_key_val(<key-id>,<index>,<value>) (<id-ключа>,<индекс>,<значение>)

_pgs_get_key_val(<key-id>,<index>) (<id-ключа>,<индекс>)

<key-id> похоже на имя переменной, оно может содержать только буквы и цифры и должно начинаться с цифры. Может быть хорошей идеей всегда писать их заглавными буквами, чтобы подчеркнуть их уникальный статус.

Вот пример, вставьте этот скрипт в любой слот:

on init

_pgs_create_key(FIRST_KEY, 1) {defines a key with 1 element}

{ определяет ключ с 1 элементом }

_pgs_create_key(NEXT_KEY, 128) {defines a key with 128 elements}

{ определяет ключ со 128 элементами}

declare ui_button $Just_Do_It

end on

on ui_control($Just_Do_It)

{writes 70 into the first and only memory location of FIRST_KEY}

{записывает 70 в первую и единственную ячейку памяти FIRST_KEY}

_pgs_set_key_val(FIRST_KEY, 0, 70)

{writes 50 into the first and 60 into the last memory location of NEXT_KEY}

{ записывает 50 в первую и 60 в последнюю ячейку памяти NEXT_KEY}

_pgs_set_key_val(NEXT_KEY, 0, 50)

_pgs_set_key_val(NEXT_KEY, 127, 60)

end on

1

и вставьте следующий скрипт в любой другой слот:

on init

declare ui_knob $First (0,100,1)

declare ui_table %Next[128] (5,2,100)

end on

on _pgs_changed

{checks if FIRST_KEY and NEXT_KEY have been declared}

{проверяет, объявлены ли FIRST_KEY и NEXT_KEY}

if(_pgs_key_exists(FIRST_KEY) and _pgs_key_exists(NEXT_KEY))

$First := _pgs_get_key_val(FIRST_KEY,0) {in this case 70}{в данном
случае 70}

%Next[0] := _pgs_get_key_val(NEXT_KEY,0) {in this case 50}{в данном
случае 50}

%Next[127] := _pgs_get_key_val(NEXT_KEY,127){in this case 60}{в
данном случае 60}

end if

end on

Как показано выше, существует также новый тип обратного вызова, который выполняется всякий раз, когда выполняется команда set_key:

on _pgs_changed

тип обратного вызова, выполняемый всякий раз, когда любой _pgs_set_key_val() выполняется в любом скрипте

Ключей может быть сколько угодно, однако каждый ключ может содержать не более 256 элементов. Обращение к модуляторам по имени

Теперь можно обращаться к модуляторам и интенсивности модуляции, используя имя модулятора или назначение модуляции. Эта текстовая строка может быть задана заранее или изменена вручную.

Две новые команды

find_mod(<group-idx>,<mod-name>) (find_mod(<idx-группы>,<имя-мода>))

возвращает индекс модулятора

а также

find_target(<group-idx>, <mod-idx>, <target-name>)

возвращает индекс назначения модуляции

Давайте посмотрим, как эти команды можно использовать в реальной жизни. Допустим, мы хотим контролировать время атаки огибающей громкости первой группы в инструменте. Мы можем просто написать:

on init

declare $mod_idx

$mod_idx := find_mod(0,"ENV_AHDSR")

declare ui_knob $Attack (0,1000000,1)

set_knob_unit ($Attack,$KNOB_UNIT_MS)

set_knob_label
($Attack,_get_engine_par_disp($ENGINE_PAR_ATTACK,0,$mod_idx,-1))

end on

on ui_control ($Attack)

_set_engine_par ($ENGINE_PAR_ATTACK,$Attack,0,0,-1)

set_knob_label
($Attack,_get_engine_par_disp($ENGINE_PAR_ATTACK,0,$mod_idx,-1))

end on

2

Но почему мы пишем "ENV_AHDSR"? Потому что это имя по умолчанию для любого конверта ahdsr. Вы можете просмотреть и изменить имя, когда редактор сценариев открыт и щелкните правой кнопкой мыши модуль:

Изображение с мануала
Изображение с мануала

Это означает, что вы можете переименовать существующий модулятор, например, если вам нужны огибающие (один для громкости, один для фильтра).

Теперь так же легко управлять модуляцией скорости и громкости, просто напишите это:

on init

declare $mod_idx

$mod_idx := find_mod(0,"VEL_VOLUME")

declare ui_knob $Velocity (0,1000000,1)

set_knob_label...

($Velocity,_get_engine_par_disp($ENGINE_PAR_MOD_TARGET_INTENSITY,0,$mod_idx,-1))

end on

on ui_control ($Velocity)

_set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,$Velocity,0,$mod_idx,-1)

set_knob_label...

($Velocity,_get_engine_par_disp($ENGINE_PAR_MOD_TARGET_INTENSITY,0,$mod_idx,-1))

end on

3

Здесь мы изменяем значение ползунка модуляции (от скорости до модуляции громкости). Поскольку мы обращаемся к внешнему модулятору, мы также можем использовать команду find_mod.

Если вы хотите контролировать интенсивность модуляции, например, огибающей фильтра, проверьте это:

on init

declare $mod_idx

$mod_idx := find_mod(0,"FILTER_ENV")

declare $target_idx

$target_idx := find_target(0,$mod_idx,"ENV_AHDSR_CUTOFF")

declare ui_knob $Knob (-100,100,1)

$Knob := 0

set_text ($Knob, "FLT Env")

end on

on ui_control ($Knob)

if ($Knob < 0)

_set_engine_par
($MOD_TARGET_INVERT_SOURCE,1,0,$mod_idx,$target_idx)

else

_set_engine_par
($MOD_TARGET_INVERT_SOURCE,0,0,$mod_idx,$target_idx)

end if _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,abs($Knob*10000),0,$mod_idx,$target_idx)

end on

Обратите внимание, что мы вручную переименовали конверт ahdsr в «FILTER_ENV».

Другие изменения/улучшения

Изменения в таблице пользовательского интерфейса

Теперь вы можете изменить количество отображаемых столбцов в таблице пользовательского интерфейса:

set_table_steps_shown(<ui-table-variable>,<num-steps>)

set_table_steps_shown (<переменная таблицы пользовательского интерфейса>, <количество шагов>)

изменяет количество отображаемых столбцов в таблице пользовательского интерфейса

Кроме того, теперь также можно объявлять таблицы с высотой 1. Это может быть полезно, например, для отображения шагов в модуле последовательности:

Изображение с мануала
Изображение с мануала

4

Информационные теги для элементов пользовательского интерфейса

С помощью следующей команды:

set_control_help(<control-id>,<text-string>)

назначает текстовую строку, которая будет отображаться при наведении на элемент пользовательского интерфейса

Вы можете создавать тексты справки, которые появляются при наведении мыши на элемент пользовательского интерфейса (убедитесь, что информационная панель Kontakt видна). Просто попробуйте:

on init

declare ui_knob $Knob(0,100,1)

set_control_help($Knob, "Hello, I'm the only knob, folks")

end on

Ручка Unit Mark for Semitone (Ручка полутонов)

$KNOB_UNIT_ST

отображает «ST» (полутон) в качестве метки регулятора

Новые переменные параметры двигателя

Ниже приведен список всех новых переменных параметров движка для новых эффектов в Kontakt 3:

Skreamer (Скример)

$ENGINE_PAR_SK_TONE

$ENGINE_PAR_SK_DRIVE

$ENGINE_PAR_SK_BASS

$ENGINE_PAR_SK_BRIGHT

$ENGINE_PAR_SK_MIX

Rotator (Ротатор)

$ENGINE_PAR_RT_SPEED

$ENGINE_PAR_RT_BALANCE

$ENGINE_PAR_RT_ACCEL_HI

$ENGINE_PAR_RT_ACCEL_LO

$ENGINE_PAR_RT_DISTANCE

$ENGINE_PAR_RT_MIX

Twang (Звонкий)

$ENGINE_PAR_TW_VOLUME

$ENGINE_PAR_TW_TREBLE

$ENGINE_PAR_TW_MID

$ENGINE_PAR_TW_BASS

Cabinet (Кабинет)

$ENGINE_PAR_CB_SIZE

$ENGINE_PAR_CB_AIR

$ENGINE_PAR_CB_TREBLE

$ENGINE_PAR_CB_BASS

$ENGINE_PAR_CABINET_TYPE

5

Не забудьте подписаться!