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

Organize tracks
ссылка на соседний топик
как это работает:
Посмотреть вложение 116843
редактируем список названий
Посмотреть вложение 116844
в данной версии скрипт:
- требует SWS
- чувствителен к регистру (Drums и drums - разные названия)


------------------------------------------------------------------------------------------------------
применить параметры последнего задетого трека к тем же эффектам на выделенных треках
гиф здесь
_________________________________________________________
UPD: Organize tracks 1.1
добавлена нечувствительность к регистру
Посмотреть вложение 116946
есть заготовленные треки с названиями 'drums', 'synth' и т.д. (нужные названия должны быть прописаны в скрипте через запятую). Закидываем треки drums_1. drums_2 - жмем скрипт - эти треки перемещаются в папку drums. Добавляем треки synth_lala, synth_abcd - жмем скрипт - эти треки перемещаются в папку synth и тд. Разумеется, можно закинуть сразу drums_1. drums_2, synth_lala, synth_abcd, а скрипт уже сам все сделает-раскидает.
Не будет раскидывать в двух случаях:
1) нет трека с соответствующим названием (то есть трек synth_lala останется на своем месте, если в проекте нет трека synth);
2) трека нет в списке названий скрипта (см. гиф 2 о редактировании списка).
Выделять ничего не надо - закинуть треки и жмякнуть скрипт

Не знаю, с какой версии перестал работать скрипт. В чем может быть прична? Может в SWS какие-то инструкции изменились? Кто-то может проверить у себя?
[DOUBLEPOST=1490216334][/DOUBLEPOST]1.1 работает, только в папки ставит треки, в которых только один знак "_". Если таких знаков больше одного - не ставит в папки.
[DOUBLEPOST=1490216476][/DOUBLEPOST]На самом деле, нужно, чтобы никакие знаки "_" не учитывались, и создавались папки из треков, в названиях которых есть слова из скрипта: drums, synth и так далее. Я могу это как-то быстро поправить?
 
Последнее редактирование:
@EUGEN27771,

Вы скажите, как компрессор работает
работает отлично. Постоянно пользуюсь вот этой версией. А если добавите фильтр будет просто великолепно. Собственно тогда видимо отпадёт нужда в отдельном диэссере. А нет возможности прикрутить сохранялку для пары-тройки пресетов?
 

Вложения

  • gen_Compressor.jpg
    gen_Compressor.jpg
    67,5 KB · Просмотры: 261
@EUGEN27771,
Раз уж вы вернулись к допиливанию енв. компрессора, напомню свою просьбу - добавьте, пожалуйста, возможность вводить цифры вручную, а не только таскать ползунки.
 
  • Like
Реакции: sytch и fractala
Вот пример - я не заморачивался,
научите, сенсей! Я на клавиатурный ввод в gfx два дня потратил. Полет, конечно, нормальный, но мигающий курсор отсутствует))
key input gfx.gif
 
Я на клавиатурный ввод в gfx два дня потратил
1234.gif
PHP:
desc:new effect
options:want_all_kb
import inc\Mouse3Full.jsfx-inc
import inc\ColorMenu2.jsfx-inc


@init
gfx_clear = 0;
ext_noinit = 1; // no init for test

//****************************************************
//--------------------------------------
function UserInput.Init(val_str)
  instance(backspace, enter, esc, ui_str, def_val_str)
