KSP все о нем (1 онлайн

Sunshineman

Musicmaker
22 Июн 2005
1.750
841
113
45
Москва — Севастополь
vk.com
Короче удалось скомпилировать из двух скриптов один. Конечно получилось громоздко, наверняка можно как-то проще это сделать, но всё работает именно так как мне нужно. Скрипт прикрепил, может кому пригодится.

223980
 

Вложения

Sunshineman

Musicmaker
22 Июн 2005
1.750
841
113
45
Москва — Севастополь
vk.com
Значительно сократил количество строк в скрипте:
Код:
on init
    set_script_title("Copy CC# to all Ch.")
    declare $ch
    declare $i
    declare ui_value_edit $CC_num1(-1, 127, 1)
    declare ui_value_edit $CC_num2(-1, 127, 1)
    declare ui_value_edit $CC_num3(-1, 127, 1)
    declare ui_value_edit $CC_num4(-1, 127, 1)
    declare ui_value_edit $CC_num5(-1, 127, 1)
    declare ui_value_edit $CC_num6(-1, 127, 1)
    declare ui_value_edit $CC_num7(-1, 127, 1)
    declare ui_value_edit $CC_num8(-1, 127, 1)
    declare ui_value_edit $CC_num9(-1, 127, 1)
    declare ui_value_edit $CC_num10(-1, 127, 1)
    declare ui_value_edit $CC_num11(-1, 127, 1)
    declare ui_value_edit $CC_num12(-1, 127, 1)
    declare ui_value_edit $CC_num13(-1, 127, 1)
    declare ui_value_edit $CC_num14(-1, 127, 1)
    declare ui_value_edit $CC_num15(-1, 127, 1)
    declare ui_value_edit $CC_num16(-1, 127, 1)
    declare ui_value_edit $CC_num17(-1, 127, 1)
    declare ui_value_edit $CC_num18(-1, 127, 1)
   
    set_text($CC_num1,"CC#")
    set_text($CC_num2,"CC#")
    set_text($CC_num3,"CC#")
    set_text($CC_num4,"CC#")
    set_text($CC_num5,"CC#")
    set_text($CC_num6,"CC#")
    set_text($CC_num7,"CC#")
    set_text($CC_num8,"CC#")
    set_text($CC_num9,"CC#")
    set_text($CC_num10,"CC#")
    set_text($CC_num11,"CC#")
    set_text($CC_num12,"CC#")
    set_text($CC_num13,"CC#")
    set_text($CC_num14,"CC#")
    set_text($CC_num15,"CC#")
    set_text($CC_num16,"CC#")
    set_text($CC_num17,"CC#")
    set_text($CC_num18,"CC#")
   
    make_persistent($CC_num1)
    make_persistent($CC_num2)
    make_persistent($CC_num3)
    make_persistent($CC_num4)
    make_persistent($CC_num5)
    make_persistent($CC_num6)
    make_persistent($CC_num7)
    make_persistent($CC_num8)
    make_persistent($CC_num9)
    make_persistent($CC_num10)
    make_persistent($CC_num11)
    make_persistent($CC_num12)
    make_persistent($CC_num13)
    make_persistent($CC_num14)
    make_persistent($CC_num15)
    make_persistent($CC_num16)
    make_persistent($CC_num17)
    make_persistent($CC_num18)

    move_control($CC_num1,1,1)
    move_control($CC_num2,2,1)
    move_control($CC_num3,3,1)
    move_control($CC_num4,4,1)
    move_control($CC_num5,5,1)
    move_control($CC_num6,6,1)
    move_control($CC_num7,1,2)
    move_control($CC_num8,2,2)
    move_control($CC_num9,3,2)
    move_control($CC_num10,4,2)
    move_control($CC_num11,5,2)
    move_control($CC_num12,6,2)
    move_control($CC_num13,1,3)
    move_control($CC_num14,2,3)
    move_control($CC_num15,3,3)
    move_control($CC_num16,4,3)
    move_control($CC_num17,5,3)
    move_control($CC_num18,6,3)

end on

on midi_in
    $ch := $MIDI_BYTE_1 mod 16
    if ($MIDI_COMMAND=$MIDI_COMMAND_CC and ($MIDI_BYTE_1=$CC_num1 or $MIDI_BYTE_1=$CC_num2 or $MIDI_BYTE_1=$CC_num3 or $MIDI_BYTE_1=$CC_num4 or $MIDI_BYTE_1=$CC_num5 or $MIDI_BYTE_1=$CC_num6 or $MIDI_BYTE_1=$CC_num7 or $MIDI_BYTE_1=$CC_num8 or $MIDI_BYTE_1=$CC_num9 or $MIDI_BYTE_1=$CC_num10 or $MIDI_BYTE_1=$CC_num11 or $MIDI_BYTE_1=$CC_num12 or $MIDI_BYTE_1=$CC_num13 or $MIDI_BYTE_1=$CC_num14 or $MIDI_BYTE_1=$CC_num15 or $MIDI_BYTE_1=$CC_num16 or $MIDI_BYTE_1=$CC_num17 or $MIDI_BYTE_1=$CC_num18))
        set_midi($ch,$MIDI_COMMAND,$MIDI_BYTE_1,$MIDI_BYTE_2)
        $i := 0
        while ($i <= 63)
            set_midi($i, $MIDI_COMMAND, $MIDI_BYTE_1, $MIDI_BYTE_2)
            $i := $i + 1
        end while
    end if
end on
 
  • Like
Реакции: V_ad_im

semiono.spb

Member
5 Сен 2022
33
3
8
43
Мне нужен скрипт, будьте добры, чтобы инструмент Контакт на педаль сустейна не реагировал.
Смысл в том чтобы скажем бас педалью удерживать (в другом пресете) а мелодический
пресет не висел на педали. Было бы хорошо совсем если бы пару груп семплов сделать,
верхнюю отфильтровать от CC64, а нижнюю оставить с педалью как есть.

Нашёл какие-то обрывки ksp, пробовал, никакой реакции почему-то! Может ещё в настройках
что то включить? Я не разбираюсь в скриптах, пожалуйста конкретно если что.
На просторах какие-то ksp с ошибками! Сразу if красным и пишет якобы инструкция
в данном сегменте не допускается, это что версия другая или просто тупо ошиблись?

Хотелось бы попрще)
 

