ReaScripts (скрипты для Reaper) - Учимся создавать!!! (1 онлайн

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Для чего там пустышка если он уже работает ON OFF, пустышка статус не показывает.
Показывает! У скрипта статуса нет, а у этой пустышки есть.
Если этот экшин вставить в код - то он и будет статус менять синхронно со скриптом.
Я же написал - я от куда знаю, зачем вам статус?
Мне это Михаил, в своё время, показал...
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Archchie, вы не понимаете того, что я спрашиваю?
[DOUBLEPOST=1516618857][/DOUBLEPOST]
что бы его видеть
Это целью быть не может, это ни чего не даёт!
И второе ваше утверждение ошибочно (по поводу Dummy) -
Менять будет — а показывать не будет!
И менять будет и показывать будет!
Вот в точности то, что вы хотите -
что бы в экшен листе появился статус (ON OFF)
Только так и не написали ДЛЯ ЧЕГО.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Что бы видеть статус работает скрипт или нет ,
просто кнопки все на тулбар не назначишь и часто приходится передвегается по экшен листу,а там ни как не поймёшь
работает скрипт или нет без этой надписи
Крайне не удобный и не правильный подход.
Скриптов с дефером, которые могут работать в фоне и можно просто не уследить (забыть) что их включил - не так много и их все можно разместить на видимом тулбаре.
Если ВДУГ всё-же 16 тулбаров не хватает, то сделайте для себя скрипт-тулбар и .... ну и делайте с ним что угодно.
Скрипты нужны для удобства и ускорения в работе, а поиски в Экшин листе скрипта и его статуса - это кошмар и бред!


Ну тогда покажите пример как сделать с Dummy чтоб показывался статус
Будьласка (кстати, какой-то смысл вложил в дефер) -
Dummy01.gif

PHP:
function SHOWINMIXER(show)
  reaper.Main_OnCommand(reaper.NamedCommandLookup("_S&M_DUMMY_TGL1"), 0)
  reaper.Main_OnCommand(40605,0)
  counttracks = reaper.CountTracks(0)
  if counttracks == nil then return end
  for i = 1, counttracks do
    track = reaper.GetTrack(0, i-1)
    ftr = reaper.GetParentTrack(track)
    ttr = reaper.GetMediaTrackInfo_Value(track, "I_FOLDERDEPTH")
    if ftr ~= nil and (ttr == 0 or ttr == -1 or ttr == -3) then
      htr = reaper.GetMediaTrackInfo_Value(track, "I_WNDH")
      if htr < 24 then
        reaper.SetMediaTrackInfo_Value( track, "B_SHOWINMIXER", show)
      end
    end
  end
  reaper.TrackList_AdjustWindows(false)
end

function mainloop ()
  reaper.defer(mainloop)
end

-- Set ToolBar Button ON
function SetButtonON()
  -- msg("YES")
  SHOWINMIXER(0)
  is_new_value, filename, sec, cmd, mode, resolution, val = reaper.get_action_context()
  state = reaper.GetToggleCommandStateEx( sec, cmd )
  reaper.SetToggleCommandState( sec, cmd, 1 ) -- Set ON
  reaper.RefreshToolbar2( sec, cmd )
end

-- Set ToolBar Button OFF
function SetButtonOFF()
  -- msg("NO")
  SHOWINMIXER(1)
  is_new_value, filename, sec, cmd, mode, resolution, val = reaper.get_action_context()
  state = reaper.GetToggleCommandStateEx( sec, cmd )
  reaper.SetToggleCommandState( sec, cmd, 0 ) -- Set OFF
  reaper.RefreshToolbar2( sec, cmd )
end
----------------------------------------------------------------------------------------------------

SetButtonON() -- функция запуска срипта с "поджигом" кнопки тулбара

mainloop ()

reaper.atexit(SetButtonOFF) -- выход из скрипта с запуском функции выхода с тушением кнопки тулбара

reaper.Main_OnCommand(40605,0) - делает типпа рефреша Экшин листу - так как статус то меняется, но без рефреша не отображается.
Но я повоторюсь - если у вас много скриптов с дефером, за открытием которых нужно следить и знать - то нужно это организовывать совершенно иначе!
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Я вас не понимаю!
Вот это вполне может быть - так я для этого и спрашиваю всё время - нужны ли пояснения или всё ясно!

Сейчас напишу пару нудных предложений, но вы наберитесь терпения и прочтите их!!!!!!!!
В любой работе 95% успеха это правильно поставленная задача!
И не важно вы сами её реализовыать собрались или ТЕМ БОЛЕЕ хотите попросить кого-то.
Самым не верным всегда будет, если вы со скудными знаниями предмета начнёте Задачу ставить используя эти самые знания, а не общие понятия и представления... ну вот как вы с deffer функцией начали пытаться что-то строить.
 
  • Like
Реакции: Archie's

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
1-е; в анимашке вы показываете статус экшена, а ни скрипта !
Так для этого и сделанны эти Дами, чтоб показывать статус ТОГО, что не имеет статуса.
Если у привязанного к скрипту Дами статус меняется - значит меняется и статус Скрипта, даже если там статуса не будет.
Вы же хотели ВИДЕТЬ в Экшин лист, что скрипт поменял статус - вот по привязанному дами будете видеть, хоть это (как я вам сразу написал) - бред.
Так что ваше вот это вот -
а вы сделайте с Dummy но без этой функции что бы статус показывал,как вы утверждали выше
поклёп на меня, я ни где не утверждал что ИМЕННО у Скрипта будет менятся статус с использованием Дами!
Вы хотели ВИДЕТЬ, что у скрипта поменялся статус - вот глядя на статус Дами вы это и будете ВИДЕТЬ!

В общем я устал.... Как только у вас созреет осознанный план какого-то скрипта - пишите в начале техническое задание для себя, а не кашу из набора функций, которые вы пока не понимаете.
[DOUBLEPOST=1516627165][/DOUBLEPOST]
Так вам уже указали - что не правильно учитесь... И не только я.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Скрипт ваш кстати не работает
Смотря какой работы вы от него ожидали.
Уберите лишние строки, которые только показывали работу дами, и всё работает -
при нажатии на кнопку скрипта он скрывает из Микшера треки чайлды свёрнутые до минимальной величины в окне аранжа,
а при отжатии кнопки их в Микшер возвращает (показывает).
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Функция (SetMediaTrackInfo_Value атрибут - B_SHOWINMIXER) скрывает треки!
Подскажите ,а какой функцией их свернуть,развернуть ,а то ищу и не могу найти?Посмотреть вложение 141627
Спасибо!!!
GetSetTrackStateChunk() Вторая переменная BUSCOMP.
По понятным причинам работает только с папками и с включенным Mixer: Clickable icon for folder tracks to show/hide children


какой функцией их скрыть
Функция скрывает треки!
хочу того сам не знаю чего
 
Последнее редактирование:

gazzz

Gazzuar (Goa-trance)
17 Янв 2008
246
86
28
Lyubertsy
UPD: нашел ошибку: при L>0 значание формулы могло быть <0 и проскакивали эксессы там


помогите советом по JS плагину, по-моему данный код на выходе должен хардклиповать до 0 дБ, но такого не происходит, и при росте slider1 > 2
на выходе получаю что-то зашкаливающее

при slider1 <2 формула сама по себе находится в пределах -1 +1 sign(L) * (1 - pow(abs(1-L*sign(L)),trsh*slider3*(1-slider4)))

может я не правильно понимаю функции min/max ?


Код:
@sample
slider1 ? (
L = slider1 * spl0;
R = slider1 * spl1;

spl0 = L > 0
  ? min(1,sign(L) * (1 - pow(abs(1-L*sign(L)),trsh*slider3*(1-slider4))) * slider5)
  : max(-1,sign(L) * (1 - pow(abs(1-L*sign(L)),trsh*(1-slider4)))* slider5);
spl1 = R > 0
  ? min(1,sign(R) * (1 - pow(abs(1-R*sign(R)),trsh*(1+slider4)))* slider5)
  : max(-1,sign(R) * (1 - pow(abs(1-R*sign(R)),trsh*slider3*(1+slider4)))* slider5);
 
);
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
У Евгения есть скрипт-едитор для чанков ---- он очень удобен и для понимания и для учёбы. Поищите у него
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Тем что она потом не разворачивается
Так делайте скрипт тогл.
И в общем - нафига это сворачивать скриптом????
Чтоб скрипт сработал вам фолдер трек нужно мышкой выделить. А не проще сразу на тот треугольник клацнуть и свернуть треки?
Очень не люблю делать что-то бесполезное, не продуманное, а попросту - надуманное.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Но я так и не понял что должен делать скрипт и чему он помогает.
Вы же всё урывками делаете.
[DOUBLEPOST=1516904548][/DOUBLEPOST]
Если я свернул папку в аранже, то он скрывает в микшере - что не удобно.
Так не делайте так, чтоб скрывал в Микшере.
@Archchie, пишите развёрнутое тех задание, если это уже не учёба, и финалом есть работающий скрипт.
Просто так писать вам функции я не стану, потому как на 99% уверен, что для задуманного функционала она не нужна или нужна в другом виде.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
@Aleksandr Oleynik Наверно ему нужно чтобы был линк между состояниями папок в TCP и MCP при включенной функции Mixer: Clickable icon for folder tracks to show/hide children. Но видимо на двух страницах бессмысленного флуда это было сложно написать, хочется пожрать кактус, чем написать таки тех задание.
 
  • Like
Реакции: Aleksandr Oleynik

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
@Aleksandr Oleynik, Я Сворачиваю папку TCP и у меня скрываются дети в MCP, а надо чтобы они не скрывались, а сворачивалась папка
----
Потому что когда все свернуто и работая в микшере нет возможности развернуть
Развернул папку в микшере - развернулась в аранже и наоборот. И куда скрипту смотреть в первую очередь - в статус папки в микшере или в аранже? Можно тыкать по прежнему тыкать пальцем в небо, или дать тех задание, получить решение, затем по готовому решению задавать вопросы.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
PHP:
function ShowChildrenInMCP(tr, is_show)
  local _,tr_chunk = reaper.GetTrackStateChunk(tr,'',true)
  local BUSCOMP_var1 = tr_chunk:match('BUSCOMP (%d+)')
  local tr_chunk_out = tr_chunk:gsub('BUSCOMP '..BUSCOMP_var1..' %d+', 'BUSCOMP '..BUSCOMP_var1..' '..(is_show and 0 or 1))
  reaper.SetTrackStateChunk(tr, tr_chunk_out,true)
end

tr = reaper.GetTrack(0,0)
ShowChildrenInMCP(tr, true)

Я то пожру, только ты быстрее забьёшь, чем что-то готовое получишь с таким подходом.
 
  • Like
Реакции: Archie's

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
ты также учился
Так как ты, я никогда не учился ни в одной из областей. Касаемо рипера - это 1) изучение чужих готовых решений 2) формирование собственных грамотных тех заданий и дальнейшее изучение решений 3)более конкретные вопросы после понимания и изучения механизмов большинства существующих API.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
загвоздачка! понял о чем речь! надо подумать!
Вот решение подобных "загвоздочек" - и делается на этапе написания Тех Задания, о котором вас просят уже какую страницу.
[DOUBLEPOST=1516912363][/DOUBLEPOST]
Тут спрашиваю на меня смотрят как на дебила.
Не, не на дебила, а на упрямца, который решил, что знает лучше как нужно учиться :)
Рано или поздно ты поймёшь, что после того как ты более-менее освоиш синтаксис LUA и разберёшься с API Рипера - 80% твоего времени при написании законченного и работающего скрипта, будет занимать написание грамотного тех задания самому себе, а если понадобится помощь - то тем более - в твоих скриптах ни кто разбиратся без ТЗ не станет.
Так что процесс обучения этот этап должен содержать...