(
  UserInput.blink = 0.5;
  UserInput.Apply = 0;
  UserInput.max_len = 16;
  ui_str = strcpy(#, val_str); // copy val to tmp ui_str
);

//--------------------------------------
function UserInput.Get()
  instance(x,y,w,h, ui_str, max_len, blink)
  local(str_len)
(
  char ? (

    char == 27 ? ( // esc = 27
      UserInput.Exit = 1;
    ) :
    char == 13 ? ( // enter = 13
      UserInput.Apply = 1;
    ) :
    char == 8 ? (  // backspace = 8
      str_len = strlen(ui_str);
      ui_str = str_setlen(ui_str, max(str_len-1, 0) );
    ) :
    char >= 32 && char != 127 ? (
      str_len = strlen(ui_str);
      // also append = str_len or between (-0.5,0.0)
      str_len < max_len ? ui_str = str_setchar(ui_str, str_len, char);
    );

  );

  (blink+=0.05) > 1 ? blink = 0;

  ui_str; // retval
);


//************************************************
//-- Simple Text Field ---------------------------
//************************************************
function TextField.New(x,y,w,h, lbl, val)
(
  this.x = x; this.y = y; this.w = w; this.h = h;
  //this.r = r; this.g = g; this.b = b; this.a = a;
  this.lbl = lbl;
  this.val = val;
  this.UIActive = 0;
);


//****************************************************
// Для числ. значений нужен перевод числа в строку!
// Для числ. значений нужны доп. функции и проверка!
//-- Simple Text Field -------------
function TextField.Draw()
  instance(x,y,w,h, r,g,b,a, lbl, val)
  local(ui_retval, str_w, str_h)
(
  this.mouseClick() ? (
    UserInput.Init(val);
    this.UIActive = 1;
  );


  this.UIActive ? (
    ui_retval = UserInput.Get();
    val = strcpy(#, ui_retval);
    (mouse_down && !this.mouseIN()) || UserInput.Apply ? (
      this.UIActive = 0;
    );
  );

  gfx_set(1);
  gfx_rect(x,y,w,h, 1);
  gfx_set(0.5);
  gfx_rect(x,y,w,h, 0);

  gfx_measurestr(lbl, str_w, str_h);
  gfx_set(0.15);
  gfx_x = x - str_w - 8;
  gfx_y = y + (h - gfx_texth) * 0.5;
  gfx_drawstr(lbl);


  gfx_x = x + 8;
  gfx_y = y + (h - gfx_texth) * 0.5;
  this.UIActive ? (
    gfx_drawstr(ui_retval);
    UserInput.blink > 0.5 ? (gfx_x-=1; gfx_drawstr("|"););
  ) : (
    gfx_drawstr(val);
  );


);

//---------------------------------
TF1.TextField.New(100,10,140,18, "Instrument1:", "Preset1");
TF2.TextField.New(100,30,140,18, "Instrument2:", "Preset2");
TF3.TextField.New(100,50,140,18, "Instrument3:", "Preset3");
TF4.TextField.New(100,70,140,18, "Instrument4:", "Preset4");

@serialize
//ser_cnt+=1; // for test only

function serialize_str_value()
  instance(val)
(
  file_var(0, this.val);
  file_string(0, this.val);
  this.UIActive = 0;
);

TF1.TextField.serialize_str_value();
TF2.TextField.serialize_str_value();
TF3.TextField.serialize_str_value();
TF4.TextField.serialize_str_value();

@slider

@block

@sample

@gfx 300 100
gfx_set(0.8);
gfx_rect(0,0, gfx_w,gfx_h);

function DrawTextFields()
(
  gfx_setfont(1,"Arial",16);
  TF1.TextField.Draw();
  TF2.TextField.Draw();
  TF3.TextField.Draw();
  TF4.TextField.Draw();
);

function main_draw()
(
  char = gfx_getchar();
  DrawTextFields();
);

GetMouseState();
main_draw();
SetMouseLastState();
 
Последнее редактирование:
  • Like
Реакции: PianoIst
@EUGEN27771,
я просто нашел функции для преобразования ansi в utf8 и обратно)

PHP:
local ansi_decode={
  [128]='\208\130',[129]='\208\131',[130]='\226\128\154',[131]='\209\147',[132]='\226\128\158',[133]='\226\128\166',
  [134]='\226\128\160',[135]='\226\128\161',[136]='\226\130\172',[137]='\226\128\176',[138]='\208\137',[139]='\226\128\185',
  [140]='\208\138',[141]='\208\140',[142]='\208\139',[143]='\208\143',[144]='\209\146',[145]='\226\128\152',
  [146]='\226\128\153',[147]='\226\128\156',[148]='\226\128\157',[149]='\226\128\162',[150]='\226\128\147',[151]='\226\128\148',
  [152]='\194\152',[153]='\226\132\162',[154]='\209\153',[155]='\226\128\186',[156]='\209\154',[157]='\209\156',
  [158]='\209\155',[159]='\209\159',[160]='\194\160',[161]='\209\142',[162]='\209\158',[163]='\208\136',
  [164]='\194\164',[165]='\210\144',[166]='\194\166',[167]='\194\167',[168]='\208\129',[169]='\194\169',
  [170]='\208\132',[171]='\194\171',[172]='\194\172',[173]='\194\173',[174]='\194\174',[175]='\208\135',
  [176]='\194\176',[177]='\194\177',[178]='\208\134',[179]='\209\150',[180]='\210\145',[181]='\194\181',
  [182]='\194\182',[183]='\194\183',[184]='\209\145',[185]='\226\132\150',[186]='\209\148',[187]='\194\187',
  [188]='\209\152',[189]='\208\133',[190]='\209\149',[191]='\209\151'
}
local utf8_decode={
  [128]={[147]='\150',[148]='\151',[152]='\145',[153]='\146',[154]='\130',[156]='\147',[157]='\148',[158]='\132',[160]='\134',[161]='\135',[162]='\149',[166]='\133',[176]='\137',[185]='\139',[186]='\155'},
  [130]={[172]='\136'},
  [132]={[150]='\185',[162]='\153'},
  [194]={[152]='\152',[160]='\160',[164]='\164',[166]='\166',[167]='\167',[169]='\169',[171]='\171',[172]='\172',[173]='\173',[174]='\174',[176]='\176',[177]='\177',[181]='\181',[182]='\182',[183]='\183',[187]='\187'},
  [208]={[129]='\168',[130]='\128',[131]='\129',[132]='\170',[133]='\189',[134]='\178',[135]='\175',[136]='\163',[137]='\138',[138]='\140',[139]='\142',[140]='\141',[143]='\143',[144]='\192',[145]='\193',[146]='\194',[147]='\195',[148]='\196',
    [149]='\197',[150]='\198',[151]='\199',[152]='\200',[153]='\201',[154]='\202',[155]='\203',[156]='\204',[157]='\205',[158]='\206',[159]='\207',[160]='\208',[161]='\209',[162]='\210',[163]='\211',[164]='\212',[165]='\213',[166]='\214',
    [167]='\215',[168]='\216',[169]='\217',[170]='\218',[171]='\219',[172]='\220',[173]='\221',[174]='\222',[175]='\223',[176]='\224',[177]='\225',[178]='\226',[179]='\227',[180]='\228',[181]='\229',[182]='\230',[183]='\231',[184]='\232',
    [185]='\233',[186]='\234',[187]='\235',[188]='\236',[189]='\237',[190]='\238',[191]='\239'},
  [209]={[128]='\240',[129]='\241',[130]='\242',[131]='\243',[132]='\244',[133]='\245',[134]='\246',[135]='\247',[136]='\248',[137]='\249',[138]='\250',[139]='\251',[140]='\252',[141]='\253',[142]='\254',[143]='\255',[144]='\161',[145]='\184',
    [146]='\144',[147]='\131',[148]='\186',[149]='\190',[150]='\179',[151]='\191',[152]='\188',[153]='\154',[154]='\156',[155]='\158',[156]='\157',[158]='\162',[159]='\159'},[210]={[144]='\165',[145]='\180'}
}

local nmdc = {
  [36] = '$',
  [124] = '|'
}

function AnsiToUtf8(s)
  local r, b = ''
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      r = r..string.char(b)
    else
      if b > 239 then
        r = r..'\209'..string.char(b - 112)
      elseif b > 191 then
        r = r..'\208'..string.char(b - 48)
      elseif ansi_decode[b] then
        r = r..ansi_decode[b]
      else
        r = r..'_'
      end
    end
  end
  return r
end

function Utf8ToAnsi(s)
  local a, j, r, b = 0, 0, ''
  for i = 1, s and s:len() or 0 do
    b = s:byte(i)
    if b < 128 then
      if nmdc[b] then
        r = r..nmdc[b]
      else
        r = r..string.char(b)
      end
    elseif a == 2 then
      a, j = a - 1, b
    elseif a == 1 then
      a, r = a - 1, r..utf8_decode[j][b]
    elseif b == 226 then
      a = 2
    elseif b == 194 or b == 208 or b == 209 or b == 210 then
      j, a = b, 1
    else
      r = r..'_'
    end
  end
  return r
end
 
  • Like
Реакции: EUGEN27771
@EUGEN27771
Здравствуйте! Хочу спросить по поводу следующих ваших скриптов:
  • Retrospective Record(MIDI).eel
  • Retrospective Record(audio).eel
Скажите, есть ли возможность один раз задать буфер для экшена, чтобы каждый раз не делать этого?
И можно ли сделать так, чтобы окно с надписью "Done" не появлялось при запуске экшена?
Поставил эти экшены в автостарт и немного напрягают эти окошка.
Буду благодарен за ответ!
 
  • Like
Реакции: Furqat
@Alex Dub, да, конечно все это возможно. Уже обсуждалось, поиск в помощь. Или напишите камраду EUGEN27771 в личку.
 
Всем привет! Начинаю осваивать Reaper, ошеломлю возможности данного продукта и его гибкие настройки под свои задачи. Думаю вскоре купить сие творение.
Есть пара идей.
1) Отображение назначаемых маркеров непосредственно в треках MPC, что бы можно было оперативно переключаться, например, на соло гитару или куда угодно.
2) Круто было-бы привязать альтернативный мигающий Edit and Play cursor к метроному, но только что-бы он срабатывал как вспышка на каждую четверть с плавным затуханием. Удобно для записи.
Скорей всего скриптами здесь не обойтись, возможно этот вопрос к разработчику?
 
