KSP все о нем

Тема в разделе "Native Instruments", создана пользователем PianoIst, 29 дек 2013.

  1. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Не могу понять почему выскакивает варнинг типа "object ENV_AHDSR not found - index will be invalid" огибающие работают, скрипт эдитор ошибок не находит. В чём загвоздка?
     
  2. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    без кода сказать сложно.... Первая мысль - что это не совсем энжин параметр. Группа-то у него есть, а слота нет
    --- добавлено 18 ноя 2015, дата сообщения: 18 ноя 2015 ---
    можно попробовать покурить на тему команды find-target
    --- добавлено 18 ноя 2015 ---
    Понадобились они мне тут, и нашел в сети. Пусть будут здесь
     

    Вложения:

  3. V_ad_im

    V_ad_im Well-Known Member

    Регистрация:
    31 окт 2006
    Сообщения:
    757
    Симпатии:
    282
    А вот такой вопрос - если мы имеем несколько групп, записанных разной громкостью (например, 7 слоёв громкости скрипок), и хочется переключаться между ними колесом модуляции, а не за счёт велосити, да ещё чтобы кроссфейд был между этими слоями - это в контакте скриптом решается или так можно, малой кровью накрутить?
     

    Вложения:

  4. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    малой кровью
    редактируете 1-ю группу, чтобы никаких управлялок громкостью не было (вкладка mod посередине где-то)
    создаете 6 групп для разных слоев.
    Ставите галку edit all groups
    И добавляете параметр модуляции по CC. В окошке lag поставить значение около 50
    Дальше каждую группу редактируете по отдельности, рисуя огибающие в выпадающем окошке, вуаля.
    --- добавлено 16 дек 2015, дата сообщения: 16 дек 2015 ---
    вот так
     

    Вложения:

    V_ad_im нравится это.
  5. V_ad_im

    V_ad_im Well-Known Member

    Регистрация:
    31 окт 2006
    Сообщения:
    757
    Симпатии:
    282
    Но при этом по-прежнему слои переключаются, только если я заново нажму клавишу, а без нажатия не хотят - в халионе это решается переключением New note на Held note, а в контакте как?
     
  6. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    @V_ad_im, параметр модуляции на CC поправили?
    если скрипта нет - то все должно работать. Если есть скрипт - непонятно на кой он в такой ситуации нужен))))
    группы должны быть все желтенькими при взятии ноты, если все правильно.
    Если не так - проверить макимальное кол-во голосов для инструмента (вверху там где название), проверить вкладку group sstart options, чтоб стояло always
    и проверить, чтоб во всех группах сэмплы были растянуты на весь диапазон велосити. можно нажать кнопку selected groups only в mapping editor
     
    V_ad_im нравится это.
  7. V_ad_im

    V_ad_im Well-Known Member

    Регистрация:
    31 окт 2006
    Сообщения:
    757
    Симпатии:
    282
    Вот так? ползунок ещё выдвинул, чтобы кривая влияла на на 100%
     

    Вложения:

    Последнее редактирование: 16 дек 2015
  8. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    @V_ad_im, Да, все правильно. Проверьте распределение сэмплов по велосити
     
    V_ad_im нравится это.
  9. V_ad_im

    V_ad_im Well-Known Member

    Регистрация:
    31 окт 2006
    Сообщения:
    757
    Симпатии:
    282
    Велосити у всех звуков стоят от 1 до 127, каждая нота покрывет весь диапазон.
    А вот кривые для СС где правильней рисовать? потому как вкладка Mod есть в секции Amplifier, а есть ещё и в секции volume
     
  10. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    сейчас @Ostap Fender поднял достаточно насущную проблему. Хотелось бы влыожить рассуждение по ее поводу сюда:
    Расположение и работа слайдеров - не та часть, которую надо копипастить.
    Надо оставить ровно столько слайдеров, сколько их будет в максимальной комплектации (експрессия, атака, релиз, сустейн, LFO, и т.д.) По одному на параметр.
    Не для каждой группы собственные, а в принципе, мы ж типа аналог моделируем? Аналог не будет ручкой вращать от нажатия кнопки.
    То-есть для каждого слайдера заведем мини-секцию, отделенную пропусками строк в on init, примерно так:
    Код:
    on init
      declare ui_slider $Attack (0,127,1)
      set_control_par(get_ui_id ($Attack),$CONTROL_PAR_MOUSE_BEHAVIOUR,подобрать)
      set_control_par(get_ui_id ($Attack),$CONTROL_PAR_DEFAULT_VALUE,0)
      set_control_par_str(get_ui_id ($Attack),$CONTROL_PAR_PICTURE,"картинка")
    
      declare ui_slider $Release (0,127,1)
      set_control_par(get_ui_id ($Release),$CONTROL_PAR_MOUSE_BEHAVIOUR,подобрать)
      set_control_par(get_ui_id ($Release),$CONTROL_PAR_DEFAULT_VALUE,0)
      set_control_par_str(get_ui_id ($Release),$CONTROL_PAR_PICTURE,"картинка")
    
    end on
    и т.д.

    Потом в этой же мини-секции добавить по текстовой переменной, которая будет отвечать за надпись
    Потом создать сетку расположения:
    условно:
    есть базовый х и базовый у. Из этого делается ряд переменных для расположения элементов:
    $x_base (изначальное смещение по х)
    $x_step (смещение каждого следующего элемента по х)
    $x_width (размер кнопки\слайдера по х)
    то же самое для у
    $y_base
    $y_step
    $y_height

    как минимум по три параметра, иногда надо больше.
    А дальше при расположении самих элементов занимается элементарной процедурой сложения-умножения:
    move_control_px ($Attack,$x_base+$x_step*3+$x_width*4, $y_base)
    этой строчкой ты расположишь элемент в третью ячейку той таблицы, которую организуешь сам.
    Таким образом впоследствии мы сможем изменением одной цифры менять все интервалы между контроллерами.

    Потом, как и говорил во всех группах за одни и те же параметры должны отвечать одни и те же контроллеры:
    во всех группах атака, скажем, будет подчиняться контроллеру 50, а релиз 51

    потом в каллбеке on ui_control (переменная слайдера) добавляем команду
    set_controller (номер контроллера, переменная слайдера)
    Таким образом мы установим атаку во всех группах на уровень слайдера.


    С текстом придется повозиться больше всего.
    Нужен будет строковый массив (к примеру !Attack_indicator[128]), в котором будет храниться значение для каждого положение контроллера приравненное к ms
    Легче всего это сделать так:
    Код:
    $i := 0
    while ($i<128)
      !Attack[$i] := максимальное значение атаки в ms \ на 128 * $i
      inc ($i)
    end while
    Далее нужно придумать каким способом у нас будет выводиться текст на виртуальный дисплей.
    Самый простой - сделать его в виде ui_label
    и простым суммированием текстовых переменных добавлять все надписи. Будет возможно, некрасиво, но просто
    Код:
    set_text ($indicator, "Attack" & !Attack[%CC[50]])
    add_text_line($indicator"Release" !Release[%CC[51]])
    При чем, это нужно будет прописать в каллбеке каждого контролера, а так же в каллбеке on init

    Более сложный способ - добавление самого окошка в кач-ве картинки и расположение отдельных ui_label со скрытым фоном (hide_part (&Attack_indicator, $HIDE_PART_BG)) как нам хочется. Даст больше гибкости в настройке, но добавит геморроя.

    Ну и в довершение работы над слайдерами - прописать все hide_part для тех кнопок на которых они не нужны отдельной функцией, вызываемой из всех каллбеков, или в каждом каллбеке по отдельности. Речь идет о ui-каллбеках кнопок и возможно каллбеке on note

    Вообще работа над качественным интерфейсом - самая изнурительная, после нарезки сэмплов.
    Искать новые алгоритмы для реализации никем не придуманных функций интересно и здорово; заниматься же постоянным копипастингом собственных формулировок с заменой одной-двух букв, в коде на 3000 строк - уныние.
    --- добавлено 10 мар 2016, дата сообщения: 24 янв 2016 ---
    еще одна концепция программирования сегодня всплыла в обсуждении:
    Чтобы, скажем, одной ручкой контролировать и dry и wet сигнал конволюции в противофазе, надо сделать так:
    Код:
    on init
    
    declare $i_invert
    declare $i
    $i_invert = 127
    $i = 0
    declare %invert_velocity[128]
    while ($i_invert >= 0)
    %invert_velocity[$i]:=$i_invert
    inc ($i)
    dec ($i_invert)
    end while
    
    end on
    
    on ui_control ($drywet_slider)
    
    set_engine_par ($ENGINE_PAR_SEND_EFFECT_DRY_LEVEL,%invert_velocity[$drywet_slider]*7874,-1,0,1)
    set_engine_par ($ENGINE_PAR_SEND_EFFECT_OUTPUT_GAIN,$drywet_slider*7874,-1,0,1)
    
    end on

    при этом то, что я обозвал $drywet_slider должно быть со шкалой 127.

    При этом: я добавил коэфицент умножения *7874. Это число получается, если максимальную шкалу engine-параметра разделить на 127. Но, нам же не нужно wet и dry сигналы разгонять до абсурдных значений.
    Соответственно, это число должно быть меньше, выводить надо экспериментальным путем, чтобы в положении 0 слайдер выдавал 100% dry сигнала, а в положении 127 - 100% wet-сигнала. Возможно, как раз 1000 подойдет

    Вообще очень полезно иметь при себе инвертированную шкалу миди-параметров, я ее использую довольно часто. К примеру, если нужно организовать какой-нибудь специфический кроссфейд. Так же можно создать несколько разных шкал, которые будут расположены по всему диапазону. В общем, стоит подумать о миди-маппинге.
     
    Последнее редактирование: 10 мар 2016
    V_ad_im нравится это.
  11. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    сегодня открыл отвратительнейшую особенность контакта... Envelope AHDSR применяется к зоне во время ее активации. То-есть. Взяли ноту при показателе release 20ms, держим, двигаем release в значение 200ms, и отпускаем. Играет релиз 20ms. В то же время, мы спокойно можем менять частоту envelope sine, как так...
     
  12. incubator

    incubator Active Member

    Регистрация:
    24 янв 2007
    Сообщения:
    248
    Симпатии:
    62
    Адрес:
    Spb
    Друзья помогите пожалуйста создать мульти скрипт(multiscript ) что бы отфильтровать #CC 7 контроллер на все каналы контакта. Проблема в следующем используем контакт на живых выступлениях а на контроллерах (Гитарах) невозможно отключить этот volume -7 CC и часто гитаристы задевают его тем самым меняя баланс инструментов. Пробовал стандартным фактори миди фильтром он отрубает все контроллеры а мне нужны c #CC 1 и до #CC 6 Буду очень благодарен!
     
  13. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    @incubator,
    Код:
    on midi_in
    if ($MIDI_COMMAND = $MIDI_COMMAND_CC and $MIDI_BYTE_1 = 7)
    ignore_midi
    end on
     
    incubator нравится это.
  14. incubator

    incubator Active Member

    Регистрация:
    24 янв 2007
    Сообщения:
    248
    Симпатии:
    62
    Адрес:
    Spb
    @PianoIst, Спасибо громадное! Заработал правда контакт попросил добавить еще "end if" чисто интуитивнго поставил и фильтрует без ошибок!Супер!
     
    PianoIst нравится это.
  15. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.444
    Симпатии:
    1.304
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    @incubator, да, чет я про него забыл )))
     

Поделиться этой страницей