Пока мы тут поняли ТОЛЬКО какой-то отрывок ТЗ, причём с взаимоисключающими условиями.
 
Последнее редактирование:
  • Like
Реакции: Archie's

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Наверно ему нужно чтобы был линк между состояниями папок в TCP и MCP при включенной функции Mixer: Clickable icon for folder tracks to show/hide children.
Сделать можно, но это скрипт не его пока уровня - нужно ведь запоминать состояние и сравнивать при его изменении. Значит нужно в таблицы нырять. А тут ещё и в чанки нужно нырять, так как ни Экшина ни API на закрытие/открытие папки в Микшере нет, только через чанки.
В общем - в данном конкретном случаи, написанная функция ни чего в голове не прояснит и в обучении не даст!

В общем я пас, в том числе и с целью правильного обучения...
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Да просто для работы нужен .Полезный скрипт .
Так напишите до конца что он должен делать, ну ей богу - Михаил одно предложение написал с интерпритацией (перводом) того, что вы пишите уже десяток постов - мне оно понятно, а то, что пишите вы - нет.
Вам нужно чтоб если вы в окне аранжа TCP закрыли папку до минимального размера чайлдов, в окне Микшера MCP она тоже закрылась?
А если откроете в аранже эту папку в Микшере она тоже должна открыться?
А если в Аранже папка закрыта, а вы её в Микшере ручками откроете, что скрипт должен делать с окном Аранжа?

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

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
@@Michael СПАСИБО!!!
Именно оно.Только можно чуть чуть подправить что бы папки в микшере сворачивались когда в аранже папка крошечная,а не маленькая(средняя)?
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@Archchie, строку -
PHP:
ShowChildrenInMCP(track, TCP_state==0)
измените на -
PHP:
ShowChildrenInMCP(track, TCP_state==0 or TCP_state==1)
Хотя, если бы разобрались сами - было бы лучше....
[DOUBLEPOST=1516956613][/DOUBLEPOST]@@Michael, не очень удобен такой функционал по "зажиганию" кнопки - чтоб выключить, нужно два раза на кнопку клацать.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Еще заметил когда папки свернуты в аранже,а в микшере нет, включаешь скрипт и он не сворачивает папки в микшере, пока не выделишь папку в аранже. Надо выделить каждую папку по отдельности
Производительность. Твой комп сдохнет раньше, чем перелопатит все папки в больших проектах.

Тулбар:
ReaPack/mpl_Link TCP MCP folder collapsed state (background).lua
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Производительность. Твой комп сдохнет раньше, чем перелопатит все папки в больших проектах.
Не....., тут ты не прав - это всего лишь стартовая проверка проекта и приведение его в правильное состояние для работы скрипта в фоне, до дефера.
Ни чего не сдохнет сколько бы там треков в проекте не было, просто будет какая-то задержка перед нормальной работой.
 
  • Like
Реакции: Archie's

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