ReaScripts (скрипты для Reaper) - делимся (3 онлайн)

Resha

New Member
26 Янв 2022
1
0
1
25
Подскажите пожалуйста в чем может быть проблема. Не работают скрипты. Шапка скрипта появляется, но после нажатия activate ничего не происходит
 

Вложения

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.656
1.341
113
56
Киев
@maxmusic,
Код:
--@description MaxMusicMax; Midi Editor; Item; Mute all items in track
--@version 0
--@author MaxMusicMax
-----------------------------------------------------
-- Function Button
local function SetToggleButtonOnOff(numb);
        local _,_,sec,cmd,_,_,_ = reaper.get_action_context();
        reaper.SetToggleCommandState(sec,cmd,numb or 0);
        reaper.RefreshToolbar2(sec,cmd);
     end;

function print_rs (param)
    reaper.ShowConsoleMsg (tostring (param) .. "\n")
end
-- #######################################
-- #######################################
reaper.PreventUIRefresh(1);
-- #######################################
-- #######################################
local ME = reaper.MIDIEditor_GetActive()
local take = reaper.MIDIEditor_GetTake(ME)
local take_track = reaper.GetMediaItemTake_Track(take)
local is_solo = reaper.GetMediaTrackInfo_Value(take_track, 'I_SOLO')

-- Состояние первого айтема
local  state_item = reaper.GetMediaItemInfo_Value ( reaper.GetTrackMediaItem ( take_track, 0 ), 'B_MUTE' )

if  state_item == 0 then
    -- Состояние unmute
    for i=1, reaper.CountTrackMediaItems(take_track)  do
        local item = reaper.GetTrackMediaItem ( take_track, i-1 )
        reaper.SetMediaItemInfo_Value( item, 'B_MUTE', 1 )
        SetToggleButtonOnOff(1)--Button of
    end
else
    -- Состояние mute
    for i=1, reaper.CountTrackMediaItems(take_track)  do
        local item = reaper.GetTrackMediaItem ( take_track, i-1 )
        reaper.SetMediaItemInfo_Value( item, 'B_MUTE', 0 )
        SetToggleButtonOnOff(0)-- Button on
    end
end
-- #######################################
-- #######################################
reaper.PreventUIRefresh(-1);
reaper.TrackList_AdjustWindows(0);  -- Updates the window view
reaper.UpdateArrange();  -- Updates the window view
Так вроде работает. В самом начале добавил саму функцию кнопки, после событий мьют и анмьют действия состояния кнопки.
(Не умею правильно изъясняться, просто этот код мне когда-то Арчи подсказал)))))))
 

maxmusic

New Member
10 Дек 2008
17
10
3
@maxmusic,
Код:
--@description MaxMusicMax; Midi Editor; Item; Mute all items in track
--@version 0
--@author MaxMusicMax
-----------------------------------------------------
-- Function Button
local function SetToggleButtonOnOff(numb);
        local _,_,sec,cmd,_,_,_ = reaper.get_action_context();
        reaper.SetToggleCommandState(sec,cmd,numb or 0);
        reaper.RefreshToolbar2(sec,cmd);
     end;

function print_rs (param)
    reaper.ShowConsoleMsg (tostring (param) .. "\n")
end
-- #######################################
-- #######################################
reaper.PreventUIRefresh(1);
-- #######################################
-- #######################################
local ME = reaper.MIDIEditor_GetActive()
local take = reaper.MIDIEditor_GetTake(ME)
local take_track = reaper.GetMediaItemTake_Track(take)
local is_solo = reaper.GetMediaTrackInfo_Value(take_track, 'I_SOLO')

-- Состояние первого айтема
local  state_item = reaper.GetMediaItemInfo_Value ( reaper.GetTrackMediaItem ( take_track, 0 ), 'B_MUTE' )

if  state_item == 0 then
    -- Состояние unmute
    for i=1, reaper.CountTrackMediaItems(take_track)  do
        local item = reaper.GetTrackMediaItem ( take_track, i-1 )
        reaper.SetMediaItemInfo_Value( item, 'B_MUTE', 1 )
        SetToggleButtonOnOff(1)--Button of
    end
