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

@Aleksandr Oleynik, я без библиотек имел в виду :) Как на будущее
На самом деле мне не понятен больше процесс присваивания мыши к кнопкам. Чтобы потом от этого отталкиваться при запуске функций
 
я без библиотек имел в виду :) Как на будущее
Так после создания GUI из библиотеки - смотрите код и повторяя его ручками учитесь.
Тоже самое можно делать по любым чужим скриптам, выбираф в начале по проще.
Обучалок не найдёте, только вот это -
https://forum.cockos.com/showthread.php?t=176662&highlight
 
  • Like
Реакции: Archie's и PianoIst
Подскажите, где можно набраться азов в gfx рипера?
Анализировать чужие скрипты!
Но как мне кажется, то можешь даже не браться за графику пока не натаскался с языком там все сложно (90 процентов графики рисуется с помощью одной функции gfx.rect или gfx.line и заставляешь это все шевелится при помощи условий и математики ) , практикуйся на простых скриптах, когда самостоятельно напишешь штук десять скриптов, вникнешь в сам язык (самостоятельно это: с нуля и до конца, а не дергая куски с других скриптов), то тогда и можешь уже думать о графике, а пока ты с простыми скриптами не можешь разобраться, то в графике ты просто-напросто сразу утонешь(запутаешься).
Нельзя учится от сложного к легкому, то есть ты сначала хочешь пойти в 11 класс, а потом в 10 и только потом в первый :), но так не бывает :(.
__________________________________________________________________________________________________________
А что бы вникнуть в язык, то вот тебе простой совет, заканчивай дергать куски(функции) из других скриптов и собирать таким способом скрипт, ничего из этого хорошего не выйдет, ведь ты не знаешь какие ошибки в этой функции есть, это знает только разработчик, вот ты взял функцию с одного скрипта, взял вторую,третью, четвертую, в каждой есть какие то ошибки - которые не являлись ошибками в родных скриптах, ты это сложил у себя в скрипте и получил супер баг - который ты никогда не исправишь.
Так вот: Совет такой - поставь себе цель сделать какой либо скрипт(простой естественно) и начни его делать, непосредственно ты застрянешь вскоре на чем нибудь,застрял - начинай сам искать ответ, читать документацию "lua" или "eel"(что тебе по душе),не нашел спроси здесь - самое главное вникнуть в сам смысл "как это работает". И так штук 10 и вникнешь в процесс, ну а потом и функции можешь дергать, дернул посмотрел что не так - поправил под свой скрипт и ни каких ошибок, про которые ты некогда не узнаешь.
Ну и только потом уже можно задумываться о какой либо графике. Как то так ;).
_____________________________________________________________
В этой теме что дал ссылку @Aleksandr Oleynik, ты подавно не разберешься, там даже @@Michael сначала не разобрался, потом не знаю.
Мета таблицы: - это совсем не просто.
 
Последнее редактирование:
  • Like
Реакции: PianoIst
И так штук 10 и вникнешь в процесс, ну а потом и функции можешь дергать, дернул посмотрел что не так - поправил под свой скрипт и ни каких ошибок, про которые ты некогда не узнаешь.
Я через простые прошел уже :) То есть написанных с нуля у меня больше 10 скриптов. Но они именно что простые :) Состоящие типа из простых циклов, API функций, либо условий.
Если ты про рендер скрипты, где я дернул код для bypass эффектов и копированием автоматизаций - то я очень долго смотрел этот код, кроме того довольно сильно корректировал и нашел например баг, который был изначально в оригинале кода и поправил его :) Или же в случае с bypass я создал два варианта функции, одна для восстановления эффектов для предыдущего трека, а другая для текущего (в случае cancel render) :) Поэтому я с этим очень внимателен.
 
Последнее редактирование:
  • Like
