KSP все о нем

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

     
  1. Corvus13

    Corvus13 Member

    Регистрация:
    6 янв 2013
    Сообщения:
    35
    Симпатии:
    17
    Пол:
    Мужской
    Нашел скрипт "чокинга"(глушения) хэта...автор Ivan Kovachev...
     

    Вложения:

  2. Kokarev Maxim

    Kokarev Maxim ex cool

    Регистрация:
    13 май 2007
    Сообщения:
    3.516
    Симпатии:
    1.948
    Пол:
    Мужской
    Род занятий:
    freelance, mixing
    Адрес:
    Барнаул
    Да, я его видел на vi-forum, когда сам искал способы закрытия хэта скриптом. Он меня отпугнул сложностью, ну и как то к нему нужно было несколько RR групп прикручивать, а это опять сложности...
     
  3. Corvus13

    Corvus13 Member

    Регистрация:
    6 янв 2013
    Сообщения:
    35
    Симпатии:
    17
    Пол:
    Мужской
    cool, он на группы никоем образом не влияет...лично проверил...там от зависимости клавишь всё "танцуется"(т.е. обязательно 2 клавиши:открытый и закрытый хэт)...даже раздельные группы для открытого и закрытого не нужно делать... я на 6 группах проверил(ничего не меняя в скрипте) и всё ок)))

    p.s.:там версия 1.0 была, а эта 1.1...может ты раннюю версию юзал, поэтому и были траблы с группами?..
     
    Последнее редактирование: 11 фев 2014
  4. Kokarev Maxim

    Kokarev Maxim ex cool

    Регистрация:
    13 май 2007
    Сообщения:
    3.516
    Симпатии:
    1.948
    Пол:
    Мужской
    Род занятий:
    freelance, mixing
    Адрес:
    Барнаул
    Не, именно эту пробовал. Помню, что увидел ваншоты в примере hh_choke1.1.zip, мельком глянул сложный код и сразу же переключился на поиск другого решения :) Сейчас проверил у себя - действительно, глушит чётко, не мешая работе работе оригинального скрипта и RR.

    Но тут же опять сложность - у меня в инструменте 3 ноты открытого хэта и 4 закрытого. То есть, в любом случае, пришлось бы ковыряться в скрипте, добавляя эти условия. В итоге, своим скриптом и обошёлся, "всего то" три дня убил на решение проблемы :laugh:
     
  5. PianoIst

    PianoIst Well-Known Member

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


    P.S. А, ну так и есть.

    убираете ui_value_edit
    вместо них создаете массивы с номерами нот закрытого хэта и так же, через "while $i" проверяете открытый это хэт или закрытый
    только тут отсутствует разделение на удар по закрывающемуся хэту и закрытому. Для этого можно добавить еще одну переменную, которая бы давало число 1 каждый раз, когда играете открытым хэтом и 0, когда закрытым.
    То-есть, при значении 1 и ударе по закрытому проигрывается сэмпл с чокингом, а при значении 0 просто удар по уже закрытому. Вот и весь релизьм
     
    Последнее редактирование: 11 фев 2014
  6. ruslan.st

    ruslan.st New Member

    Регистрация:
    13 дек 2012
    Сообщения:
    13
    Симпатии:
    5
    Проблему нескольких нот открытого-закрытого хета можно решить примитивным размножением переменных. И дополнив условия в if.
    Вариант с возможностью настроить до 6 нот:
    Код:
    {*********************************************** 
     HH CHOKING v1.1 
     Author: www.audiogrocery.com 
     Written by: Ivan Kovachev 
     Modified: July 12, 2013 
     *************************************************} 
     on init 
     message("") 
     set_script_title("HH Choking") 
     make_perfview 
     declare const $ARRAY_SIZE := 20 {Set the Note ID history amount here} 
     declare %n_num_ids[$ARRAY_SIZE] 
     declare $id_pos 
     declare $i 
     declare ui_value_edit $OpHH_1 (0,127,0)
     declare ui_value_edit $OpHH_2 (0,127,0) 
     declare ui_value_edit $OpHH_3 (0,127,0) 
     declare ui_value_edit $OpHH_4 (0,127,0) 
     declare ui_value_edit $OpHH_5 (0,127,0) 
     declare ui_value_edit $OpHH_6 (0,127,0) 
     
     declare ui_value_edit $ClHH_1 (0,127,0)
     declare ui_value_edit $ClHH_2 (0,127,0) 
     declare ui_value_edit $ClHH_3 (0,127,0) 
     declare ui_value_edit $ClHH_4 (0,127,0) 
     declare ui_value_edit $ClHH_5 (0,127,0)
     declare ui_value_edit $ClHH_6 (0,127,0) 
     
     make_persistent($OpHH_1) 
     make_persistent($OpHH_2) 
     make_persistent($OpHH_3) 
     make_persistent($OpHH_4) 
     make_persistent($OpHH_5) 
     make_persistent($OpHH_6) 
     make_persistent($ClHH_1) 
     make_persistent($ClHH_2) 
     make_persistent($ClHH_3) 
     make_persistent($ClHH_4) 
     make_persistent($ClHH_5) 
     make_persistent($ClHH_6) 
     end on 
    
     on note 
     if ($EVENT_NOTE=$ClHH_1 or $EVENT_NOTE=$ClHH_2 or $EVENT_NOTE=$ClHH_3 or...
     $EVENT_NOTE=$ClHH_4 or $EVENT_NOTE=$ClHH_5 or $EVENT_NOTE=$ClHH_6) 
     $i:=0 
     while($i<$ARRAY_SIZE) 
     fade_out(%n_num_ids[$i],10000,1) 
     %n_num_ids[$i]:=0 
     inc($i) 
     end while 
     $id_pos:=0 
     end if 
     if ($EVENT_NOTE=$OpHH_1 or $EVENT_NOTE=$OpHH_2 or $EVENT_NOTE=$OpHH_3 or...
     $EVENT_NOTE=$OpHH_4 or $EVENT_NOTE=$OpHH_5 or $EVENT_NOTE=$OpHH_6) 
     ignore_event($EVENT_ID) 
     inc($id_pos) 
     if($id_pos=$ARRAY_SIZE-1) 
     $id_pos:=0 
     end if 
     %n_num_ids[$id_pos]:=play_note($EVENT_NOTE,$EVENT_VELOCITY,-1,0) 
     end if 
     end on
    
     
    Kokarev Maxim нравится это.
  7. Kokarev Maxim

    Kokarev Maxim ex cool

    Регистрация:
    13 май 2007
    Сообщения:
    3.516
    Симпатии:
    1.948
    Пол:
    Мужской
    Род занятий:
    freelance, mixing
    Адрес:
    Барнаул
    ruslan.st, спасибо огромное! Оказывается всё запредельно просто :) В итоге я свой глючный скрипт заменил этим полностью, за пару минут буквально. Правда упростил скрипт, выбросив элементы управления. Ноты ведь постоянны, проще их задать один раз и всё. В результате, он вот так выглядит:



    Код:
    on init 
     declare const $ARRAY_SIZE := 20 {Set the Note ID history amount here} 
     declare %n_num_ids[$ARRAY_SIZE] 
     declare $id_pos 
     declare $i 
    end on 
    
    on note 
     if ($EVENT_NOTE=66 or $EVENT_NOTE=67 и т.д) 
       $i:=0 
       while($i<$ARRAY_SIZE) 
       fade_out(%n_num_ids[$i],10000,1) 
       %n_num_ids[$i]:=0 
       inc($i) 
       end while 
       $id_pos:=0 
     end if 
       if ($EVENT_NOTE=70 or $EVENT_NOTE=71 or и т.д) 
       ignore_event($EVENT_ID) 
       inc($id_pos) 
       if($id_pos=$ARRAY_SIZE-1) 
       $id_pos:=0 
     end if 
       %n_num_ids[$id_pos]:=play_note($EVENT_NOTE,$EVENT_VELOCITY,-1,0) 
     end if 
    end on
    Кстати, мой первоначальный код глючил, если открытая нота была длиннее закрытой. То есть, длительность выходила за неё. С этим скриптом всё ок.

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

    Вложения:

    RJ Baker и ruslan.st нравится это.
  8. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    готовлю материал по мульти-скриптам и всему, касающемуся миди-сигналов (возможно, миди-плеер останется за бортом). Калбеки, работающие константы, приемы, интерфейс, уже засек некоторые недокументированные возможности. У кого есть пожелания и вопросы - присылайте.
     
    ruslan.st нравится это.
  9. ruslan.st

    ruslan.st New Member

    Регистрация:
    13 дек 2012
    Сообщения:
    13
    Симпатии:
    5
    Разобрался с проигрыванием миди. Это организуется чтением отдельных миди-событий из файла и ноты надо в коде проигрывать с помощью play_note/note_off. Синхронизацию организовать надо тоже "вручную" переводя миди тики в миллисекунды и вызывая wait. Всё происходит в вызове on listener - эта функция вызывается регулярно через короткие промежутки времени, как прерывание в OC.

    Прицепил упрощённый пример (по мотивам Studio Drummer), скрипт во вкладке "Listener". Kontakt 5.3.1
     

    Вложения:

    • Drummica011.zip
      Размер файла:
      467,9 КБ
      Просмотров:
      3
  10. Hedgehog

    Hedgehog Well-Known Member

    Регистрация:
    4 окт 2006
    Сообщения:
    683
    Симпатии:
    782
    Пол:
    Мужской
    Род занятий:
    Композитор
    Адрес:
    Москва
  11. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    Друзья, прошу помощи мозговым штурмом:) мозги кипят, и, видимо, я не замечаю чего-то очевидного

    цель - скриптованная транзиция с регулируемой значением velocity скоростью. Не могу откалибровать скорость слайда.
    Код:
    on note {пока ничего интересного}
        disallow_group ($ALL_GROUPS)
        allow_group (find_group("Trem_Sul_E_f"))
        ignore_event($EVENT_ID)
        if (in_range($EVENT_NOTE,64,88))
            $lastnote:=$EVENT_NOTE
            $interval:=$lastnote - $firstnote {вычисление диапазона скачка (если таковой есть)}
            message ($interval)
            if ($firstnote = 0)
                $newnote_id:=play_note($EVENT_NOTE,$EVENT_VELOCITY,0,-1){сустейн, в случае, если нет транзиций}
            end if
            if ($firstnote # 0) {самая интересная часть}
                $i:=0
                $leg_time := 250000/$EVENT_VELOCITY {250000 - четверть секунды, мксимальное время транзиции (на velocity 0) на velocity 127, соответственно 1969}
                                   {цикл со скриптовым слайдом}
                while ($i < $leg_time) {это второй способ: длина одной итерации 1 микросекунда, а кол-во циклов соответствует времени слайда}
                    change_tune ($firstnote_id, 100000/$leg_time*$interval,1) {100000 - полтона}
                    wait (1)
                    inc ($i)
                end while
    {Такая организация цикла мне кажется правильной, но не работает :( тюнинга не случается, просто последующие fade in и fade out}
                message ($firstnote_id)
    {Дальше все работает}
                fade_out ($firstnote_id,$leg_time,1) {гасим предыдущую нотку}
                $newnote_id:=play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
                fade_in ($newnote_id, $leg_time) {параллельно выводим настоящую нотку}
            end if
            wait (5000)
            $firstnote:= $EVENT_NOTE {назначаем необходимые переменные}
            $firstnote_id:=$newnote_id
        end if
    end on

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

    Код:
    $leg_time := 250000/127*$EVENT_VELOCITY
                while ($i < 100000){в отличие от предыдущего варианта кол-во итераций всегда одинаково - количество микротонов в полутоне}
                    change_tune ($firstnote_id, $interval,1)  {за каждую итерацию мы повышаем тон на 1\100000 нашего интервала}
                    wait (100000/%leg_time){а вот как и почему это работает, я не понимаю}
                    inc ($i)
                end while
                $newnote_id:=play_note($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
                fade_in ($newnote_id,%leg_time)
                fade_out($firstnote_id,%leg_time,0)
    
     
  12. ruslan.st

    ruslan.st New Member

    Регистрация:
    13 дек 2012
    Сообщения:
    13
    Симпатии:
    5
    С этими wait легко натолкнуться на проблемы. По тексту кажется всё логично и должно работать. Второй вариант выглядит экономнее, так как change_tune вызывается реже (при больших велосити). Может в первом варианте одной микросекунды мало между вызовами и начинает глючить. А зачем потом ещё нужен wait (5000)?
     
  13. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    вернулся ко второму способу и удалось откалибровать более-менее))
    а wait там исключительно потому что с ним работает))) грубо говоря, он добавляет багоустойчивости во время всего этого цикла))
     
  14. ruslan.st

    ruslan.st New Member

    Регистрация:
    13 дек 2012
    Сообщения:
    13
    Симпатии:
    5
    Тут полностью не видно, но ещё источником косяков мог быть тип счётчика $i, если не сделать его polyphonic изза переходов по wait его значения сбиваются.
     
  15. Corvus13

    Corvus13 Member

    Регистрация:
    6 янв 2013
    Сообщения:
    35
    Симпатии:
    17
    Пол:
    Мужской
    Всем доброго времени суток! Кто поможет отыскать $ENGINE параметр для свитчей "Phase invert" и "L/R Swap" в amp модуле. Прошерстел мануал, ничего не нашел. :frusty:
     
  16. Kokarev Maxim

    Kokarev Maxim ex cool

    Регистрация:
    13 май 2007
    Сообщения:
    3.516
    Симпатии:
    1.948
    Пол:
    Мужской
    Род занятий:
    freelance, mixing
    Адрес:
    Барнаул
    Corvus13, я управлял ими только активацией/байпасом слота с inverter. Другого способа тоже не нашёл...
     
    Corvus13 нравится это.
  17. Corvus13

    Corvus13 Member

    Регистрация:
    6 янв 2013
    Сообщения:
    35
    Симпатии:
    17
    Пол:
    Мужской
    Kokarev Maxim, через инвертер в слоте муторно, да и в 5-ке инвертера нет, они его влепили на общий amp модуль, что в общем и правильно, но в обновлённом KSP мануале ничего про это не сказано. От 5-ки отказаться не могу, очень удачно они там сделали BUS-шины. Ладно, буду искать параметр методом тыка.:frusty:
     
  18. ruslan.st

    ruslan.st New Member

    Регистрация:
    13 дек 2012
    Сообщения:
    13
    Симпатии:
    5
    На сколько знаю, нет такой возможности. Только ставить заготовленный эффект inverter и управлять по bypass. В 5 инвертер есть.
     
    Corvus13 нравится это.
  19. Corvus13

    Corvus13 Member

    Регистрация:
    6 янв 2013
    Сообщения:
    35
    Симпатии:
    17
    Пол:
    Мужской
    Kokarev Maxim, ruslan.st, да,вижу,есть инвертор(за экран, паразит, залез, вот и не узрел). Жаль, что только так инвертером управлять(через слоты). Ведь как-то дожны они активироваться через скрипт.:huh:
     
  20. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Друзья! А нельзя ли заново как-то выложить и рукопись и примеры скриптов заново? А то невозможно скачать. Спасибо!
    --- добавлено 26 сен 2015, дата сообщения: 28 июл 2015 ---
    Да. Жалко, что тема заглохла. Но на всякий случай спрошу так как новичок. К примеру я хочу оцифровать электроорган. Допустим у меня куча групп каждая из которых заключает в себе семплы записанные при крайних положениях регуляторов (регистров к примеру). В итоге я в Контакте двигая фейдер и у меня звук изначальной группы смешивается с группой в сторону которой я двигаю фейдер. При этом громкость этих групп изменяется соответствующим образом т.е. предыдущая группа становится тише в то время как втроая группа становится громче. Правильно ли я думаю? Или это реализовывается другими способами? Подскажите куда копать. Спасибо!
     
  21. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    Да, все правильно. В Домре на всех артикуляциях я делал банальный x-fade в модуляционной секции групп. Правда, не знаю, насколько все будет кошерно с двумя положениями регуляторов, ибо, чем больше слоев - тем реалистичнее переход. В домре было 4 и меня все устраивало, а сейчас делаем гусли, и на роллах там два слоя, мне уже не так нравится, но ничего не поделать, и два слоя на записи было трудно обеспечить: инструмент маленький, палочками на нем обычно не играют, короче, артикуляция из разряда, чтоб было :)
    Еще, самое главное - максимально хорошо выровнять сэмплы в хосте при редактировании. А если там еще и всякие вибрато - то это надо отдельно думать, как с ними быть. С духовым инструментом я бы однозначно делал все скриптом:
    Проанализировать при игре цикл вибрато, и записать, скажем, ослабленный и немного заниженный тон + сильный и завышенный, потом выровнять их по громкости и питчу и кинуть в две группы. А в процессе модуляции, одновременно с фейдомэтих двух звуков таскать питч на оригинальную высоту каждого тона. + отдельная группа для безвибратных сэмплов.
    В общем, анализируйте инструмент, планируйте реализацию всего этого внутри контакта перед записью и по возможности минимизируйте скрипт :)

    Рукопись я, к сожалению, так и не скачал. А мануалы выложу чуть позже, сейчас какой-то застрел со временем.
    --- добавлено 26 сен 2015, дата сообщения: 26 сен 2015 ---
    Да, рукопись (если это оно) можно найти здесь
     
    zindersons нравится это.
  22. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Спасибо!
    А можно подробнее об x-fade. И если можно, пример кода реализующий подобную задачу?
     
  23. PianoIst

    PianoIst Well-Known Member

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

    А если вы о вибрато, о котором я говорил, то с этим все очень сложно :)
    Но примерно так:
    Код:
    on controller
    
    if (%CC[$vibrato] > 0)
    wait (5000) {безвибратный период}
    $vib_i := 0
    {добавляем питч и громкость до максимума вибрато}
    while ($vib_i <= $max_vib)
    change_tune (random, ($tune_min,$tune_max),1)
    set_engine_par ($ENGINE_PAR_VOLUME,random($vol_min,$vol_max),find_group("vibrato_hi",-1,-1))
    ($ENGINE_PAR_VOLUME,random(-$vol_min,-$vol_max),find_group("vibrato_low",-1,-1))
    end while
    
    {убавляем соответственно до минимума}
    while ($vib_i <= 0)
    change_tune (random, ($tune_max_min,-$tune_max),1)
    set_engine_par ($ENGINE_PAR_VOLUME,random($vol_min,$vol_max),find_group("vibrato_low",-1,-1))
    ($ENGINE_PAR_VOLUME,random(-$vol_min,-$vol_max),find_group("vibrato_hi",-1,-1))
    end while
    end if
    
    end on
    кроме того, надо назначить все эти переменные. Кроме того, в приведенном коде питч и громкость постепенно будет уползать в непредсказуемую сторону, над этим надо думать еще долго.
    В общем, давайте конкретные задачи, будем ковырять :)

    P.S. Да, еще должен быть общий цикл, который бы это все кртил до конца времен, со своей переменной, типа $vib_all_i
     

    Вложения:

    • x-fade.png
      x-fade.png
      Размер файла:
      32,7 КБ
      Просмотров:
      8
    Последнее редактирование: 27 сен 2015
    zindersons нравится это.
  24. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Спасибо большое, буду разбираться. Нет, пока что не вибрато, а просто группы с разным характером тембрального звучания.
     
  25. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    если у органа много регистров (что вероятно), Вам надо проштудировать секцию on note, on init, on ui_control, group parameters, allow_group() ui_button() set_note_color() в KSP Reference manual

    Проблемы возникнут, когда окажется, что при переключении кейсвитча все зависимости, указанные в калбеках on ui_control (для каждой кнопки) работать не будут. Решение в том, чтобы скопировать с умом все из этих каллбеков в on note

    примерно выглядеть будет так:
    Код:
    on init
    declare ui_button $art1
    declare ui_butoon $art2
    
    set_key_color (48,$KEY_COLOR_RED)
    set_key_color (49,$KEY_COLOR_RED)
    end on
    
    on ui_control ($art1)
    if ($art1 = 0)
    $art1:=1
    else
    $art2:=0
    end if
    end on
    
    on ui_control ($art2)
    if ($art2 = 0)
    $art2:=1
    else
    $art1:=0
    end if
    end on
    
    on note
    ignore_event ($EVENT_ID)
    
    if ($EVENT_NOTE = 48)
    $art1 = 1
    $art2=0
    end if
    if ($EVENT_NOTE = 49)
    $art1 = 0
    $art2=1
    end if
    
    if ($EVENT_NOTE # 48 and $EVENT_NOTE # 49 and $art1 = 1)
    allow_group (0) {группа с артикуляцией 1}
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
    end if
    
    if ($EVENT_NOTE # 48 and $EVENT_NOTE # 49 and $art2 = 1)
    allow_group (1) {группа с артикуляцией 2}
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
    end if
    
    end on
    это уже рабочий код, надо только загрузить сэмплы в две разные группы
     
    zindersons нравится это.
  26. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Спасибо за код, думаю он обязательно пригодится. Решил свою примитивную задачу x-фейдом. Только вот не могу настроить кривые так, чтобы при хоть даже и не большом значении выдвинутого фейдера звук УЖЕ изменялся. А у меня начинает заметно изменяться примерно на середине шкалы, а до этого звук, скажем так, dry.
     
  27. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    если потянуть за кругляшок по центру между точками envelope - можно настроить градус спада.
    Если сделать в 0 - будет примерно то, что вы хотите, но к центру общий уровень снизится. Можно более точно остроить, добавив еще пару точек. Как уже и говорил, две позиции - не панацея, лучше 4
     
    zindersons нравится это.
  28. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Разобрался, спасибо! Теперь следующий вопрос. У меня 4 слоя с разным характером звучания и 4 слоя тех же, только обработанных эффектом. Следовательно, если работает один слой при выдвинутом регуляторе эффекта, то и характер обработанного сигнала соответственный , если 2, 3 или 4 слоя одновременно, или по одиночке каждый из них, то эффект должен проявлять себя соответствующим образом. Но регулятор-то эффекта один. Как быть в этом случае?
    Спасибо!
     
  29. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    @zindersons, Опять-таки хочется чуть-чуть конкретики: что это за эффект? Если что-то, что можно повторить в цифре - возможно лучше воспользоваться импульсом этого эфекта и крутить конволюционный ревер через engine_par.
    Ежели он очень спецефичен, но вполне располагает к кроссфейду - то делаем 8 групп, или, если инструмент сам по себе не очень велик, и назначаем перекрестные кроссфейды. как-то так:
    --- добавлено 2 окт 2015, дата сообщения: 2 окт 2015 ---
    к слову, это все так же описывается скриптами, если параметров сильно до кучи, и надо дать полную свободу выбора микширования между ними.
    Надо разделить шкалу ENGINE_PAR_VOLUME на 127 и создать два массива по 128 значений, которые будут хранить в себе прямой и инвертированный набор этих значений. Таким массивом можно пользоваться для любых манипуляций с громкостью посредством контроллера. Если вам нужна такая технология - скажите, попробую описать
    --- добавлено 2 окт 2015 ---
    P.S. опытным путем было определено, что 0Db приравниваются к значению 630000
     

    Вложения:

    • crossfade 2.png
      crossfade 2.png
      Размер файла:
      22,3 КБ
      Просмотров:
      6
    zindersons нравится это.
  30. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Спасибо!
    Эффект что-типа типа вибрато.
    Допустим у меня несколько регуляторов выраженных так:

    Код:
        declare ui_slider $cello (0, 400)
        make_persistent ($cello)
        set_control_par_str(get_ui_id($cello), $CONTROL_PAR_PICTURE, "slider")
        set_control_par(get_ui_id($cello),$CONTROL_PAR_MOUSE_BEHAVIOUR,-2500)
        move_control_px($cello, ($GRID_X * 1)-24, ($GRID_Y * 4) -50)
    

    сам эффект
    Код:
    declare ui_slider $tremolo (0, 1000)
        make_persistent ($tremolo)
        set_control_par_str(get_ui_id($tremolo), $CONTROL_PAR_PICTURE, "rslider")
        set_control_par(get_ui_id($tremolo),$CONTROL_PAR_MOUSE_BEHAVIOUR,-2500)
        move_control_px($tremolo, ($GRID_X * 2)+170, ($GRID_Y * 4) -50)
    

    затем

    Код:
    if ($tremolo <250)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*300),1,(find_mod(1,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*300),2,(find_mod(2,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*450),1,(find_mod(1,"LFO_TRI")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*450),2,(find_mod(2,"LFO_TRI")),-1)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * 1000),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * 0),3,-1,-1)    {Cello Tremolo}
        end if
        if (in_range($tremolo,251,500))
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(1500+($tremolo*250)),1,(find_mod(1,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(1500+($tremolo*250)),2,(find_mod(2,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(2500+($tremolo*400)),1,(find_mod(1,"LFO_TRI")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(2500+($tremolo*400)),2,(find_mod(2,"LFO_TRI")),-1)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * (1000-($tremolo-250))),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * ($tremolo+250)),3,-1,-1)    {Cello Tremolo}
        end if
        if (in_range($tremolo,501,750))
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,125000,1,(find_mod(1,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,125000,2,(find_mod(2,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,200000,1,(find_mod(1,"LFO_TRI")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,200000,2,(find_mod(2,"LFO_TRI")),-1)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * (1000-($tremolo-250))),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * ($tremolo+250)),3,-1,-1)    {Cello Tremolo}
        end if
    

    затем
    Код:
    if ($tremolo <250)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*300),1,(find_mod(1,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*300),2,(find_mod(2,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*450),1,(find_mod(1,"LFO_TRI")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,($tremolo*450),2,(find_mod(2,"LFO_TRI")),-1)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * 1000),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * 0),3,-1,-1)    {Cello Tremolo}
        if (in_range($tremolo,251,500))
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(1500+($tremolo*250)),1,(find_mod(1,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(1500+($tremolo*250)),2,(find_mod(2,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(2500+($tremolo*400)),1,(find_mod(1,"LFO_TRI")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,(2500+($tremolo*400)),2,(find_mod(2,"LFO_TRI")),-1)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * (1000-($tremolo-250))),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * ($tremolo+250)),3,-1,-1)    {Cello Tremolo}
    
        end if
        if (in_range($tremolo,501,750))
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,125000,1,(find_mod(1,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,125000,2,(find_mod(2,"LFO_SINE")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,200000,1,(find_mod(1,"LFO_TRI")),-1)
                _set_engine_par($ENGINE_PAR_MOD_TARGET_INTENSITY,200000,2,(find_mod(2,"LFO_TRI")),-1)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * (1000-($tremolo-250))),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * ($tremolo+250)),3,-1,-1)    {Cello Tremolo}
    
        end if
        if ($tremolo>750)
            set_engine_par($ENGINE_PAR_VOLUME,($cello * (1000-($tremolo-250))),1,-1,-1)    {Cello Basic}
            set_engine_par($ENGINE_PAR_VOLUME,($cello * 1000),3,-1,-1)    {Cello Tremolo}
    
    


    и так для каждого тембра. Как это будет работать? Каков здесь принцип?
     
    Последнее редактирование: 3 окт 2015
    PianoIst нравится это.
  31. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    Да в принципе, на глаз ничего не смущает. Точнее смущает одно... Вроде есть и lfo и разные тембры в группах, это странно. Но если нравится как звучит, почему нет? :)
    Я просто с внутриконтактовскими эфектами особо сильно не работал, по этому плохо представляю что делает MOD_TARGET_INTENSITY. Подозреваю, что добавляет огибающую, которая в зависимости от ваших манипуляций с контролером tremolo как-то изменяется )) Тут главное - слоты не перепутать.
    Дык вот, схема получается, что вы кроссфейдите (то-есть плавно меняете уровень звука между тремоло и basic), и попутно плавно меняете значение модуляций. Получается что-то вроде картриджа spitfire earth ;)
    И последний вопрос, который остался: косяков в звуке при движении контроллеров нет? в смысле скачков громкости, или еще каких артефактов?

    Если что-то не звучит так как надо - опишите характер этого не так как надо:)
     
    zindersons нравится это.
  32. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    В том, то и дело, что косяки есть. В некоторых случаях контороллер никак не реагирует пока не кликнешь на него. Допустим вывел на максимум вибрато при каком нибудь уровне слоя "basic", затем изменил уровень слоя "basic" в любую сторону и реакции никакой. Затем просто кликнул на слайдер вибрато и звук резко изменияется в соответствии с положением регуляторов.
     
  33. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    А, это легко лечится:
    Во-первых, для всех необходимых переменных в конце каллбека note on надо написать команду make_persistent(<переменная>). А перед этим проверить все назначения set_engine_par, И сразу же перед этим для всех необходимых переменных прописать read_persistent_var(). То-есть, порядок должен быть такой
    1. Declare
    2. read_persistent_var
    3. set_engine_par и все, что должно устанавливаться на сохраненный уровень в on init.
    4. прямо в самом конце on init - make_persistent()

    Во-вторых, все, что у вас написано в ui_control - перенести в каллбек on controller И выбрать любой $CC_NUM для условия if чтоб оно окружило этот код.

    В-третьих, образовавшуюся пустоту в каллбеке on ui_control (<слайдер>) заполнить строчкой:
    %CC[<выбранный вами контроллер>]:= <переменная слайдера>
    И потом уже по всем правилам контакта щелкнуть правой кнопкой мышки по слайдеру и назначить ему автоматизацию. (Лучше, не тем контроллером, который вы выбрали. Этот вообще лучше зафигачить в какое-нибудь число типа 74)
     
    Последнее редактирование: 5 окт 2015
    zindersons нравится это.
  34. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    вот ещё проблема к кнопкой. Не анимируется switch. Действия воспринимаются, а картинка не меняется. Со слайдерами всё в порядке.
    --- добавлено 6 окт 2015, дата сообщения: 6 окт 2015 ---
    Да, и не могу чё-то запилить слайдер который менял бы общий питч.

    вроде так должно быть, нет?

    Код:
    declare ui_slider $pitch (-36, 36)
    set_control_par(get_ui_id($pitch),$CONTROL_PAR_DEFAULT_VALUE,500000)
       make_persistent ($pitch)
       set_control_par_str(get_ui_id($pitch), $CONTROL_PAR_PICTURE, "slider")
        set_engine_par($ENGINE_PAR_TUNE,($pitch + 36) * 13889,0,-1,-1)
        move_control_px($pitch,  42, 178)
    
     
  35. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    На свитче в окне интерфейса картинка воспринимается как надо, или висит большой портянкой из разных изображений?
    Для свитчей и кнопок есть определенная последовательность изображений, которая должна находиться в "простыне" . Кроме того, png должно быть в "правильной" упаковке, что можно обеспечить железно экспортом из программы knobman. И сопровождаться должно txt-файлом в верной кодировке и с соответствующей последовательностью строк. У меня часто проблемы были, когда я пытался создавать такой txt самостоятельно. По этому пользуюсь любым другим от коммерческих библ, или из папочки NI в "мои документы", только заменив необходимые цифры.
    Более того, когда вы вызываете из других каллбеков контролер, команда не активирует соответствующий ему каллбек on ui_control. Для некоторых действий полезно пользоваться каллбеком on ui_update, но пока у меня не возникало такой необходимости. Все изменения, которые необходимо применить к контроллеру UI необходимо прописывать так же во всех каллбеках, учавствующих в его изменении.
    поищите в сети developer guide, ибо у меня тоже затерялся. Там еще описаны фишки со шрифтами.

    По поводу питча - на меня затмение нашло... Не помню точно, какие цифры за что отвечают... Если в мануале по set_engine_par есть такая графа, как relative-bit, проверьте, чтобы он был задан правильно (то бишь, абсолютное ли это значение, или добавляем его к текущему). А вообще я бы перевел все процедуры относящиеся к звуку в два каллбека: on note и on ui_control. Так надежнее. Для питча лучше всего использовать change tune с необходимыми значениями и relative-bit 0 (применить к дефолтному значению) в каллбеке on note.
    --- добавлено 6 окт 2015, дата сообщения: 6 окт 2015 ---
    если после всего свитчи не заработают - добавляйет везде строчки с изменением PICTURE_STATE. Но по идее, именно работа свитчей и кнопок с картинками реализована достаточно просто для разраба и не требует доп кода. Вот для слайдеров и ui_label уже начинаются ухищрения
     
    zindersons нравится это.
  36. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    так в том то и дело, что всё в правильной кодировке в txt, количество анимации 2 фрейма. txt файлы для слайдеров создавал самостоятельно - всё работает (правда долго парился с приколом по поводу обязательной пустой строки в самом конце:) )Саму кнопку брал из галереи кнобмена, разные перепробовал. Не анимируется и всё тут. Буду проверять всё ещё раз.
     
  37. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    для кнопок и свитчей надо 6 фреймов. Прочитайте developer guide, там по кнопкам всего 2 странички :)
     

    Вложения:

    zindersons нравится это.
  38. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Точно. Нашёл. Я то думал, что для тумблера в двух положениях нужно только 2 фрейма, а оказывается что нужно всё равно размножить кол-во фреймов до 6-ти.
    --- добавлено 12 окт 2015, дата сообщения: 7 окт 2015 ---
    Сделал слайдер питча с отображением значения, но почему-то значение (в полутонах) не меняется. Меняется только после нажатия сохранения в скрипт едиторе.
    Код:
     set_text($pitchlb, get_engine_par_disp($ENGINE_PAR_TUNE, -1,-1, -1) & " st")
     
  39. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    точно в том каллбеке где надо находится?
    наверное, должно быть в on controller, ну и на всякий в on ui_control.
    а, может быть и такой косяк, что $ENGINE_PAR_TUNE пустой до тех пор, пока ноту не возьмете, лучше привязывать к слайдеру, только не подскажу как (в смысле значений)
    --- добавлено 12 окт 2015, дата сообщения: 12 окт 2015 ---
    как идея.... если используете питч на интервалы не меньше полутона, почему бы не сделать это на миди-уровне? :)
     
    zindersons нравится это.
  40. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    всё верно, нужно было в on ui_control писать это.
    --- добавлено 16 окт 2015, дата сообщения: 12 окт 2015 ---
    а в чём прикол работы с move_control_px в рамках констант? допустим

    Код:
    declare const $ROOT_X := 66
        declare const $ROOT_Y := 2
        declare const $GRID_X := 92
        declare const $GRID_Y := 21
    .......

    Код:
    move_control_px($my_knob, ($GRID_X * 1) - 15, ($GRID_Y * 2) - 4)
    не проще ли в move_control_px срзу определить координаты? Или чем-то чревато не привязываться к константам?
     
  41. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    Загляните в библу latin percussion от brio, если есть доступ. Сразу станет ясно.
    Смысл в том, чтоб константами определить положение рядов и колонок для верстки. И при необходимости не переписывать все значения кнопок и пр, а просто поменять положение колонки или ряда целиком
    --- добавлено 16 окт 2015, дата сообщения: 16 окт 2015 ---
    в конкретном примере, они добиваются равномерного расположения фейдеров друг меж другом, изменяя одно число
     
    zindersons нравится это.
  42. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    А есть ли возмосжность в Sublime Text вернуть в нормальный вид переменные сформированные ф-цией "Compact Variables" или чудес не бывает?
     
  43. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    оу....... Это, я не знаю о таком:eek:. А контакт какой? Мне еще лень было обновляться на 0.6, а в мануале по 0.4 я такого не нахожу)) Думаю, быстрее будет спросить в NI User Forums
     
  44. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    )) я имел ввиду редактор. В плагине KSP к нему есть функция преобразовывающая переменные в нечитаемый вид.
     
  45. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    а... не использовал))) я б все-таки в ручную делал, с занесением в протокол, какая абракадабра чем является...
    Еще полезно использовать версии. Даня Беличенко вообще на каждый чих новый txt создает, и к релизу в рабочем обиходе получается какая-нибудь версия 3.98:D

    Да и самое ли ценное в библиотеке - скрипт? KSP не настолько обширный язык, чтоб в нем имелись сотни вариантов решения проблемы, т.ч. те, кто им владеет, мне кажется, прекрасно представляют как повторить тот или иной момент в коде, а те кто не владеет не разберутся и с исходниками.... А вот иделя - да, ценна, но она всех на виду:rolleyes:
     
  46. Ostap Fender

    Ostap Fender New Member

    Регистрация:
    21 окт 2015
    Сообщения:
    17
    Симпатии:
    23
    Пол:
    Мужской
  47. zindersons

    zindersons Member

    Регистрация:
    16 ноя 2006
    Сообщения:
    70
    Симпатии:
    16
    Подскажите пожалуйста как сделать чтобы родной скрипт арпеджиатора не цеплял ноты кейсвитчей?
     
  48. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    if (in_range (<поискать число, отвечающее за играемую ноту арпеджиатором. Должна быть команда play_note или set_midi>,<нижняя граница кейсвитчей>,<верхняя граница кействитчей>))
    exit
    end if
    вставить в on note в самое начало (в скрипт арпеджиатора естессно)
    --- добавлено 6 ноя 2015, дата сообщения: 6 ноя 2015 ---
    Или чуть элегантнее будет так:
    Код:
    if (in_range (<переменная используемая в этой команде>,<нижняя граница кейсвитчей>,<верхняя граница кействитчей>))
    <команда, в которой первый слот (для ноты) заменен на 0>
    else
    <команда>
    {это может быть так же что-то вроде
    new_id:=play_note($new_note,<velocity>,0,1000)}
    end if
    --- добавлено 12 ноя 2015 ---
    @stl,

    Оказалось, все работает, но требует небольшой калибровки. Лучше всего, конечно, было бы все реализовывать через поиск продолжительности каждого конкретного сэмпла транзиции, но для этого, надо создавать отдельную строчку для каждого сэмпла, и получится жуткая портянка, с которой и я-то не факт, что разберусь. По этому используем упрощенный алгоритм настройки:
    Код:
    on init
    declare $firstnote := (0)
    declare $lastnote
    declare $interval
    declare $firstnote_id
    declare %posintervalgrp [2] := (1,2) {создаем отдельные группы для каждого восходящего интервала для легато, и прописываем их ID в порядке возрастания интервала (от малой секунды). 
    ID можно посмотреть если открыть вкладку monitor/groups там где у вас иконки билиотек}
    declare %negintervalgrp [2] := (3,4) {То же самое для нисходящих транзиций}
    
    end on
    
    on note
    ignore_event ($EVENT_ID)
    disallow_group ($ALL_GROUPS)
    
    $lastnote := $EVENT_NOTE
    if ($firstnote # 0)
    $interval := $lastnote - $firstnote
    end if
    
    if ($interval >0)
    note_off ($firstnote_id)
    allow_group (%posintervalgrp [$interval-1])
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,0)
    disallow_group ($ALL_GROUPS)
    wait (50000) {Экспериментально-подбираемое число, отвечающее за задержку сустейн-сэмпла для проигрывания сэмпла транзиции. 
    Надо калибровать вместе с параметрами атаки\релиза в ADSR-envelope группы для достижения максимально реалистичного звучания}
    allow_group (0) {Здесь прописываем ID группы сустейна}
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
    end if
    
    if ($interval <0)
    note_off ($firstnote_id)
    allow_group (%negintervalgrp [-$interval -1])
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
    disallow_group ($ALL_GROUPS)
    wait (50000) 
    {Экспериментально-подбираемое число, отвечающее за задержку сустейн-сэмпла для проигрывания сэмпла транзиции. 
    Надо калибровать вместе с параметрами атаки\релиза в ADSR-envelope группы для достижения максимально реалистичного звучания}
    allow_group (0) {ID группы сустейна}
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
    end if
    
    if ($interval = 0)
    allow_group (0) {ID группы сустейна}
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
    end if
    
    
    $interval :=0
    $firstnote := $EVENT_NOTE
    $firstnote_id := $EVENT_ID
    end on
    
    on release
    $firstnote :=0
    disallow_group ($ALL_GROUPS)
    if ($interval = 0)
    allow_group (5) {прописываем ID группы релиза}
    play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,0)
    end if
    end on
    
    пример инструмента, чтоб разобраться что куда работает: https://yadi.sk/d/bBRG8iWYkPxHv
     
    zindersons нравится это.
  49. stl

    stl Member

    Регистрация:
    22 июл 2011
    Сообщения:
    179
    Симпатии:
    11
    @PianoIst, я все равно не понимаю. я загрузил ваш файл, в Контакте появляется 3 играбельных ноты, как его связать с голосом? как сэмпл заменить в нем? и как играть больше нот?
     
  50. PianoIst

    PianoIst Well-Known Member

    Регистрация:
    19 май 2010
    Сообщения:
    1.657
    Симпатии:
    1.484
    Пол:
    Мужской
    Род занятий:
    Аранжировка, солист-пинанист
    Адрес:
    Новосибирск
    @stl, Прочитайте русский текст внутри {скобок} :)
    Создаете по отдельной группы для каждого интервала. То-есть, создаете группу m2_up, b2_up, m3_up и т.д. То же самое для перехода вниз. m2_dwn, b2_down, m3_down, b3_down.
    Открываете вкладку monitoring там, где у вас файловый браузер и список библиотек и пр. и, вписываете в массивы
    %posintervalgrp и %negintervalgrp ID групп через запятую. ID находится в правой колонке со списком групп. Попутно меняете значение в [скобках] возле массива на кол-во групп с интервалами.
    И вписываете нужные числа по инструкции в коде.
    все. Добавляете свои сэмплы в нужные группы на нужные ноты :)
    --- добавлено 13 ноя 2015, дата сообщения: 12 ноя 2015 ---
     

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