semiono.spb

Member
5 Сен 2022
33
3
8
43
Код:
on controller
    if ($CC_NUM = 64)
        ignore_controller
    end if
end on
Всего-то три строчки... но не работает, либо это не весь код. Весь код с ошибками тут :rolleyes:

Код:
on init
    declare ui_value_edit $Chan (1, 16, 1)
    declare ui_button $FilterPedal

    make_persistent($Chan)
    make_persistent($FilterPedal)
end on

on midi_in
    if ($MIDI_CHANNEL = $Chan - 1)
        if ($MIDI_COMMAND = $MIDI_COMMAND_CC and $MIDI_BYTE_1 = 64)
            ignore_midi
        end if
    end if
end on
 

PianoIst

Well-Known Member
19 Май 2010
4.090
4.140
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@semiono.spb, Эти два примера для разных сущностей. Верхний ‒ для того, чтобы использовать в инструменте. Нижний ‒ в мульти-скрипте.

В верхнем примере, думаю, ошибка в том, что надо ещё скобки нарисовать
Код:
on controller
    if ($CC_NUM = 64)
        ignore_controller()
    end if
end on
Педаль можно отключить и в настройках инструмента, там где настраивается полифония, пишется about и т.п. В Вашем случае ‒ самый простой и безопасный вариант.

То, что вы описывали, с работой педали только для басов ‒ это уже надо заново писать скрипт сустейна. Навскидку я б что-то такое написал, но на KSP я уже очень давно не писал…

Код:
{ Compiled on Tue Jan 23 22:24:59 2024 }
on init
  declare %events[127]
  declare $split := 48
  declare $event
end on