Реакции: Archie's
@borisuperful, Методом тыка учись тогда, возьми нарисуй квадратик, потом покрась этот квадратик, потом заставь под мышью цвет менять и т.д.
на первой страницы в принципе, что ссылку дал Александр, все это описано понятно, а вот дальше непонятно - если мета таблицы не знаешь, вот поучись пока рисовать, рисовать научишься, потом будешь думать как это заставить все работать. Рисовать в принципе не сложно, сложно заставить это все работать, но все равно сначала надо научится рисовать.:)
____________
Ха-ха смешно: Сам не умею с графикой работать, зато сижу учу тебя. :)
 
Последнее редактирование:
На самом деле мне не понятен больше процесс присваивания мыши к кнопкам. Чтобы потом от этого отталкиваться при запуске функций
Поразбирай вот этот кусок пост #3 тут Женя все подробно расписал - все понятно
 
  • Like
Реакции: borisuperful
@EUGEN27771, очень интересно про gfx, а нет ли случайно того самого продолжения? Хотелось бы узнать про то, как сделать строчку, в которой мы вводим числовые или буквенные данные
 
@borisuperful, Строчка делается примерно, как то, так - но на вряд ли ты тут с ходу что то поймешь, это надо сидеть и разбираться с кодом(учить сам язык, читать документацию).
Надо с простого к сложному, а эта строчка уже не просто.
upload_2019-1-27_4-40-31.png