else
    -- Состояние mute
    for i=1, reaper.CountTrackMediaItems(take_track)  do
        local item = reaper.GetTrackMediaItem ( take_track, i-1 )
        reaper.SetMediaItemInfo_Value( item, 'B_MUTE', 0 )
        SetToggleButtonOnOff(0)-- Button on
    end
end
-- #######################################
-- #######################################
reaper.PreventUIRefresh(-1);
reaper.TrackList_AdjustWindows(0);  -- Updates the window view
reaper.UpdateArrange();  -- Updates the window view
Так вроде работает. В самом начале добавил саму функцию кнопки, после событий мьют и анмьют действия состояния кнопки.
(Не умею правильно изъясняться, просто этот код мне когда-то Арчи подсказал)))))))
оо, круто, спасиб
 
  • Like
Реакции: YuriOl и Mr_Tsonts

YuriOl

Well-Known Member
6 Май 2005
1.060
590
113
55
Луганск
youtube.com
@Mr_Tsonts,
У меня есть скрипт, похожий, но работает на выделенный айтем из окна миди редактора.
Именно мьют на выделенный айтем, для меня корректней работает. Вариант который у @maxmusic, на длинных нотах если мьютировать на ходу, то звук зависает, т.е звучит пока не переключишь туда-сюда или не остановишь воспроизведение. Это если использовать SWS: Toggle mute of items on selected track(s).
А если - Item properties: Toggle mute ID 40175,то всегда нормально глушит.)

Тоже Арчи кагда-то подсказал как делать, но вот не хватает статуса кнопки.
Подскажи пожалуйста, как в этом случае сделать. Или может есть уже другой какой способ?

Код:
-- NEW INSTANCE !!!


    local ID = 40175


    -------------------------------------------------
    local MIDIEditor = reaper.MIDIEditor_GetActive();
    if MIDIEditor then;

       if type(ID) ~= 'number' then;
          ID = reaper.NamedCommandLookup(ID or '');
       end;

       if tonumber(ID)then;
          reaper.Main_OnCommand(ID,0);
       end;
    end;
    -------------------------------------------------



    local ActiveDoubleScr,stopDoubleScr;
    local _,extnameProj,sec,cmd,_,_,_ = reaper.get_action_context();

    local function loop();
       ----- stop Double Script -------
       if not ActiveDoubleScr then;
          stopDoubleScr = (tonumber(reaper.GetExtState(extnameProj,"stopDoubleScr"))or 0)+1;
          reaper.SetExtState(extnameProj,"stopDoubleScr",stopDoubleScr,false);
          ActiveDoubleScr = true;
       end;

       local stopDoubleScr2 = tonumber(reaper.GetExtState(extnameProj,"stopDoubleScr"));
       if stopDoubleScr2 > stopDoubleScr then  return  end;
       --------------------------------

       local tog = reaper.GetToggleCommandStateEx(0,ID);

       if tog == 1 then;
          if not ActiveOff then;
             reaper.SetToggleCommandState(sec,cmd,1);
             reaper.RefreshToolbar2(sec, cmd);
             ActiveOn = nil;
             ActiveOff = true;
          end;
       else;
          if not ActiveOn then;
             reaper.SetToggleCommandState(sec,cmd,0);
             reaper.RefreshToolbar2(sec, cmd);
             ActiveOff = nil;
             ActiveOn = true;
          end;
       end;
       --------------------------------
       reaper.defer(loop);
    end;

    reaper.defer(loop);
 
Последнее редактирование:

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.656
1.341
113
56
Киев
@YuriOl, а тут я не знаю пока... Дело в том, что я вижу, что он эту функцию вписал, но почему она не работает, хз. Там не просто сделать мьют и анмьют, там он ссылается на штатный тоггле.
Сама суть в том, чтобы замьютировать айтем, который открыт в миди эдиторе? Типа тоггле нужно?
 

YuriOl

