KSP все о нем (2 онлайн)

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Друзья, прошу помощи мозговым штурмом:) мозги кипят, и, видимо, я не замечаю чего-то очевидного

цель - скриптованная транзиция с регулируемой значением velocity скоростью. Не могу откалибровать скорость слайда.
Код:
on note [COLOR="#40E0D0"]{пока ничего интересного}[/COLOR]
    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 [COLOR="#40E0D0"]{вычисление диапазона скачка (если таковой есть)}[/COLOR]
        message ($interval)
        if ($firstnote = 0)
            $newnote_id:=play_note($EVENT_NOTE,$EVENT_VELOCITY,0,-1){сустейн, в случае, если нет транзиций}
        end if
        if ($firstnote # 0) [COLOR="#40E0D0"]{самая интересная часть}[/COLOR]
            $i:=0
            $leg_time := 250000/$EVENT_VELOCITY [COLOR="#40E0D0"]{250000 - четверть секунды, мксимальное время транзиции (на velocity 0) на velocity 127, соответственно 1969}[/COLOR]
                               [COLOR="#40E0D0"]{цикл со скриптовым слайдом}[/COLOR]
            while ($i < $leg_time) [COLOR="#40E0D0"]{это второй способ: длина одной итерации 1 микросекунда, а кол-во циклов соответствует времени слайда}[/COLOR]
                change_tune ($firstnote_id, 100000/$leg_time*$interval,1) [COLOR="#40E0D0"]{100000 - полтона}[/COLOR]
                wait (1)
                inc ($i)
            end while
[COLOR="#40E0D0"]{Такая организация цикла мне кажется правильной, но не работает :( тюнинга не случается, просто последующие fade in и fade out}[/COLOR]
            message ($firstnote_id)
[COLOR="#40E0D0"]{Дальше все работает}[/COLOR]
            fade_out ($firstnote_id,$leg_time,1) {гасим предыдущую нотку}
            $newnote_id:=play_note ($EVENT_NOTE,$EVENT_VELOCITY,0,-1)
            fade_in ($newnote_id, $leg_time) [COLOR="#40E0D0"]{параллельно выводим настоящую нотку}[/COLOR]
        end if
        wait (5000)
        $firstnote:= $EVENT_NOTE [COLOR="#40E0D0"]{назначаем необходимые переменные}[/COLOR]
        $firstnote_id:=$newnote_id
    end if
end on

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

Код:
$leg_time := 250000/127*$EVENT_VELOCITY
            while ($i < 100000)[COLOR="#40E0D0"]{в отличие от предыдущего варианта кол-во итераций всегда одинаково - количество микротонов в полутоне}[/COLOR]
                change_tune ($firstnote_id, $interval,1)  [COLOR="#40E0D0"]{за каждую итерацию мы повышаем тон на 1\100000 нашего интервала}[/COLOR]
                wait (100000/%leg_time)[COLOR="#40E0D0"]{а вот как и почему это работает, я не понимаю}[/COLOR]
                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)
 

ruslan.st

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

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
вернулся ко второму способу и удалось откалибровать более-менее))
а wait там исключительно потому что с ним работает))) грубо говоря, он добавляет багоустойчивости во время всего этого цикла))
 

ruslan.st

New Member
14 Дек 2012
14
5
3
Тут полностью не видно, но ещё источником косяков мог быть тип счётчика $i, если не сделать его polyphonic изза переходов по wait его значения сбиваются.
 

Corvus13

Member
6 Янв 2013
35
18
8
Всем доброго времени суток! Кто поможет отыскать $ENGINE параметр для свитчей "Phase invert" и "L/R Swap" в amp модуле. Прошерстел мануал, ничего не нашел. :frusty:
 

Corvus13

Member
6 Янв 2013
35
18
8
Kokarev Maxim, через инвертер в слоте муторно, да и в 5-ке инвертера нет, они его влепили на общий amp модуль, что в общем и правильно, но в обновлённом KSP мануале ничего про это не сказано. От 5-ки отказаться не могу, очень удачно они там сделали BUS-шины. Ладно, буду искать параметр методом тыка.:frusty:
 

ruslan.st

New Member
14 Дек 2012
14
5
3
На сколько знаю, нет такой возможности. Только ставить заготовленный эффект inverter и управлять по bypass. В 5 инвертер есть.
 
  • Like
Реакции: Corvus13

Corvus13

Member
6 Янв 2013
35
18
8
Kokarev Maxim, ruslan.st, да,вижу,есть инвертор(за экран, паразит, залез, вот и не узрел). Жаль, что только так инвертером управлять(через слоты). Ведь как-то дожны они активироваться через скрипт.:huh:
 