PHP:
    local function gfxSaveScrin_buf( buf,w,h);
        gfx.dest = buf;
        gfx.setimgdim(buf, -1, -1);
        gfx.setimgdim(buf, w, h);
        gfx.a = 1;
    end;
    ---

    local function gfxRestScrin_buf(buf,x,y,w,h);
        gfx.dest = -1;
        gfx.a = 1;
        gfx.blit(buf,1,0, x,y,w,h,x,y,w,h,0,0);
    end;
    --======================================================


    local CaretPos,Nabirat_Text,Text_x,car_x,flicker;
    local function GetSetInputText(x,y,w,h,Press_OK);
    gfx.setfont(1,"Verdana", h/1.15);
        -------------------------
        local function Sub(s,i,j);
            local c,str,x = 0,"",0;
            for _, code in utf8.codes(s)do;
                c = c + 1;if not j or j<0 then;j = c+i;x=1;end;
                if c >= i and c <= j then;local symb = utf8.char(code);str = str..symb;end;
                if x == 1 then j = nil end;
            end;
            return str;
        end
        ------------------

        x = (x + 2); w = (w - 5);
             
        local Rus_char = {  [184]='ё',[224]='а',[225]='б',[226]='в',[227]='г',[228]='д',[229]='е',[230]='ж',
        [231]='з',[232]='и',[233]='й',[234]='к',[235]='л',[236]='м',[237]='н',[238]='о',[239]='п',[240]='р',
        [241]='с',[242]='т',[243]='у',[244]='ф',[245]='х',[246]='ц',[247]='ч',[248]='ш',[249]='щ',[250]='ъ',
        [251]='ы',[252]='ь',[253]='э',[254]='ю',[255]='я',[168]='Ё',[192]='А',[193]='Б',[194]='В',[195]='Г',
        [196]='Д',[197]='Е',[198]='Ж',[199]='З',[200]='И',[201]='Й',[202]='К',[203]='Л',[204]='М',[205]='Н',
        [206]='О',[207]='П',[208]='Р',[209]='С',[210]='Т',[211]='У',[212]='Ф',[213]='Х',[214]='Ц',[215]='Ч',
        [216]='Ш',[217]='Щ',[218]='Ъ',[219]='Ы',[220]='Ь',[221]='Э',[222]='Ю',[223]='Я'}
 
        if not Nabirat_Text then Nabirat_Text =("")end;
        if not CaretPos then CaretPos =(utf8.len(""))end;
        local Enter,pressed,char = false,false,gfx.getchar();
        if Press_OK == 1 then Enter = true end;
 
        if char > 0 then;
            if char == 13 then; -- "Enter"
                Enter = true;
            elseif char == 1818584692 then; -- left <
                CaretPos = math.min(math.max(CaretPos-1,0), utf8.len(Nabirat_Text));
            elseif char == 1919379572 then; -- right >
                CaretPos = math.min(math.max(CaretPos+1,0),utf8.len(Nabirat_Text));
            elseif char == 8 then; -- "Backspace ←"
                if CaretPos > 0 then;
                    Nabirat_Text = Sub(Nabirat_Text,1,CaretPos-1)..Sub(Nabirat_Text,CaretPos+1,-1);
                    CaretPos = math.min(math.max((CaretPos-1),0), utf8.len(Nabirat_Text));
                end;
            elseif char == 6579564 then; -- Delete
                Nabirat_Text = Sub(Nabirat_Text,1,CaretPos)..Sub(Nabirat_Text,CaretPos+2,-1);
            elseif char > 31 and char < 127 then; -- Input_Text   
                Nabirat_Text = Sub(Nabirat_Text,1,CaretPos)..string.char(char)..Sub(Nabirat_Text,CaretPos+1,utf8.len(Nabirat_Text));
                CaretPos = math.min(CaretPos + 1, utf8.len(Nabirat_Text));
            elseif char > 127 and char < 256 then; -- Input_Text_Cyrillic
                Nabirat_Text = Sub(Nabirat_Text,1,CaretPos)..Rus_char[char]..Sub(Nabirat_Text,CaretPos+1,utf8.len(Nabirat_Text));
                CaretPos = math.min(CaretPos + 1, utf8.len(Nabirat_Text));
            end;
            pressed = true;
        end;
        -----------------------------------
 
        gfxSaveScrin_buf(1023,gfx.w,gfx.h);
 
        ---/ поле ввода /-/ input field /---               
        gfx.set(0.32, 0.31, 0.3);
        gfx.rect(x-2,y,w+5,h);-- прямоуг
        gfx.set(0.7,0.7,0.7);
        gfx.rect(x,y+2,w+1,h-4);-- прямоуг
        ---------------------------------
 
        ------/ MovingText /-------------
        Text_x = x;
        car_x = x + gfx.measurestr(Sub(Nabirat_Text,1,CaretPos));
        if (car_x-x) >= (w) then;
             Text_x = (w+x)+x - car_x;
             car_x=(w + x);
        end;
        -------------------------------
 
        -------/ Text /-----------------
        gfx.setfont(1,"Verdana", h/1.15);
        gfx.x = Text_x; gfx.y = y;
        gfx.set(0.11, 0.11, 0.11);
        gfx.drawstr(Nabirat_Text);
        --------------------------
   
        -------/ BlinkingCursor /---------------------
        if not tonumber(flicker) then flicker = 0 end;
        if  pressed == true then flicker = 0 end;
        if flicker < 15 then; -- мерцание
            gfx.set(0,0,0);
            gfx.rect(car_x, y+5, 1, h-10);
        end;
        flicker = flicker < 30 and flicker + 1 or 0;
        --------------------------------------------
 
        gfxRestScrin_buf(1023,x-2,y,w+5,h);
 
        ------/ Рамка /-/ Frame /-------                 
        gfx.set(0.7,0.7,0.7);
        gfx.rect(x-2,y,w+5,h,0); -- прямоуг рамка
        -----------------------------------------
 
        gfx.set(0,0,0);
        if Enter == true then return Nabirat_Text end;
        ----------------------------------------------
    end
    --================================================


    function mainloop()
         gfx.gradrect(0,0,400,110, 0.3,0.3,0.3,1)           
         GetSetInputText(15, 15,300,25)
         gfx.x = 345; gfx.y = 85;
         gfx.set(0.7,0.7,0.7,0.4);
         gfx.setfont(1,"Tahoma",17,105);
         gfx.drawstr("Archie.");
         reaper.defer(mainloop)
    end

    gfx.init("Archie_User_Input",400,110,0,80,150)
    mainloop()
Но было бы не плохо увидеть полноценный урок по работе с графикой:)
 
Последнее редактирование:
  • Like