Well-Known Member
6 Май 2005
1.060
590
113
55
Луганск
youtube.com
@YuriOl, а тут я не знаю пока... Дело в том, что я вижу, что он эту функцию вписал, но почему она не работает, хз. Там не просто сделать мьют и анмьют, там он ссылается на штатный тоггле.
Сама суть в том, чтобы замьютировать айтем, который открыт в миди эдиторе? Типа тоггле нужно?
Да!
А код этот Арчи сделал как универсальный помошник,) для штатных скриптов, которые из окна аранжировки можно перенести в миди едитор вписав туда (в самом верху) только ID комманду.
 

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.656
1.341
113
56
Киев
@YuriOl, я догадался, только состояние кнопки не работает. Я не знаю как его доработать. Его, по-моему, нужно полностью для этого переделать. Может, кто-то ещё поможет.
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@YuriOl, я догадался, только состояние кнопки не работает. Я не знаю как его доработать. Его, по-моему, нужно полностью для этого переделать. Может, кто-то ещё поможет.
Это из-за того, что видимо из миди редактора не хочет брать toggle state у экшна под ID 40175 из секции Main, надо по другому реализовать. Либо toggle state самого же скрипта, либо через ProjectExtState. Посмотрю
 
  • Like
Реакции: YuriOl и Mr_Tsonts

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
Друзья! Просто хотел сказать, периодически захожу на форумы, могу помогать по скриптам, все мы надеемся, что с Archie все хорошо! Но он пропал, придется его подхватить, к тому же я повышаю свой уровень знаний ReaScript, ввиду того, что еще параллельно прохожу обучение на курсах (тестирование, программирование), если будет нужна своевременная помощь, я оставил ссылку в подписи на пожертвования! Я буду стараться реагировать своевременно и делать все, что в моих силах. Наверное для русских пользователей оставлю еще юмани, чуть позже.
Спасибо всем!
 

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.152
113
@Mr_Tsonts, @YuriOl, вот более упрощенный вариант, Archie пытался фоновый скрипт сделать, но в миди редакторе это не работает

Код:
function bla() end
function nothing() reaper.defer(bla) end

local MIDIEditor = reaper.MIDIEditor_GetActive()
if MIDIEditor then
  take = reaper.MIDIEditor_GetTake(MIDIEditor)
  if take then
    item = reaper.GetMediaItemTake_Item(take)
    mute_state = reaper.GetMediaItemInfo_Value( item, "B_MUTE")
 
    local is_new_value,filename,sectionID,cmdID,mode,resolution,val = reaper.get_action_context()

    local tog = reaper.GetToggleCommandState(cmdID)
    
    if tog == 1 then
      reaper.SetMediaItemInfo_Value( item, "B_MUTE", 0)
      reaper.SetToggleCommandState(sectionID,cmdID,0)
    else
      reaper.SetMediaItemInfo_Value( item, "B_MUTE", 1)
      reaper.SetToggleCommandState(sectionID,cmdID,1)
    end
    reaper.RefreshToolbar2(sectionID, cmdID)
    reaper.UpdateArrange()
  end
end

nothing()
 
  • Like
Реакции: YuriOl и Mr_Tsonts

dsg

Member
7 Июн 2020
16
35
13
32
vk.com
Настраиваемый фейдер для регулировки громкости выхода (не мастера).

Удобно чтоб не трогать аудиокарту и если посыл на мастере труднодоступен.
Легко настроить под свою тему.
Запоминает позицию и сам запускается при старте если задочен.





Reapack репозиторий
Для прямого скачивания
 

truemanofan

Active Member
2 Июн 2019
163
169
43
@dsg, довольно удобно =)
Только мне почему-то так аккуратно, чтоб было все компактно и с ресайзом, задочить фейдер в верхний правый угол не удалось =) Подскажите где нажать? =)
dock.gif
 

dsg

Member
7 Июн 2020
16
35
13
32
vk.com
@dsg, довольно удобно =)
Только мне почему-то так аккуратно, чтоб было все компактно и с ресайзом, задочить фейдер в верхний правый угол не удалось =) Подскажите где нажать? =)
Посмотреть вложение 215937
А вон тому тулбару с кнопкой надо другую позицию поставить.

215940
 
  • Like
Реакции: TashKey и truemanofan
25 Июл 2017
102
23
18
40
@M16, какой имено пульт?
Если внешний железный - прийдется для CSI писать зону.
Привет! А мне как раз нужно посылать команды на железный пульт. Это пульт 91 года, там автоматизация была. Команды можно посылать по COM через USB на определённый порт. Нужна информация, как такое написать в Рипере. Спасибо!
 
