ReaScripts (скрипты для Reaper) - делимся

Подскажите пожалуйста в чем может быть проблема. Не работают скрипты. Шапка скрипта появляется, но после нажатия activate ничего не происходит
 

Вложения

  • Снимок экрана (2).png
    Снимок экрана (2).png
    257,6 KB · Просмотры: 160
213868


скрипт, из миди редактора мьютит все айтемы на треке, не знаю пока как сделать чтобы кнопка меняла состояние
 

Вложения

Последнее редактирование:
@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,
Код:
--@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
@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);
 
Последнее редактирование:
@YuriOl, а тут я не знаю пока... Дело в том, что я вижу, что он эту функцию вписал, но почему она не работает, хз. Там не просто сделать мьют и анмьют, там он ссылается на штатный тоггле.
Сама суть в том, чтобы замьютировать айтем, который открыт в миди эдиторе? Типа тоггле нужно?
 
@YuriOl, а тут я не знаю пока... Дело в том, что я вижу, что он эту функцию вписал, но почему она не работает, хз. Там не просто сделать мьют и анмьют, там он ссылается на штатный тоггле.
Сама суть в том, чтобы замьютировать айтем, который открыт в миди эдиторе? Типа тоггле нужно?
Да!
А код этот Арчи сделал как универсальный помошник,) для штатных скриптов, которые из окна аранжировки можно перенести в миди едитор вписав туда (в самом верху) только ID комманду.
 
@YuriOl, я догадался, только состояние кнопки не работает. Я не знаю как его доработать. Его, по-моему, нужно полностью для этого переделать. Может, кто-то ещё поможет.
 
@YuriOl, я догадался, только состояние кнопки не работает. Я не знаю как его доработать. Его, по-моему, нужно полностью для этого переделать. Может, кто-то ещё поможет.
Это из-за того, что видимо из миди редактора не хочет брать toggle state у экшна под ID 40175 из секции Main, надо по другому реализовать. Либо toggle state самого же скрипта, либо через ProjectExtState. Посмотрю
 
  • Like
Реакции: YuriOl и Mr_Tsonts
Друзья! Просто хотел сказать, периодически захожу на форумы, могу помогать по скриптам, все мы надеемся, что с Archie все хорошо! Но он пропал, придется его подхватить, к тому же я повышаю свой уровень знаний ReaScript, ввиду того, что еще параллельно прохожу обучение на курсах (тестирование, программирование), если будет нужна своевременная помощь, я оставил ссылку в подписи на пожертвования! Я буду стараться реагировать своевременно и делать все, что в моих силах. Наверное для русских пользователей оставлю еще юмани, чуть позже.
Спасибо всем!
 
@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
Настраиваемый фейдер для регулировки громкости выхода (не мастера).

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

1.gif





Reapack репозиторий
Для прямого скачивания
 
@dsg, довольно удобно =)
Только мне почему-то так аккуратно, чтоб было все компактно и с ресайзом, задочить фейдер в верхний правый угол не удалось =) Подскажите где нажать? =)
dock.gif
 
@dsg, довольно удобно =)
Только мне почему-то так аккуратно, чтоб было все компактно и с ресайзом, задочить фейдер в верхний правый угол не удалось =) Подскажите где нажать? =)
Посмотреть вложение 215937

А вон тому тулбару с кнопкой надо другую позицию поставить.

215940
 
  • Like
Реакции: TashKey и truemanofan
@M16, какой имено пульт?
Если внешний железный - прийдется для CSI писать зону.
Привет! А мне как раз нужно посылать команды на железный пульт. Это пульт 91 года, там автоматизация была. Команды можно посылать по COM через USB на определённый порт. Нужна информация, как такое написать в Рипере. Спасибо!
 
@Дима Горелик, нужно писать расширение на 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.

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

Вложения

  • unnamed.png
    unnamed.png
    36,2 KB · Просмотры: 87
Господа, всем добрый день!
Подскажите, пожалуйста, у кого нибудь есть скрипт для включения максимальных обработок (oversampling, linear phase и т.д.) для финального рендера проекта? А то надоело каждый раз тыкать все плагины. Или если ни у кого нет, может быть знаете как его написать?
 
Господа, всем добрый день!
Подскажите, пожалуйста, у кого нибудь есть скрипт для включения максимальных обработок (oversampling, linear phase и т.д.) для финального рендера проекта? А то надоело каждый раз тыкать все плагины. Или если ни у кого нет, может быть знаете как его написать?
А создать snapshots?
 
Записан оркестр без клика, 22 дорожки. Они сгруппированы по вертикали. Группы/дубли располагаются друг за другом по горизонтали. Нужно один дубль поместить в тэйки другого дубля. Как это сделать быстро, легко и непринужденно?
Пока смог только по одному айтему каждой из 22 дорожек копировать и вставлять в выделенный айтем (команда Paste to Take).
 
Подскажите, пожалуйста, как это сделать?

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
 

Вложения

  • snapshots2.gif
    snapshots2.gif
    9,2 MB · Просмотры: 104

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