Реакции: borisuperful
@Archchie, да, вижу, непросто :) Правда буквы в моем случае не в планах, хватит цифр. А так вся таблица ASCII причем может быть для двух раскладок. Для кириллической получается гемор с присвоением каждой буквы, что и вижу, а для латиницы хватает интервала между крайними значениями :)
Буду копать...
 
Последнее редактирование:
Нет возможности, к сожалению. Вкратце - нужно ловить кадры и состояния между кадрами сравнивать. То есть, для того, чтобы узнать что происходит с мышью, клавишами, нужно проверить, изменилось ли состояние и определить, что именно изменилось. Единственное, что могу сказать, где-то в теме здесь проскочила мысль про иерархии в интерфейсе и тп - не тратьте время, это проверено. Сейчас со стороны смотрю.
Более того, чем проще, тем лучше. И это уже общая тенденция, одна страница.
 
Подскажите пожалуйста, есть ли возможность решить следующую задачу:
Есть трек. На треке несколько айтемов. под треком открыт Envelope line (к примеру громкость). Курсор находится на Envelop line. Как мне получить item, который находится над курсором, пока мышь остается на envelop line?
 
Как мне получить item, который находится над курсором, пока мышь остается на envelop line?
PHP:
local function GetItemUnderMouseCursorOfEnvelope(Envelope);
    local Alloc = reaper.BR_EnvAlloc(Envelope,false);
    local tr = reaper.BR_EnvGetParentTrack(Alloc);
    reaper.BR_EnvFree(Alloc,false);
    local PosCur = reaper.BR_PositionAtMouseCursor(true);
    for i = 1, reaper.CountTrackMediaItems(tr) do;
       local it = reaper.GetTrackMediaItem(tr,i-1);
       local PosIt = reaper.GetMediaItemInfo_Value(it,"D_POSITION");
       local LenIt = reaper.GetMediaItemInfo_Value(it,"D_LENGTH");
       if PosIt < PosCur and PosIt + LenIt > PosCur then;
       return it;
       end;
    end;
    return -1;
end;


-- Пример:

local Envelope = reaper.GetSelectedEnvelope(0);
local Item = GetItemUnderMouseCursorOfEnvelope(Envelope);
reaper.SelectAllMediaItems(0,0);
reaper.SetMediaItemSelected(Item,1);
 
upload_2019-2-12_0-16-1.png


Поставил галку, нажал кнопку (а нажал не то что нужно) - теперь выбор запомнился и окно больше не выскакивает.
Вопрос: Подскажите пожалуйста кто знает, где хранится информация о сохранении, что нужно сделать, удалить, что бы сохранение аннулировалось и это окно по новой стало появляться ???
Переименовать скрипт - Не подходит.
СПАСИБО!
__________________________
P.S. Разобрался - "reaper-kb.ini"
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
 
Последнее редактирование:
2.png
Почему у всех файлов эта ошибка,и как это исправить.Установил питон думал что это в нем дело,но нет. Спасибо
 
Возможно ли как то скриптом перезапустить рипер?
 
Привет. Подскажите кто-нибудь. Как получить на выделенном канале данные отмеченные на картинке?
Есть канал. Нужно получить из Receives номера стерео каналов. Копал в сторону reaper.BR_GetSetTrackSendInfo и I_DSTCHAN, но чето получить внятное не удалось.
Посмотреть вложение 159305
@J T, Значения возвращаются индексами "Стерео от 0 до 1024","моно от 1024 до 2048" и т.д.
Если надо получить значения в удобочитаемой форме, т.е. как на скриншоте, то на держи.
Функция возвращает только Mono и Stereo, с Multichannel не заморачивался, дальше если нужно, думаю и сам разберешься
PHP:
local f = function(Track,idx_receive);
    local S = reaper.GetTrackSendInfo_Value(Track,-1,idx_receive,"I_SRCCHAN");
    if S < 1024 and S >= 0 then;
        return math.ceil(S+1) ..'/'..math.ceil(S+2);
    elseif S >= 1024 and S < 2048 then;
        return math.ceil(S-1023);
    end;
    return -1;