zindersons

Member
16 Ноя 2006
100
21
18
44
Тоже так подумал)))
кстати, нашёл у себя самую первую рукопись по KSP скриптингу от апреля 2006...решил прикрепить, думаю, лишней не будет...)))
Друзья! А нельзя ли заново как-то выложить и рукопись и примеры скриптов заново? А то невозможно скачать. Спасибо!
[DOUBLEPOST=1443265854,1438104292][/DOUBLEPOST]Да. Жалко, что тема заглохла. Но на всякий случай спрошу так как новичок. К примеру я хочу оцифровать электроорган. Допустим у меня куча групп каждая из которых заключает в себе семплы записанные при крайних положениях регуляторов (регистров к примеру). В итоге я в Контакте двигая фейдер и у меня звук изначальной группы смешивается с группой в сторону которой я двигаю фейдер. При этом громкость этих групп изменяется соответствующим образом т.е. предыдущая группа становится тише в то время как втроая группа становится громче. Правильно ли я думаю? Или это реализовывается другими способами? Подскажите куда копать. Спасибо!
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Да, все правильно. В Домре на всех артикуляциях я делал банальный x-fade в модуляционной секции групп. Правда, не знаю, насколько все будет кошерно с двумя положениями регуляторов, ибо, чем больше слоев - тем реалистичнее переход. В домре было 4 и меня все устраивало, а сейчас делаем гусли, и на роллах там два слоя, мне уже не так нравится, но ничего не поделать, и два слоя на записи было трудно обеспечить: инструмент маленький, палочками на нем обычно не играют, короче, артикуляция из разряда, чтоб было :)
Еще, самое главное - максимально хорошо выровнять сэмплы в хосте при редактировании. А если там еще и всякие вибрато - то это надо отдельно думать, как с ними быть. С духовым инструментом я бы однозначно делал все скриптом:
Проанализировать при игре цикл вибрато, и записать, скажем, ослабленный и немного заниженный тон + сильный и завышенный, потом выровнять их по громкости и питчу и кинуть в две группы. А в процессе модуляции, одновременно с фейдомэтих двух звуков таскать питч на оригинальную высоту каждого тона. + отдельная группа для безвибратных сэмплов.
В общем, анализируйте инструмент, планируйте реализацию всего этого внутри контакта перед записью и по возможности минимизируйте скрипт :)

Рукопись я, к сожалению, так и не скачал. А мануалы выложу чуть позже, сейчас какой-то застрел со временем.
[DOUBLEPOST=1443267940,1443267885][/DOUBLEPOST]Да, рукопись (если это оно) можно найти здесь
 
  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
Спасибо!
А можно подробнее об x-fade. И если можно, пример кода реализующий подобную задачу?
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
без скрипта :)

А если вы о вибрато, о котором я говорил, то с этим все очень сложно :)
Но примерно так:
Код:
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
 

Вложения

Последнее редактирование:
  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
Спасибо большое, буду разбираться. Нет, пока что не вибрато, а просто группы с разным характером тембрального звучания.
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
если у органа много регистров (что вероятно), Вам надо проштудировать секцию 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
это уже рабочий код, надо только загрузить сэмплы в две разные группы
 
  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
Спасибо за код, думаю он обязательно пригодится. Решил свою примитивную задачу x-фейдом. Только вот не могу настроить кривые так, чтобы при хоть даже и не большом значении выдвинутого фейдера звук УЖЕ изменялся. А у меня начинает заметно изменяться примерно на середине шкалы, а до этого звук, скажем так, dry.
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
если потянуть за кругляшок по центру между точками envelope - можно настроить градус спада.
Если сделать в 0 - будет примерно то, что вы хотите, но к центру общий уровень снизится. Можно более точно остроить, добавив еще пару точек. Как уже и говорил, две позиции - не панацея, лучше 4
 
  • Like
Реакции: zindersons

zindersons

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

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@zindersons, Опять-таки хочется чуть-чуть конкретики: что это за эффект? Если что-то, что можно повторить в цифре - возможно лучше воспользоваться импульсом этого эфекта и крутить конволюционный ревер через engine_par.
Ежели он очень спецефичен, но вполне располагает к кроссфейду - то делаем 8 групп, или, если инструмент сам по себе не очень велик, и назначаем перекрестные кроссфейды. как-то так:
[DOUBLEPOST=1443810844,1443810675][/DOUBLEPOST]к слову, это все так же описывается скриптами, если параметров сильно до кучи, и надо дать полную свободу выбора микширования между ними.
Надо разделить шкалу ENGINE_PAR_VOLUME на 127 и создать два массива по 128 значений, которые будут хранить в себе прямой и инвертированный набор этих значений. Таким массивом можно пользоваться для любых манипуляций с громкостью посредством контроллера. Если вам нужна такая технология - скажите, попробую описать
[DOUBLEPOST=1443811196][/DOUBLEPOST]P.S. опытным путем было определено, что 0Db приравниваются к значению 630000
 