25 Июл 2017
102
23
18
40
@Дима Горелик, нужно писать расширение на C++, у Reaper нет функций для работы с com-портом.
Привет! Спасибо! Вот прикольно - ждал ответа какое-то время и вы с Леандро ответили одновременно. Вот его ответ:
I’ve never done it myself, so I can’t say for sure. But probably the answer is: yes, but it’s a bit tricky.

The complication is that JSFX runs in a pretty tightly controlled sandbox, so it doesn’t have access to anything related to USB. This is by design: it’s this tightly controlled sandbox that makes JSFX unable to crash REAPER while you’re experimenting with stuff in real-time as you’re developing; and it’s also part of what makes JSFX so beginner-friendly and appealing.

But in your case you want the JSFX to have control over stuff outside the sandbox, so I think that the best way to do it is by sending a message to another piece of software that acts as an intermediary: it receives the message from JSFX and sends the COM command.

Here’s an example of how to do this:

1. In JSFX, write to the gmem. The gmem is a global chunk of memory that’s visible by JSFX, ReaScripts, video processors, and so forth.

2. In a ReaScript that’s running continuously on the background, read from the gmem. (To make a ReaScript run continuously on the background, look into ‘reaper.defer()’).

3. When the ReaScript receives a message from the JSFX, send the COM command. This may be done from Lua in several ways, but possibly the most straightforward is by calling a program on the command line (see ‘reaper.ExecProcess()’).

The whole process goes like this:

216458


Here’s an example of JSFX & ReaScript that write & read from gmem:

// JSFX
options:gmem=leafac_gmem
@Init
gmem[0] = 1234;

-- ReaScript
reaper.gmem_attach("leafac_gmem")
reaper.ShowConsoleMsg(tostring(reaper.gmem_read(0)))

And you may refer to some of my scripts for examples of how to call command line programs from ReaScript.

And keep in mind that gmem is only way for the JSFX to communicate with the intermediary that will help it “escape the sandbox.” Any other side-channel will work as well, for example, MIDI, or even audio samples. You could have JSFX encode information into the audio stream (presumably on a separate channel), and have the intermediary monitor that audio stream.

Let me know how it goes.

Best.

Если кто-то возьмётся написать подобную програму, я буду готов это оплатить.
 

Вложения

Tyler Burke

New Member
14 Сен 2022
2
0
1
25
Господа, всем добрый день!
Подскажите, пожалуйста, у кого нибудь есть скрипт для включения максимальных обработок (oversampling, linear phase и т.д.) для финального рендера проекта? А то надоело каждый раз тыкать все плагины. Или если ни у кого нет, может быть знаете как его написать?
 

shuco

Active Member
26 Ноя 2005
439
109
43
58
Новосибирск
Господа, всем добрый день!
Подскажите, пожалуйста, у кого нибудь есть скрипт для включения максимальных обработок (oversampling, linear phase и т.д.) для финального рендера проекта? А то надоело каждый раз тыкать все плагины. Или если ни у кого нет, может быть знаете как его написать?
А создать snapshots?
 

drumwizard

Well-Known Member
18 Дек 2011
1.092
686
113
45
Санкт-Петербург
Записан оркестр без клика, 22 дорожки. Они сгруппированы по вертикали. Группы/дубли располагаются друг за другом по горизонтали. Нужно один дубль поместить в тэйки другого дубля. Как это сделать быстро, легко и непринужденно?
Пока смог только по одному айтему каждой из 22 дорожек копировать и вставлять в выделенный айтем (команда Paste to Take).
 

shuco

Active Member
26 Ноя 2005
439
109
43
58
Новосибирск
Подскажите, пожалуйста, как это сделать?
What I do is the following and it is working great:
1. create that Master Track of your desire (or open up a project with it)
2. select the Master Track
3. open the Snapshots Dialog
4. toggle Save Sel Tracks Only ON, Full Track Mix, prompt for name
5. After you named it right-click and export Snapshot
6. put it in a place where you save all your globally desired snapshots
...

Then open the project that you want to change your Master Track Settings
1. open the Snapshots Dialog
2. right-click to Import Snapshot
3. choose Mastertrack and Recall Sel Track Only
 

Вложения

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