end;


Test =  f(Track,0);
 
  • Like
Реакции: J T и vitalker
Хелп!
После того как заново поставил Виндовс10 не могу установить gem reapack, то же самое у @borisuperful, кто что может подсказать?
До переустановки Виндовс10 устанавливал и все успешно работало больше года
Код:
C:\WINDOWS\system32>gem install reapack-index
Fetching addressable-2.6.0.gem
Fetching colorize-0.8.1.gem
Fetching public_suffix-3.1.1.gem
Fetching gitable-0.4.0.gem
Fetching metaheader-1.3.1.gem
Fetching mini_portile2-2.4.0.gem
Fetching nokogiri-1.10.3-x64-mingw32.gem
Fetching pandoc-ruby-2.0.2.gem
Fetching rugged-0.28.2.gem
Fetching stable_sort-1.1.0.gem
Fetching reapack-index-1.2.2.gem
Successfully installed public_suffix-3.1.1
Successfully installed addressable-2.6.0
Successfully installed colorize-0.8.1
Successfully installed gitable-0.4.0
Successfully installed metaheader-1.3.1
Successfully installed mini_portile2-2.4.0
Nokogiri is built with the packaged libraries: libxml2-2.9.9, libxslt-1.1.33, zlib-1.2.11, libiconv-1.15.
Successfully installed nokogiri-1.10.3-x64-mingw32
Successfully installed pandoc-ruby-2.0.2
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions. This could take a while...
ERROR:  Error installing reapack-index:
        ERROR: Failed to build gem native extension.

    current directory: C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rugged-0.28.2/ext/rugged
C:/Ruby26-x64/bin/ruby.exe -I C:/Ruby26-x64/lib/ruby/2.6.0 -r ./siteconf20190729-12992-1cn3h7t.rb extconf.rb
checking for make... yes
checking for cmake... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=C:/Ruby26-x64/bin/$(RUBY_BASE_NAME)
        --with-sha1dc
        --without-sha1dc
        --use-system-libraries
extconf.rb:33:in `spawn': wrong exec option symbol: pgroup (ArgumentError)
        from extconf.rb:33:in `run_cmake'
        from extconf.rb:104:in `block (2 levels) in <main>'
        from extconf.rb:101:in `chdir'
        from extconf.rb:101:in `block in <main>'
        from extconf.rb:98:in `chdir'
        from extconf.rb:98:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  C:/Ruby26-x64/lib/ruby/gems/2.6.0/extensions/x64-mingw32/2.6.0/rugged-0.28.2/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/rugged-0.28.2 for inspection.
Results logged to C:/Ruby26-x64/lib/ruby/gems/2.6.0/extensions/x64-mingw32/2.6.0/rugged-0.28.2/gem_make.out
 
  • Like
Реакции: borisuperful
Господа добрый день!
Столкнулся со следующей проблемой:
существует готовый скрипт - Track: View routing and I/O for current/last touched track ID 40293
но он работает не совсем корректно (посмотрите на видео)
стоит задача:
написать скрипт или подправить имеющийся
он должен выполнять следующие действия
1 - на нажатию sortcut или миди команды с консоли он должен вызывать меню "Routing I/O Track" на выбранном или выбранных трэках
2 - по повторному нажатию закрывать эти окна (окно)
3 - открытые окна не должны наслаиваться друг на друга

