KSP все о нем

Интересно :) Тут можно пробовать и без кейсвитча обойтись, а сделать автоматически. Засекать время, через которое берётся новая нота, и если оно слишком короткое, глушить предыдущую ноту.
как-то геморно, мне кажется. если я правильно понял проблему - лучше ввести какой-нить массив, в который складировались бы по порядку id эвентов с того же хэта, при привышении кол-ва активных сэмплов вырубать их)
а есть же еще регулирование полифонии группы с режимом kill oldest
 
  • Like
Реакции: ruslan.st
Да, тут можно пробовать и совсем без массива выкрутиться всего с одной переменной для последнего события. Изначально я думал, что дополнительная переменная вермени может пригодиться для более точного подсчёта fade-time. Теоретически без примера сложно сказать как лучше.
cool, а можно патч этого райда выложить? вдруг что нибудить получится наэксперементировать :moil:
 
а можно патч этого райда выложить?

Спасибо за интерес к инструменту, но нет смысла в этом. Там уже всё готово и работает как нужно. Любое автоматическое событие не будет работать корректно - автомат же не знает в какой момент мне нужно заглушить тарелку. Это событие привязано к характеру композиции, аранжировке и темпу. И только я знаю в какой момент мне поставить нотку глушения. Автомат не справится :)
 
  • Like
Реакции: ruslan.st
Еквалайзер (Solid G-EQ), компрессор (Solid Comp)...
У Н.Либерга в редакторе их нет, поэтому решил поделиться...когда писал скрипты, думал использовать его на библе ударных, но надобность в этом отпала...так как всё равно пользуюсь стороними эффетами...но кому-нибудь думаю пригодится...
В $slot := [после равно прописывайте номер ячейки(-1), где вы открыли эквалайзер или компрессор в меню Insert Effects]. По дефолту я поставил в первую ячейку эквалайзер, во вторую - компрессор.
в insert effects обработка будет действовать на все группы, если вам надо установить на отдельную группу(или группы), то посылайте группу(или группы) на BUS-шину(а их,благо, 16 штук), и после $slot_eq прописывайте: $NI_BUS_OFFSET + 15(в данном случае это 16-я шина) .
пример(14 строка из эквалайзера):
$SEQgainLF := _get_engine_par($ENGINE_PAR_SEQ_LF_GAIN,-1,$slot_eq,$NI_BUS_OFFSET + 15)
и далее по аналогии...15 шина будет $NI_BUS_OFFSET + 14 и т.п. =)
Можно конечно ещё в Group Insert Fx модуль запихнуть, но там нужно будет на каждую группу открывать...дольше и кропотливее...для избежания этого утомительного процесса, думаю, в 5ой версии и реализовали bus-шины...))))))
скрипты ннннада!? :download:
 

Вложения

Последнее редактирование:
  • Like
Реакции: PianoIst
скрипты нннада!?)))
Cкрипт, заменяющий фоновую картинку при нажатии клавиши...
В архиве пример с бас-бочкой(nki,скрипт в текстовом виде,пара картинок,сэмпл)...чтобы всё работало, картинки background1 и background2 переместите в корневую папку контакта pictures...у меня по умолчанию она имеет след. адрес:
C://Program Files/Common Files/Native Instruments/Kontakt 5/pictures

Данный скрипт будет полезен для тех, кто делает библиотеку ударных. Особенно, если нарисовать установку с подсвечиванием или затемнением при ударах в тот или иной элемент ударной установки...но не надо забывать, что возможны одновременные удары сразу по нескольким элементам ударки. Следовательно, картинок будет гораздо больше...)))) удачи)
 

Вложения

Последнее редактирование:
  • Like
Реакции: arkaine
Можно дополнить ваш скрипт примечанием о возможности использования picture_state?
Процесс создания кода для спрайта можно найти по поиску словосочетания выше в правом мануале шапки темы. Сам спрайт создается в программке knobman, советую снабжать работающим txt из любой коммерческой библиотеки, но выставив свои параметры, т.к. могут быть проблемы с кодировкой вашего собственного.

