--Save new version of project (automatically increase project name)
-------------------------------------------------------
local function no_undo()reaper.defer(function()end)end;
-------------------------------------------------------
reaper.Main_OnCommand(41895,0);--Save new version of project
local projfn = ({reaper.EnumProjects(-1)})[2]:gsub('\\','/');
if not projfn or projfn == "" then no_undo()return end;
---------------------------------------------------------
local saveopts = reaper.SNM_GetIntConfigVar('saveopts',0);
if saveopts&1 > 0 then;
SetSaveopts = saveopts &~ (saveopts&1);
reaper.SNM_SetIntConfigVar('saveopts',SetSaveopts);
end;
reaper.Main_SaveProject(0,false);
if saveopts&1 > 0 then;
reaper.SNM_SetIntConfigVar('saveopts',saveopts);
end;
---------------------------------------------------------
---------------------------------------------------------
local prePath,preName = projfn:match('(.+)[/\\](.+)');
local Name,Ext = preName:match('^(.-)(%.[^.]*)$');
local Name2 = Name:gsub('_%d*%s-$','');
local Name3 = Name2:match('(.+)(%s+%d+%s-)$')or Name2;
---------------------------------------------------------
---------------------------------------------------------
local T = {};
for i = 1,math.huge do;
local EnumFile = reaper.EnumerateFiles(prePath,i-1);
if not EnumFile then break end;
local Name_2 = EnumFile:match('^(.-)(%.[^.]*)$')or EnumFile;
local Ext_2 = EnumFile:match('^.-(%.[^.]+)$') or '';
local Ext_3 = (Ext_2):upper();
local EnumFile2 = Name_2..Ext_3;
T[#T+1] = EnumFile2;
end;
---------------------------------------------------------
---------------------------------------------------------
local X;
::res::;
X = (tonumber(X) or 0)+1;
for i = 1,#T do;
if tonumber(X) < 10 then X = 0 .. tonumber(X) end;
if T[i]:match('^(.-)%.RPP%s-$') == Name3..' '..X then;
goto res;
end;
if tonumber(X) > 100000 then reaper.MB('!!! ???','Error',0) return end;--!!!!!!
end;
---------------------------------------------------------
---------------------------------------------------------
local newName = Name3..' '..X..'.RPP';
os.rename(projfn,prePath..'/'..newName);
reaper.Main_openProject(prePath..'/'..newName);
---------------------------------------------------------
no_undo();
А стандартными функциями lua - типа io. ?А что бы подменить имя у открытого проекта не перезапуская его я не нашел способа как это сделать.
Файл проекта и открытый проект, это как будто два разных файла. Если переименовать файл проекта или вообще его удалить, то с открытым проектом ничего не произойдет, а при сохранении проект создаст новый файл со старым именем.А стандартными функциями lua - типа io. ?
Сохранить то с нужным именем можно, но тебе ведь надо что бы он (проект с новым именем) еще и открылся, что бы ты в нем начал работать и вот именно это скриптом и не получается сделать, для открытия нового проекта только запускать его.неужели нет способа сделать save as с нужным тебе именем?
Сохранить то с нужным именем можно, но тебе ведь надо что бы он (проект с новым именем) еще и открылся, что бы ты в нем начал работать и вот именно это скриптом и не получается сделать, для открытия нового проекта только запускать его.
добавили возможность открывать проект как шаблонкогда загружаю project template через file -> project templates, при нажатии на ctrl+s Рипер спрашивает куда сохранять новый проект.
если пользуюсь скриптом Xenakios/SWS: [Deprecated] Load project template , то при нажатии ctrl+s Рипер пишет сразу поверх template файла, что дико не удобно.
local Path = [[C:\Users\....\путь\до\проекта]] --<<< Сюда вписываешь путь проекта
local Name = [[ИМЯ ПРОЕКТА.RPP]] --<<< Сюда вписываешь имя проекта
-------------------------------------------
local file = io.open(Path..'/'..Name,'r');
if file then;
file:close();
reaper.Main_SaveProject(0,false);
reaper.Main_openProject('template:'..Path..'/'..Name);
end;
--------------------------------------------
верно - ты же в пример экшен привелвозможно я не верно поставил задачу?
Это я понял и предыдущий скрипт это и делает как и экшеннужен экшен который бы сохранял текущий проект под оригинальным именем
И вот тут все спотыкается, его невозможно открытый переименовать "скриптом", его надо запустить по новой с новым именем (что предыдущий скрипт и делает), что бы он понял что это новый проект.и затем переименовывал текущий с числом на 1 больше.
@vax, через "Resources, Project Templates" точно не получится, а относительный путь можно сделать, т.е нужно будет в скрипте только имя проекта ввести и скрипт будет искать в папке рипера/ProjectTemplates или можно сделать что бы вот такое окно выскакивало, что бы в нем выбирать какой проект открыть в виде шаблона. Я просто до конца не понимаю задачу как лучше.
Посмотреть вложение 173347
local Name = 'ИМЯ ПРОЕКТА' --<<< Сюда вписываешь имя проекта
local Path = '' --<<< Сюда вписываешь путь проекта (НЕ ОБЯЗАТЕЛЬНО)
-- Путь проекта должен выглядеть примерно так:
-- Path = 'C:/Users/User/reaper/project'
-- В windows надо развернуть все слэши или прописать путь в квадратных двойных скобках
-- Path = [[C:\Users\User\reaper\project]]
-- Или путь может быть относительным
-- Path = 'ProjectTemplates' Продолжить путь по папке рипера
-- Или оставьте путь пустым тогда поиск будет происходить по папки ProjectTemplates
-- Path = ''
-------------------------------------------------------
local function no_undo()reaper.defer(function()end)end;
-------------------------------------------------------
local file;
for i = 1,3 do;
file = io.open(Path..'/'..Name,'r');
if not file then;
file = io.open(Path..'/'..Name..'.rpp','r');
if file then Name = Name..'.rpp'end;
end;
if file then break end;
if i == 1 then Path = reaper.GetResourcePath()..'/'..Path end;
if i == 2 then Path = reaper.GetResourcePath()..'/'..'ProjectTemplates' end;
end;
if not file then reaper.MB('Шаблон не найден!\n\nTemplate is not found!','Woops!',0) no_undo() return end;
file:close();
--reaper.Main_SaveProject(0,false);
reaper.Main_openProject('template:'..Path..'/'..Name);
no_undo();
Будет))В 5-м Рипере будет работать, я ещё не обновился? ))
Thank you very much!))@Archchie, ВОЛШЕБНО! Задонатил чуток! ) Спасибо!
Глю или рендер?Скажите пожал. как сделать баунс конкретного участка айтема так чтоб было без этих не нужных кусков как в мультике.Спс
рендерГлю или рендер?
Экшн Item: Glue items или Track: Render selected area of tracks to stereo stem tracks (and mute originals)
В сообщении #4.547 названия двух экшенов.А где.Извините
-- @description Save MIDI editor view, slot 1
-- @version 1.1
-- @author me2beats
-- @changelog
-- + init
local r = reaper; local function nothing() end; local function bla() r.defer(nothing) end
function GetTrackChunk(track)
if not track then return end
local fast_str, track_chunk
fast_str = r.SNM_CreateFastString("")
if r.SNM_GetSetObjectState(track, fast_str, false, false) then
track_chunk = r.SNM_GetFastString(fast_str)
end
r.SNM_DeleteFastString(fast_str)
return track_chunk
end
function esc(str) str = str:gsub('%-', '%%-') return str end
local take = r.MIDIEditor_GetTake(r.MIDIEditor_GetActive())
if not take then bla() return end
local guid = r.BR_GetMediaItemTakeGUID(take)
local item = r.GetMediaItemTake_Item(take)
local tr = r.GetMediaItem_Track(item)
local chunk = GetTrackChunk(tr)
local view = chunk:match(esc(guid)..'.-CFGEDITVIEW(.-)\n')
if not view then bla() return end
local ext_sec, ext_key = 'me2beats_save-restore', 'MIDI view1'
r.DeleteExtState(ext_sec, ext_key, 0)
r.SetExtState(ext_sec, ext_key, view, 0)
r.Undo_BeginBlock() r.PreventUIRefresh(1)
r.PreventUIRefresh(-1) r.Undo_EndBlock('Save MIDI editor view', 2)
-- @description Restore MIDI editor view, slot 1
-- @version 1.1
-- @author me2beats
-- @changelog
-- + init
local r = reaper; local function nothing() end; local function bla() r.defer(nothing) end
function GetTrackChunk(track)
if not track then return end
local fast_str, track_chunk
fast_str = r.SNM_CreateFastString("")
if r.SNM_GetSetObjectState(track, fast_str, false, false) then
track_chunk = r.SNM_GetFastString(fast_str)
end
r.SNM_DeleteFastString(fast_str)
return track_chunk
end
function SetTrackChunk(track, track_chunk)
if not (track and track_chunk) then return end
local fast_str, ret
fast_str = r.SNM_CreateFastString("")
if r.SNM_SetFastString(fast_str, track_chunk) then
ret = r.SNM_GetSetObjectState(track, fast_str, true, false)
end
r.SNM_DeleteFastString(fast_str)
return ret
end
function esc(str) str = str:gsub('%-', '%%-') return str end
local take = r.MIDIEditor_GetTake(r.MIDIEditor_GetActive())
if not take then bla() return end
local ext_sec, ext_key = 'me2beats_save-restore', 'MIDI view1'
local view = r.GetExtState(ext_sec, ext_key)
if not view or view == '' then bla() return end
local guid = r.BR_GetMediaItemTakeGUID(take)
local item = r.GetMediaItemTake_Item(take)
local tr = r.GetMediaItem_Track(item)
r.Undo_BeginBlock() r.PreventUIRefresh(1)
local sync
if r.GetToggleCommandStateEx(32060, 40640) == 1 then
r.MIDIEditor_LastFocused_OnCommand(40640,0)--Timebase: Toggle sync to arrange view
sync = 1
end
r.SelectAllMediaItems(0, 0); r.SetMediaItemSelected(item, 1)
local chunk = GetTrackChunk(tr)
local a, old_view, b = chunk:match('(.*'..esc(guid)..'.-CFGEDITVIEW)(.-)(\n.*)')
local new_chunk = a..view..b
r.MIDIEditor_LastFocused_OnCommand(2, 0) -- close editor
local tr_items = r.CountTrackMediaItems(tr)
for i = tr_items-1,0,-1 do
local tr_item = r.GetTrackMediaItem(tr, i)
r.DeleteTrackMediaItem(tr, tr_item)
if item == tr_item then break end
end
SetTrackChunk(tr, new_chunk)
r.Main_OnCommand(40109,0)--Item: Open items in primary external editor
if sync then r.MIDIEditor_LastFocused_OnCommand(40640,0) end --Timebase: Toggle sync to arrange view
r.PreventUIRefresh(-1) r.Undo_EndBlock('Restore MIDI editor view', 2)
Хотел создать экшн с этого видео,но команду: SWS/S&M: FX chain fromselected track
не находит у меня.Чем её заменить?