Помогите, пожалуйста, а то есть консоль, а там половина кнопок не активны (
денежное вознаграждение гарантирую
 

Вложения

  • video.mp4
    8,1 MB
@denlozikevich,
PHP:
    -- Author:      Archie
    -- Version:     1.0
    -- Extension:   SWS v.2.10.0  http://www.sws-extension.org/index.php
    --              reaper_js_ReaScriptAPI64 Repository-(ReaTeam Extensions) http://clck.ru/Eo5Nr or http://clck.ru/Eo5Lw
  
  
    -------------------------------------------------
    function no_undo()reaper.defer(function()end)end;
    -------------------------------------------------
  
  
    local countTrack = reaper.CountTracks(0);
    if countTrack == 0 then no_undo()return end;
  
  
    local windowHWND = reaper.JS_Window_Find("Routing for track",false);
    if windowHWND then;
        for i = 1,countTrack do;
            local windowHWND = reaper.JS_Window_Find("Routing for track "..i,false);
            reaper.JS_Window_Destroy(windowHWND);
        end;
    else;
      
        local countSelTrack = reaper.CountSelectedTracks(0);
        if countSelTrack == 0 then;
            reaper.MB("Not Selected Track","Woops!",0);
            no_undo()return;
        end;
      
        local AllowRroutingWinStayOpen = reaper.SNM_GetIntConfigVar("autoclosetrackwnds",0);
        if AllowRroutingWinStayOpen == 1 then;
            reaper.Main_OnCommand(40914,0);--Set first last touched track
            reaper.Main_OnCommand(40293,0);--View routing and I/O
        else;
            reaper.PreventUIRefresh(1);
          
            local sel_tracksST = {};
            for i = 1, countSelTrack do;
                sel_tracksST[i] = reaper.GetSelectedTrack(0,i-1);
            end;
          
            for i = 1, countSelTrack do;
                reaper.SetMediaTrackInfo_Value(sel_tracksST[i],"I_SELECTED",0);
            end;
          
            for i = 1,#sel_tracksST do;
                reaper.SetMediaTrackInfo_Value(sel_tracksST[i],"I_SELECTED",1);
                reaper.Main_OnCommand(40293,0);
            end;
          
            reaper.PreventUIRefresh(-1);
        end;
    end;
    no_undo();
Чтобы открывалось несколько окон: Archie_Pref; Toggle Allow snap grid,track envelope,routing windows to stay open.lua
 
Последнее редактирование:
Работает, благодарю
Взаимно. Благодарю за донат.
как к Вам в личку постучатся?
В верху страницы есть конвертик, нажимаешь на него > начать новую переписку > и в открывшейся странице в графе получатели вводишь мой ник и ниже сообщения.
165816


-----------------------------------------------------------------------------------------------

165817
 
Хелп!
После того как заново поставил Виндовс10 не могу установить gem reapack, то же самое у @borisuperful, кто что может подсказать?
До переустановки Виндовс10 устанавливал и все успешно работало больше года
Переустановил сегодня винду и столкнулся с такой же проблемой.(
Если еще не разобрались, то вот инструкция.
1.
Удаляем предыдущие версии Ruby и CMake.​

2.
качаем GitHub Desktop, устанавливаем и клонируем свой репозиторий​

3.
Качаем Ruby( RubyInstaller for Windows ) самую свежую версию, устанавливаем (при установке ничего не меняем)​
после установки появится окно командной строки Ruby, жмем в нем интер и ждем пока все установится​
(в некоторых местах может показаться что установка завершилась, это не так, ждем до конца),​
в конце установки появится опять три этих пункта которые были в начале ком.стр.​
жмем опять интер и окно закроется.​

4.
качаем CMake - в окне установки выбираем пункт "Add CMake to the system PACH for all user" жмем next>next>instal>finish.​

5.
Открываем командную строку и вставляем​
gem install reapack-index
ждем пока все установится,​
5.1.​
если при установки возникли ошибки, типа ERROR: Error installing reapack-index: (как у вас выше) ,​
то вставляем следующую команду​
gem install -v 0.27.9 rugged
и ждем пока все установится (на первый взгляд может показаться что все установилось или зависло, это не так, набираемся терпения, ждем и ничего не делаем).​
После установки появится таже строка, что была при открытии ком.строки "C:\User\пользователь"​
5.2.​
Далее опять вставляем команду​
gem install reapack-index
ждем пока все установится и все.​

6.
Далее все делаем по этой инструкции от отсюда Getting started
 
Почему вот эта конструкция:
Код:
if reaper.CountSelectedTracks() > 0 then
  local Count = 0
  for i = 0, reaper.CountSelectedTracks(0)-1 do
     local SelTrack = reaper.GetSelectedTrack(0,i)
     if SelTrack then
       if reaper.GetMediaTrackInfo_Value(SelTrack, 'I_SOLO') == 1 then
         Count = Count + 1     
       end
     end
  end
  reaper.ShowMessageBox(Count, "Information",0)
end
Выдаёт вот это?:
174618

При этом если вместо 'I_SOLO' написать 'B_MUTE', то всё работает.
 
@Chrigel, Потому что у соло несколько режимов и единица это не верно.
PHP:
if reaper.CountSelectedTracks() > 0 then
    local Count = 0
    for i = 0, reaper.CountSelectedTracks(0)-1 do
        local SelTrack = reaper.GetSelectedTrack(0,i)
        if SelTrack then
            if reaper.GetMediaTrackInfo_Value(SelTrack,'I_SOLO') > 0 then
                Count = Count + 1     
            end
        end
    end
    reaper.ShowMessageBox(Count, "Information",0)
end
 
  • Like
Реакции: Chrigel
Подскажите по новому API MIDI_SetCCShape. Вот такое описание:
boolean reaper.MIDI_SetCCShape(MediaItem_Take take, integer ccidx, integer shape, number beztension, optional boolean noSortIn)

Set CC shape and bezier tension. set noSort if setting multiple events, then call MIDI_Sort when done.

Не могу понять, как в выделенном айтеме установить с ее помощью у записанных CC данных CC shape bezier.

Пока сделал такой скрипт:

local function No_Undo()end; local function no_undo()reaper.defer(No_Undo)end
-----------------------------------------------------------------------------
local SelItem = reaper.GetSelectedMediaItem(0,0);
if not SelItem then no_undo() return end;

reaper.Main_OnCommand(40153,-1);
local MidiEditor = reaper.MIDIEditor_GetActive();
reaper.MIDIEditor_OnCommand(MidiEditor,40006);
reaper.MIDIEditor_OnCommand(MidiEditor,42085);
reaper.MIDIEditor_OnCommand(MidiEditor,40214);
reaper.MIDIEditor_OnCommand( MidiEditor, 40794);
end

Но он открывает миди редактор и по скорости, конечно, медленнее.

Пробую сделать скрипт для нескольких выделенных айтемов на основе API функций, но застрял на этом моменте:

reaper.Undo_BeginBlock()

local num_items = reaper.CountSelectedMediaItems(0)

for i = 0, num_items - 1 do

local item = reaper.GetSelectedMediaItem(0, i)
local take = reaper.GetActiveTake(item)

if reaper.TakeIsMIDI(take) then
reaper.MIDI_SetCCShape

Подскажите, что нужно дальше указывать, не могу понять.
 
Подскажите, что нужно дальше указывать, не могу понять.
Set in selected items CC shape bezier.lua
PHP:
    for it = 1,reaper.CountSelectedMediaItems(0)do;
        local item = reaper.GetSelectedMediaItem(0,it-1);
        local take = reaper.GetActiveTake(item);
        while true do;
            i=(i or 0)+1;
            local retval, shape, beztension = reaper.MIDI_GetCCShape(take,i-1);
            if retval then;
                reaper.MIDI_SetCCShape(take,i-1,5,beztension,true);
            else;
                break;
            end;
        end;
        reaper.MIDI_Sort(take);
    end;
    reaper.UpdateArrange();
 
Последнее редактирование:
  • Like
Реакции: BAYANBAYAN
@BAYANBAYAN,
Archie_Item; Set in selected items CC shape to Square.lua
Archie_Item; Set in selected items CC shape to Linear.lua
Archie_Item; Set in selected items CC shape to Slow start-end.lua
Archie_Item; Set in selected items CC shape to Fast start.lua
Archie_Item; Set in selected items CC shape to Fast end.lua
Archie_Item; Set in selected items CC shape to Bezier.lua
 

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