Ох.... А вас что сподвигло вместо ответа вот это вот всё писать? Видимо тоже с ответами проблема?
АПСОЛЮТНО бесполезная штука чужие проекты. Чтоб была от них польза, нужно ещё и чужие мозги себе в башку заиметь.А еще полезнее этой темы была бы тема где целые проекты выкладывали бы, в разных жанрах.
Вот это дело.
Кстати никто случаем не знает, может на забугорных сайтах где -то есть. Это просто кладезь информации. Целый готовый проект.
Кто людям помогает..... тот тратит время зря!П.с. На добро не пробить.
Я не очень понимаю что вы имеете в виду. Вы приводите в пример какую-то воображаемую ситуацию и критикуете воображаемую позицию какого-то собирательного образа, у которого вагон времени, чтобы ждать пока ему ответят на то, что он мог моментально узнать из поиска. Да, глупая позиция, глупый образ (если он вовсе существует). Но я то-тут при чем?А человека, который с пол оборота ЕЩЕ И БОЛЬШИМИ буквами требует - «ДАЙТЕ ОТВЕТ, мне некогда его самому искать, ну что вам жалко?» -
в общем то хочется его сразу отправить в тот самый Поиск, о котором он, обидевшись, и подумал.
У себя я проверил и заметил, что на самом деле он оставляет Linear, просто первую точку рисует как Square. Если подвинуть точку или поставить новую, будет Linear. МБ и багПри некоторых манипуляциях с midi_item-ом (транспонирование, склеивание) CC envelop принимает значение square, хотя был Linear. И по умолчанию в Midi Editor был выставлен, как Linear. Как победить?
Я не знаю при чём тут вы. Тут уж сами разберитесь.Но я то-тут при чем?
Иначе получается.У себя я проверил и заметил, что на самом деле он оставляет Linear, просто первую точку рисует как Square. Если подвинуть точку или поставить новую, будет Linear. МБ и баг
Ну SWS это все таки расширение, поэтому надо писать разрабам SWSИначе получается.
До:
Посмотреть вложение 179441
SWS/FNG: Transpose selected MIDI items down a semitone
После:
Посмотреть вложение 179444
-----------------------------------------------------------------------------
local function No_Undo()end; local function no_undo()reaper.defer(No_Undo)end
-----------------------------------------------------------------------------
local CountItem = reaper.CountSelectedMediaItems(0);
if CountItem == 0 then no_undo() return end;
local Midi;
for i = 1,CountItem do;
local item = reaper.GetSelectedMediaItem(0,i-1);
local CountTake = reaper.CountTakes(item);
for i2 = 1,CountTake do;
local take = reaper.GetMediaItemTake(item,i2-1);
local midi = reaper.TakeIsMIDI(take);
if midi then;
Midi = "Active"
break
end
end
end
::START::
local ret, val = reaper.GetUserInputs("Transpose selected items...",1,
"Set value...", 0);
if ret then
val = tonumber(val);
if not ret or val == 0 or not val then reaper.MB('No value. Please enter a number', 'Error', 0) goto START end
local retval = {};
local sel = {};
local mute = {};
local startppq = {};
local endppq = {};
local chan = {};
local pitch = {};
local vel = {};
local semitone = val;
local Undo_BegBlock ;
for i = 1,CountItem do;
reaper.PreventUIRefresh(1)
local item = reaper.GetSelectedMediaItem(0,i-1);
local CountTake = reaper.CountTakes(item);
for i2 = 1,CountTake do;
local take = reaper.GetMediaItemTake(item,i2-1);
local midi = reaper.TakeIsMIDI(take);
if midi == true then;
local ret,notecnt,ccevtcnt,textsyxevtcnt = reaper.MIDI_CountEvts(take);
for i3 = notecnt-1,0,-1 do;
retval [i3],
sel [i3],
mute [i3],
startppq[i3],
endppq [i3],
chan [i3],
pitch [i3],
vel [i3] = reaper.MIDI_GetNote(take,i3);
reaper.MIDI_DeleteNote(take,i3);
end;
for i4 = notecnt-1,0,-1 do;
reaper.MIDI_InsertNote(take,
sel [i4],
mute [i4],
startppq[i4],
endppq [i4],
chan [i4],
pitch [i4]+semitone,
vel [i4],
true);
end;
reaper.MIDI_Sort(take);
Undo_BegBlock = "Active";
elseif midi == false then;
local dafault_pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH')
reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', dafault_pitch+val)
end;
end
reaper.PreventUIRefresh(-1)
end;
else return end
reaper.UpdateArrange();
if Undo_BegBlock == "Active" then;
reaper.Undo_BeginBlock();
reaper.Undo_EndBlock("Transpose selected items",-1);
else;
no_undo();
end;
-----------------------------------------------------------------------------
local function No_Undo()end; local function no_undo()reaper.defer(No_Undo)end
-----------------------------------------------------------------------------
local CountItem = reaper.CountSelectedMediaItems(0);
if CountItem == 0 then no_undo() return end;
local Midi;
for i = 1,CountItem do;
local item = reaper.GetSelectedMediaItem(0,i-1);
local CountTake = reaper.CountTakes(item);
for i2 = 1,CountTake do;
local take = reaper.GetMediaItemTake(item,i2-1);
local midi = reaper.TakeIsMIDI(take);
if midi then;
Midi = "Active"
break
end
end
end
--[[
::START::
local ret, val = reaper.GetUserInputs("Transpose selected items...",1,
"Set value...", 0);
if ret then
val = tonumber(val);
if not ret or val == 0 or not val then reaper.MB('No value. Please enter a number', 'Error', 0) goto START end
--]]
local retval = {};
local sel = {};
local mute = {};
local startppq = {};
local endppq = {};
local chan = {};
local pitch = {};
local vel = {};
local semitone = 1;
local Undo_BegBlock ;
for i = 1,CountItem do;
reaper.PreventUIRefresh(1)
local item = reaper.GetSelectedMediaItem(0,i-1);
local CountTake = reaper.CountTakes(item);
for i2 = 1,CountTake do;
local take = reaper.GetMediaItemTake(item,i2-1);
local midi = reaper.TakeIsMIDI(take);
if midi == true then;
local ret,notecnt,ccevtcnt,textsyxevtcnt = reaper.MIDI_CountEvts(take);
for i3 = notecnt-1,0,-1 do;
retval [i3],
sel [i3],
mute [i3],
startppq[i3],
endppq [i3],
chan [i3],
pitch [i3],
vel [i3] = reaper.MIDI_GetNote(take,i3);
reaper.MIDI_DeleteNote(take,i3);
end;
for i4 = notecnt-1,0,-1 do;
reaper.MIDI_InsertNote(take,
sel [i4],
mute [i4],
startppq[i4],
endppq [i4],
chan [i4],
pitch [i4]-semitone,
vel [i4],
true);
end;
reaper.MIDI_Sort(take);
Undo_BegBlock = "Active";
elseif midi == false then;
local dafault_pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH')
reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', dafault_pitch+val)
end;
end
reaper.PreventUIRefresh(-1)
end;
-- else return end
reaper.UpdateArrange();
if Undo_BegBlock == "Active" then;
reaper.Undo_BeginBlock();
reaper.Undo_EndBlock("Transpose selected items",-1);
else;
no_undo();
end;
-----------------------------------------------------------------------------
local function No_Undo()end; local function no_undo()reaper.defer(No_Undo)end
-----------------------------------------------------------------------------
local CountItem = reaper.CountSelectedMediaItems(0);
if CountItem == 0 then no_undo() return end;
local Midi;
for i = 1,CountItem do;
local item = reaper.GetSelectedMediaItem(0,i-1);
local CountTake = reaper.CountTakes(item);
for i2 = 1,CountTake do;
local take = reaper.GetMediaItemTake(item,i2-1);
local midi = reaper.TakeIsMIDI(take);
if midi then;
Midi = "Active"
break
end
end
end
--[[
::START::
local ret, val = reaper.GetUserInputs("Transpose selected items...",1,
"Set value...", 0);
if ret then
val = tonumber(val);
if not ret or val == 0 or not val then reaper.MB('No value. Please enter a number', 'Error', 0) goto START end
--]]
val = -1;
local retval = {};
local sel = {};
local mute = {};
local startppq = {};
local endppq = {};
local chan = {};
local pitch = {};
local vel = {};
local semitone = val;
local Undo_BegBlock ;
for i = 1,CountItem do;
reaper.PreventUIRefresh(1)
local item = reaper.GetSelectedMediaItem(0,i-1);
local CountTake = reaper.CountTakes(item);
for i2 = 1,CountTake do;
local take = reaper.GetMediaItemTake(item,i2-1);
local midi = reaper.TakeIsMIDI(take);
if midi == true then;
local ret,notecnt,ccevtcnt,textsyxevtcnt = reaper.MIDI_CountEvts(take);
for i3 = notecnt-1,0,-1 do;
retval [i3],
sel [i3],
mute [i3],
startppq[i3],
endppq [i3],
chan [i3],
pitch [i3],
vel [i3] = reaper.MIDI_GetNote(take,i3);
reaper.MIDI_DeleteNote(take,i3);
end;
for i4 = notecnt-1,0,-1 do;
reaper.MIDI_InsertNote(take,
sel [i4],
mute [i4],
startppq[i4],
endppq [i4],
chan [i4],
pitch [i4]+semitone,
vel [i4],
true);
end;
reaper.MIDI_Sort(take);
Undo_BegBlock = "Active";
elseif midi == false then;
local dafault_pitch = reaper.GetMediaItemTakeInfo_Value(take, 'D_PITCH')
reaper.SetMediaItemTakeInfo_Value(take, 'D_PITCH', dafault_pitch+val)
end;
end
reaper.PreventUIRefresh(-1)
end;
-- else return end
reaper.UpdateArrange();
if Undo_BegBlock == "Active" then;
reaper.Undo_BeginBlock();
reaper.Undo_EndBlock("Transpose selected items",-1);
else;
no_undo();
end;
Внешней аудио-карты нет пока, возможно, с этим как-то связано.
а зачем так сложно? Есть же shift+0, shift+9Transpose selected MIDI items down a semitone
Он не показывает транспонирования, только после склеивания (наверно), а тот экшн транспонирует всё на лету и это видно.Или он еще что-то ненужное транспонирует?
А я искал transpose. Pitch применять к midi для меня было неочевидно.Есть же shift+0, shift+9
Но если не важна визуальная часть, то можно корректировать, а потом в случае необходимости просто сделать glue.Да и правда, поведение не совсем желаемое.
При пересохранении проекта "Save proj as" не забудь поставить галочкииногда чищу его, и при очистке у меня удалились аудиофайлы из песни с другого (предыдущего) проекта
А если один, то просто ещё одну вкладку с проектом открываем и ctrl+c и ctrl+v@burn255, как вариант, выделяешь все барабанные треки, нажимаешь на одном из них правой кнопкой, выбираешь save tracks as track templates, в появившемся окне ставишь галки
Посмотреть вложение 181234
В новом проекте жмёшь правой кнопкой на tcp и выбираешь incert track from template, и выбираешь из списка сохраненный темплэйт.
Этот вариант удобен, если ты собираешься пользоваться этими барабанами не один раз.