В данном случае, думаю как раз наверное, употребительнее использование спрайтов)
А wallpaper, или ui_label размером с окно инструмента более близки для окна настроек.

В приложении пример такой же анимации, но со спрайтами, правда, эта версия старая некрасивая и недоделанная. Кстати, если покрутите колесо модуляции, изменится и надпись breath.:greedy:

Corvus, спасибо, что наполняете раздел скриптами))) Можно попросить Вас не забывать создавать либо папки resources/pictures. А лучше, изначально, перед работой над примером ресурс-контейнер?
Я-то догадался перекинуть все так, чтобы изображения появились, но, возможно, придет в голову не всем. А пример, в силу своей прозрачности, очень полезен:up:
 

Вложения

  • Like
Реакции: arkaine
но не надо забывать, что возможны одновременные удары сразу по нескольким элементам ударки. Следовательно, картинок будет гораздо больше...
А еще, кстати, если человек владеет высоким искусством верстки, то имеет смысл подумать о разрезании изображений на отдельные инструменты установки и назначении этих картинок на много ui_label

пример с использованием ui_button. Но, к сожалению, без высокого искусства верстки. И, за ненадобностью, без связи кейсвитчей и картинки в одну экосистему) Картинки работают, как кейсвитчи, кейсвитчи, как сменители картинок нет:schmoll:
 

Вложения

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

Вложения

  • supra_snare.jpg
    supra_snare.jpg
    20,5 KB · Просмотры: 11
Меня интересует следующий момент...может кто талкнёт идею для написания след.функции:
Пример:
у нас имеется 2 группы сэмплов,назначенные на одну клавишу...по умолчанию играет первая группа...но если мы нажимем клавишу пока не закончилось длительность сэмпла 1ой группы,то автоматически все последующие удары контакт будет брать из 2ой группы...но если сэмпл заканчивается(по длительности),независимо от воспроизведенной группы, следующий сэмпл будет браться из 1ой группы...?

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

можно, конечно, просто взять и назначить это всё дело на регулятор CC#х(например колесо modwheel) или сделать это через кейсвич, или, ещё проще, на другую клавишу, но страть как "хотца" реализовать через скрипт...)))))))))))
 
Последнее редактирование:
думаю, использовать play_note ($EV_NOTE,EV_VEl,0,0), во-вторых, при взятии сэмпла инкризить переменную типа $note_count, или такой же массив, если речь идет о нескольких тарелках. А при релизе (который будет по окончании сэмпла) декризить. А дальше для Вас уже дело техники:up:
 
  • Like
Реакции: Corvus13
PianoIst, благодарю за мысль))) надо будет попробовать...
у меня, правда, были мысли через группы реализовать, но так тоже думаю сгодится...)
 
Последнее редактирование:
через группы, в смысле, без скриптования?
можно заделать тогда обычный раунд-робин в меню редакции групп)
можно так и назначить, просто при релизе с $note_count = 0 отправлять раунд-робин в позицию 1. Где-то была такая фишка в KSP Manual
 
PianoIst, скриптованием. Просто через allow/disallow group и подвязать это к note и release командам...
 
а, ну это и было у меня изначально в голове :) Я и сказал, что это дело техники для Вас, потому что все остальное должно быть очевидно. С раунд-робином, это уже извращение, чтобы, возможно! снять лишний код
 
...С раунд-робином, это уже извращение...
Тоже так подумал)))

кстати, нашёл у себя самую первую рукопись по KSP скриптингу от апреля 2006...решил прикрепить, думаю, лишней не будет...)))
 

Вложения

  • Like
Реакции: zindersons
через allow/disallow group

Вот это решение, имхо, лучше оставлять на крайний случай. Ибо дальнейшем могут быть проблемы с mute и round robin, реализованными через те же allow/disallow скрипта. Просто сам уже сталкивался, получил много головной боли :)

За рукопись по ksp отдельное спасибо!