Вложения

  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
Спасибо!
Эффект что-типа типа вибрато.
Допустим у меня несколько регуляторов выраженных так:

Код:
    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}


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

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
Да в принципе, на глаз ничего не смущает. Точнее смущает одно... Вроде есть и lfo и разные тембры в группах, это странно. Но если нравится как звучит, почему нет? :)
Я просто с внутриконтактовскими эфектами особо сильно не работал, по этому плохо представляю что делает MOD_TARGET_INTENSITY. Подозреваю, что добавляет огибающую, которая в зависимости от ваших манипуляций с контролером tremolo как-то изменяется )) Тут главное - слоты не перепутать.
Дык вот, схема получается, что вы кроссфейдите (то-есть плавно меняете уровень звука между тремоло и basic), и попутно плавно меняете значение модуляций. Получается что-то вроде картриджа spitfire earth ;)
И последний вопрос, который остался: косяков в звуке при движении контроллеров нет? в смысле скачков громкости, или еще каких артефактов?

Если что-то не звучит так как надо - опишите характер этого не так как надо:)
 
  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
В том, то и дело, что косяки есть. В некоторых случаях контороллер никак не реагирует пока не кликнешь на него. Допустим вывел на максимум вибрато при каком нибудь уровне слоя "basic", затем изменил уровень слоя "basic" в любую сторону и реакции никакой. Затем просто кликнул на слайдер вибрато и звук резко изменияется в соответствии с положением регуляторов.
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
А, это легко лечится:
Во-первых, для всех необходимых переменных в конце каллбека 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)
 
Последнее редактирование:
  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
вот ещё проблема к кнопкой. Не анимируется switch. Действия воспринимаются, а картинка не меняется. Со слайдерами всё в порядке.
[DOUBLEPOST=1444152863,1444140509][/DOUBLEPOST]Да, и не могу чё-то запилить слайдер который менял бы общий питч.

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

Код:
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)
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
На свитче в окне интерфейса картинка воспринимается как надо, или висит большой портянкой из разных изображений?
Для свитчей и кнопок есть определенная последовательность изображений, которая должна находиться в "простыне" . Кроме того, 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.
[DOUBLEPOST=1444158299,1444158080][/DOUBLEPOST]если после всего свитчи не заработают - добавляйет везде строчки с изменением PICTURE_STATE. Но по идее, именно работа свитчей и кнопок с картинками реализована достаточно просто для разраба и не требует доп кода. Вот для слайдеров и ui_label уже начинаются ухищрения
 
  • Like
Реакции: zindersons

zindersons

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

zindersons

Member
16 Ноя 2006
100
21
18
44
Точно. Нашёл. Я то думал, что для тумблера в двух положениях нужно только 2 фрейма, а оказывается что нужно всё равно размножить кол-во фреймов до 6-ти.
[DOUBLEPOST=1444663258,1444219408][/DOUBLEPOST]Сделал слайдер питча с отображением значения, но почему-то значение (в полутонах) не меняется. Меняется только после нажатия сохранения в скрипт едиторе.
Код:
 set_text($pitchlb, get_engine_par_disp($ENGINE_PAR_TUNE, -1,-1, -1) & " st")
 

PianoIst

Well-Known Member
19 Май 2010
4.101
4.155
113
29
Kirchberg, kreis Zwickau
soundcloud.com
точно в том каллбеке где надо находится?
наверное, должно быть в on controller, ну и на всякий в on ui_control.
а, может быть и такой косяк, что $ENGINE_PAR_TUNE пустой до тех пор, пока ноту не возьмете, лучше привязывать к слайдеру, только не подскажу как (в смысле значений)
[DOUBLEPOST=1444665401,1444665321][/DOUBLEPOST]как идея.... если используете питч на интервалы не меньше полутона, почему бы не сделать это на миди-уровне? :)
 
  • Like
Реакции: zindersons

zindersons

Member
16 Ноя 2006
100
21
18
44
всё верно, нужно было в on ui_control писать это.
[DOUBLEPOST=1445010735,1444667525][/DOUBLEPOST]а в чём прикол работы с 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 срзу определить координаты? Или чем-то чревато не привязываться к константам?
 

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