1) Отображение назначаемых маркеров непосредственно в треках MPC, что бы можно было оперативно переключаться, например, на соло гитару или куда угодно.

Откройте Region/Marker manager отдельным окошком и переключайтесь в один клик, вполне удобно

2) Круто было-бы привязать альтернативный мигающий Edit and Play cursor к метроному, но только что-бы он срабатывал как вспышка на каждую четверть с плавным затуханием. Удобно для записи.

Включите Big Clock (Alt+C) и в нём режим Beats (Visual Click)
 
fakeitback, благодарю за ответ, Beats (Visual Click) вполне сносная штука (хотелось бы видеть как затухающую вспышку на каждую четверть , но это уже капризы). Про Region/Marker знаю, просто сама затея с маркерами на треках в голову запала (тоже, наверно, капризы).
 
@EUGEN27771,
допиливание "Envelope-based Compressor" ещё актуально, или?
Это я о фильтре, возможности сохранения пресетов и возможности вводить цифры, не таская ползунки.
А приборчег и так мастхев, конечно...
 
У меня рабочий комп не подключен к нету. Для ReaPack он обязателен?
 
Став ленивым до кликов, писал эту штуку когда то для себя, может кому тоже пригодится - adjust volume via mousewheel

Регулирует громкость айтемов или дорожек колесиком мыши в зависимости от положения курсора:
Если наводим на один из выделенных объектов - регулирует громкость каждого, если на невыделенный, то только его.
Демо в мультике:
0001.gif