upd.
Полчаса уже читаю этот мануал. Очень доступно и дружественно всё описано, с детально разжёванными примерами. Этого так не хватало в новой версии...
 
Последнее редактирование:
Полчаса уже читаю этот мануал. Очень доступно и дружественно всё описано, с детально разжёванными примерами. Этого так не хватало в новой версии...
поэтому и решил залить...когда пишу скрипт, почему то невольно открываю старую версию...она нагляднее что ли...)))
 
а где-от видел я мануал. Там для фоновой картинки ни в коем не использовали код для wallpaper, а делали все через ui_label
а потом, это и логично. Кому наод менять wallpaper по CC, или ноткой?
 
Кому наод менять wallpaper по CC, или ноткой?

Вспомнился забавный, неюзабельный пример из вчерашнего мануала :)

Код:
on init 
 declare ui_button $Bingo 
 $Bingo := 1 
move_control ($Bingo,0,0) 
end on 
on note 
move_control ($Bingo,3,6) 
end on 
on release 
move_control ($Bingo,0,0) 
end on
 
скрипт "чокинга"

Да, я его видел на vi-forum, когда сам искал способы закрытия хэта скриптом. Он меня отпугнул сложностью, ну и как то к нему нужно было несколько RR групп прикручивать, а это опять сложности...
 
cool, он на группы никоем образом не влияет...лично проверил...там от зависимости клавишь всё "танцуется"(т.е. обязательно 2 клавиши:открытый и закрытый хэт)...даже раздельные группы для открытого и закрытого не нужно делать... я на 6 группах проверил(ничего не меняя в скрипте) и всё ок)))

p.s.:там версия 1.0 была, а эта 1.1...может ты раннюю версию юзал, поэтому и были траблы с группами?..
 
Последнее редактирование:
cool, он на группы никоем образом не влияет...лично проверил...там от зависимости клавишь всё "танцуется"(т.е. обязательно 2 клавиши:открытый и закрытый хэт)... я на 6 группах проверил(ничего не меняя в скрипте) и всё ок)))

p.s.:там версия 1.0 была, а эта 1.1...может ты раннюю версию юзал, поэтому и были траблы с группами?..

Не, именно эту пробовал. Помню, что увидел ваншоты в примере hh_choke1.1.zip, мельком глянул сложный код и сразу же переключился на поиск другого решения :) Сейчас проверил у себя - действительно, глушит чётко, не мешая работе работе оригинального скрипта и RR.

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


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

убираете ui_value_edit
вместо них создаете массивы с номерами нот закрытого хэта и так же, через "while $i" проверяете открытый это хэт или закрытый
только тут отсутствует разделение на удар по закрывающемуся хэту и закрытому. Для этого можно добавить еще одну переменную, которая бы давало число 1 каждый раз, когда играете открытым хэтом и 0, когда закрытым.
То-есть, при значении 1 и ударе по закрытому проигрывается сэмпл с чокингом, а при значении 0 просто удар по уже закрытому. Вот и весь релизьм
 
Последнее редактирование:
Проблему нескольких нот открытого-закрытого хета можно решить примитивным размножением переменных. И дополнив условия в 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
 
  • Like
Реакции: Kokarev Maxim
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 канал, поэтому немного слышно остальные барабаны.
 

Вложения

  • Like
Реакции: RJ Baker и ruslan.st
готовлю материал по мульти-скриптам и всему, касающемуся миди-сигналов (возможно, миди-плеер останется за бортом). Калбеки, работающие константы, приемы, интерфейс, уже засек некоторые недокументированные возможности. У кого есть пожелания и вопросы - присылайте.
 
  • Like
Реакции: ruslan.st
Разобрался с проигрыванием миди. Это организуется чтением отдельных миди-событий из файла и ноты надо в коде проигрывать с помощью play_note/note_off. Синхронизацию организовать надо тоже "вручную" переводя миди тики в миллисекунды и вызывая wait. Всё происходит в вызове on listener - эта функция вызывается регулярно через короткие промежутки времени, как прерывание в OC.

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

Вложения

Сейчас просматривают