on controller
  if ($CC_NUM=64 and (%CC[64]<60))
    $event := 0
    while ($event<=126)
      if (%KEY_DOWN[$event] # 1 and (%events[$event] # 0))
        note_off(%events[$event])
        %events[$event] := 0
      end if
      inc($event)
    end while
  end if
end on

on note
  if (%events[$EVENT_NOTE] # 0)
    fade_out(%events[$EVENT_NOTE],300,1)
  end if
  %events[$EVENT_NOTE] := $EVENT_ID
end on

on release
  if (%CC[64]>=60)
    if ($EVENT_NOTE<=$split)
      ignore_event($EVENT_ID)
    else
      %events[$EVENT_NOTE] := 0
    end if
  else
    %events[$EVENT_NOTE] := 0
  end if
end on
 
  • Like
Реакции: semiono.spb

PianoIst

Well-Known Member
19 Май 2010
4.090
4.140
113
29
Kirchberg, kreis Zwickau
soundcloud.com
По хорошему, надо бы реализовать честную полифонию, чтобы все эвенты складывались друг за другом, а потом удалялись только нужные. Но я слабо представляю как на KSP сделать эффективную структуру данных для этого…
 
  • Like
Реакции: semiono.spb

semiono.spb

Member
5 Сен 2022
33
3
8
43
Выяснил! В Cubase работает. FL Studio тупит. Однако, теперь педаль молчит, но насчёт групп не понял
{ unsustained incoming note played using all groups except the first group (group 0) }
что за группы? Сделал две Group и даже Voice Group назначал, или это в скрипте надо группы указывать...
Ладно, сейчас проверю то что вы написали, заранее благодарен!
 

semiono.spb

Member
5 Сен 2022
33
3
8
43
Код:
on init
  declare polyphonic $id
  declare const $SUSTAINED := $MARK_26
  SET_CONDITION(NO_SYS_SCRIPT_PEDAL)
end on

on note    
  { sustained generated note played using first group (group 0) }
  disallow_group($ALL_GROUPS)

  $id := play_note($EVENT_NOTE, $EVENT_VELOCITY, 0, 0)

  { unsustained incoming note played using all groups except the first group (group 0) }
  allow_group($ALL_GROUPS)

end on

on release
  { if sustain pedal pressed }
  if (%CC[64] >= 64)
    set_event_mark($id, $SUSTAINED)
  else
    note_off($id)
  end if
end on

on controller
  { if sustain pedal released }
  if (%CC_TOUCHED[64] # 0 and %CC[64] < 64)
    note_off(by_marks($SUSTAINED))
  end if
end on
Вот этот скрипт работает. Только полностью (на все группы) :rolleyes:
В идеале хотелось бы слева басы с педалью оставить

Я просто не понимаю как группы к скрипту привязать))
--
Всмысле у меня один nki, я nkm мульти вообще никогда не использую
 
Последнее редактирование:
  • Like
Реакции: PianoIst

PianoIst

Well-Known Member
19 Май 2010
4.090
4.140
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Я просто не понимаю как группы к скрипту привязать
как у меня ‒ по номеру ноты. Просто фильтруйте диапазон, на котором скрипт работать не должен.

А так, да ‒ полифоник переменные ‒ то, что нужно.
 
  • Like
Реакции: semiono.spb

semiono.spb

Member
5 Сен 2022
33
3
8
43
В вашем скрипте не хватало задекларировать это
SET_CONDITION(NO_SYS_SCRIPT_PEDAL)

тупо копипастом случайно вышло))) я уже думал никак :D

Отлично! Смысл сего чтобы играть типа Stride Piano (бас + аккорд) при этом справа мелодию не смазывать.
А вообще пытаюсь сделать левую руку аккордеона, то же бас+аккорд стиль.
Есть идея даже готовые аккорды с рут басом на одну клавишу повесить по велосити. ))
Одну клавишу нажимаешь, то бас то аккорд. Но тут тогда педаль не нужна. Хотя это слишком заморочка.
Готовых аккордов много не разместить в пределах одной октавы.
 
Последнее редактирование:

Сейчас онлайн (Пользователей: 0, Гостей: 1)