https://yadi.sk/d/8bKtl1wC3L4dJQ

ну и тоже самое для питча: https://yadi.sk/d/xhMt6xbc3L4dN7

"код" ни разу не профессиональный, писалось по принципу "чтоб работало"
[DOUBLEPOST=1500037240][/DOUBLEPOST]
А можно то же самое, только наоборот?
Еффект down tape stop классный, хотелось бы еще "Up" вариант...☺

Присоединяюсь.

Присоединяюсь тоже

Коллеги, простой кастом экшн же:
1. Развернуть тейк
2. Glue на всякий случай
3. tapestop lua
4. Развернуть обратно
 
@leshachooze,
Будьте добры, выложите скрипты ещё куда-то, а то что-то комп тупит (или провайдер) - не могу открыть те линки...
Спасибо.
 
  • Like
Реакции: Broojacker и Слава
@leshachooze,
Спасибо! Просто и удобно.
А вы не могли бы подправить тот скрипт, к-рый позволяет колесом менять pitch - чудесно работает, но чтоб менял не по полутонам, а fine?
 
@leshachooze,
Спасибо! Просто и удобно.
А вы не могли бы подправить тот скрипт, к-рый позволяет колесом менять pitch - чудесно работает, но чтоб менял не по полутонам, а fine?

замените в содержимом скрипта параметр step = 1 на нужное значение
 

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