Reaper: Interesting Tips, Tricks & Actions.

Discussion in 'Reaper' started by justsomerandomdude, Feb 9, 2023.

  1. justsomerandomdude

    justsomerandomdude Rock Star

    Joined:
    Aug 24, 2020
    Messages:
    490
    Likes Received:
    322
    Media Explorer: Media Channel Mapper.
    From Version 7.12

    Select the channels for preview. Works for Midi and audio.

    1.jpg

    2.jpg
     
  2. xbitz

    xbitz Audiosexual

    Joined:
    Apr 18, 2013
    Messages:
    895
    Likes Received:
    500
  3. Chaindog

    Chaindog Platinum Record

    Joined:
    Dec 12, 2016
    Messages:
    232
    Likes Received:
    187
    Reaper Update Utility by FTC

    A simple utility that automates the REAPER update/installation process.
    (No need to go to the download page everytime there is a new update)

    Features:
    -Update REAPER to the latest version
    -Install old versions of REAPER
    -Get notifications for new releases (enable them under Menu > Startup notifications > Run script on startup)
    -Open changelog in web browser (links to forum thread if available)
    -Post-installation script hooks for advanced users


    [​IMG]

    Reaper Update Utility by FTC
    https://forum.cockos.com/showthread.php?t=242922
     
    • Interesting Interesting x 2
    • Like Like x 1
    • List
  4. xorome

    xorome Audiosexual

    Joined:
    Sep 28, 2021
    Messages:
    1,117
    Likes Received:
    834
    Perfect Timing is a quantisation tool and automatic transient splitter based on MK Slicer.

    [​IMG]

    MK Slicer is a script for slicing, quantizing by grid, re-quantizing, triggering or sampling audio.

    upload_2024-4-4_14-25-7.jpeg
     
  5. Sinus Well

    Sinus Well Audiosexual

    Joined:
    Jul 24, 2019
    Messages:
    2,108
    Likes Received:
    1,626
    Location:
    Sanatorium
    .... already mentioned on page 1.
    :bleh:
     
    • Agree Agree x 1
    • Funny Funny x 1
    • List
  6. justsomerandomdude

    justsomerandomdude Rock Star

    Joined:
    Aug 24, 2020
    Messages:
    490
    Likes Received:
    322
    MIDI Channel Picker:
    By @xorome
    MIDI Channel Picker 3.jpg

    A JSFX from our very own AS fellow member, @xorome. It was one of those "ask and you shall receive" moments. I was looking for a plugin which could route MIDI signal to a selected channel, so i made a post here, and dude stepped in and was kind enough to share his skills for free, and made me the script. You can read the complete process in here, just wonderful.
    Original Thread:
    https://audiosex.pro/threads/looking-for-a-plugin-which-has-a-similar-midi-routing-feature.75098/#post-770235

    Here is his post with the final result,
    http://audiosex.pro/threads/looking-for-a-plugin-which-has-a-similar-midi-routing-feature.75098/#post-770235
    and the script he wrote
    Code:
    desc:MIDI Channel Picker
    
    in_pin:none;
    out_pin:none;
    
    @init
    ext_noinit = 1;
    
    solo = 0;
    note_off = 0;
    note_off_send = 0;
    mouse_cap_p = -1;
    
        ch_state = 0;
        m_state = 16;
        s_state = 32;
    ch_button_x = 48;
    ch_button_y = 64;
     m_button_x = 80;
     s_button_x = 96;
    
    memset(ch_state, 0, n_btn);
    memset( m_state, 0, n_btn);
    memset( s_state, 0, n_btn);
    ch_state[0] = 1;
    
    x = 8;
    y = 8;
    
    n_btn   = 15;
    bt_hght = 25;
    ch_wdth = 61;
    ms_wdth = 28;
    ck_wh   = 16;
    ck_x    = 8;
    ck_y    = 174;
    
    i = 0;
    while (i < n_btn) (
      ch_button_x[i] = x;
      ch_button_y[i] = y;
     
      m_button_x[i] = ch_button_x[i] + ch_wdth + 4;
      s_button_x[i] =  m_button_x[i] + ms_wdth + 4;
    
      y += 31;
     
      i += 1;
      (i % 5 == 0) ? (
        x += 138;
        y = 8;
      );
    );
    
    function draw_btn(txt, x, y, w, h, toggle) (
      toggle == 0 ? (
        gfx_set(.17, .17, .17);
      ) : (
        gfx_set(.1, .4, .3);
      );
      gfx_rect(x, y, w, h, 5, 1);
    
      gfx_set(.95, .95, .95);
      gfx_x = x + 11;
      gfx_y = y + 8;
      gfx_printf(txt);
    );
    
    function draw_ckbx(txt, x, y, w, h, toggle) (
      toggle == 0 ? (
        gfx_set(.17, .17, .17);
      ) : (
        gfx_set(.1, .4, .3);
      );
      gfx_rect(x, y, w, h, 5, 1);
    
      gfx_set(.95, .95, .95);
      gfx_x = x + w + 6;
      gfx_y = y + 4;
      gfx_printf(txt);
    );
    
    @gfx 415 200
    gfx_setfont(0);
    
    i = 0;
    while (i < n_btn) (
      #label = sprintf(#, "Ch %d", i + 1);
      draw_btn(#label, ch_button_x[i], ch_button_y[i], ch_wdth, bt_hght, ch_state[i]);
      draw_btn("M",     m_button_x[i], ch_button_y[i], ms_wdth, bt_hght,  m_state[i]);
      draw_btn("S",     s_button_x[i], ch_button_y[i], ms_wdth, bt_hght,  s_state[i]);
      i += 1;
    );
    
    draw_ckbx("Note off on channel change", ck_x, ck_y, ck_wh, ck_wh, note_off);
    
    ((mouse_cap == 1 || mouse_cap == 5) && (mouse_cap_p == 0)) ? (
      ((mouse_y >= ck_y) && (mouse_y <= ck_y + ck_wh) &&
       (mouse_x >= ck_x) && (mouse_x <= ck_x + 235)) ? (note_off = !note_off);
    
      i = 0;
      while (i < n_btn) (
        ((mouse_y >= ch_button_y[i]) && (mouse_y <= ch_button_y[i] + bt_hght)) ? (
          ((mouse_x >= ch_button_x[i]) &&
           (mouse_x <= ch_button_x[i] + ch_wdth)
          ) ? (
            (mouse_cap == 1) ? (
              memset(ch_state, 0, n_btn);
              (note_off == 1) ? (note_off_send = 1);
            );
            ch_state[i] = !ch_state[i];
          );
     
          ((mouse_x >= m_button_x[i]) &&
           (mouse_x <= m_button_x[i] + ms_wdth)
          ) ? (
            (mouse_cap == 5) ? (memset(m_state, 0, n_btn));
            m_state[i] = !m_state[i];
          );
    
          ((mouse_x >= s_button_x[i]) &&
           (mouse_x <= s_button_x[i] + ms_wdth)
          ) ? (
            (mouse_cap == 5) ? (memset(s_state, 0, n_btn));
            s_state[i] = !s_state[i];
          );
        );
    
        i += 1;
      );
    );
    
    mouse_cap_p = mouse_cap;
    
    solo = 0;
    i = 0;
    while (i < n_btn) (
      s_state[i] == 1 ? (
        solo = 1;
        i = 666;
      );
      i += 1;
    );
    
    @block
    (note_off_send == 1) ? (
      note_off_send = 0;
      i = 0;
      while (i < n_btn) (
        midisend(0, $xB0 + i, 123, 0);
        i += 1;
      )
    );
    
    while (midirecv(pos, msg1, msg2, vel)) (
      i = 0;
      while (i < n_btn) (
        pass = 0;
    
        (solo == 0) ? (ch_state[i] == 1) ? (pass = 1);
     
        (m_state[i] == 1) ? (pass = 0);
        (s_state[i] == 1) ? (pass = 1);
     
        (pass == 1) ? (midisend(pos, (msg1 & $xF0) + i, msg2, vel));
    
        i += 1;
      );
    )

    To save as jsfx
    Open Reaper FX browser, click "create new JS FX" from the FX menu on top left.
    Fill in the filename and description.
    open the newly created FX, click edit and just paste the code.

    Here is same but i just added one additional channel, (16)

    Code:
    desc:xorome's MIDI Channel Picker
    
    in_pin:none;
    out_pin:none;
    
    @init
    ext_noinit = 1;
    
    solo = 0;
    note_off = 0;
    note_off_send = 0;
    mouse_cap_p = -1;
    
        ch_state = 0;
        m_state = 16;
        s_state = 32;
    ch_button_x = 48;
    ch_button_y = 64;
     m_button_x = 80;
     s_button_x = 96;
    
    memset(ch_state, 0, n_btn);
    memset( m_state, 0, n_btn);
    memset( s_state, 0, n_btn);
    ch_state[0] = 1;
    
    x = 8;
    y = 8;
    
    n_btn   = 16;
    bt_hght = 25;
    ch_wdth = 61;
    ms_wdth = 28;
    ck_wh   = 16;
    ck_x    = 8;
    ck_y    = 260;
    
    i = 0;
    while (i < n_btn) (
      ch_button_x[i] = x;
      ch_button_y[i] = y;
     
      m_button_x[i] = ch_button_x[i] + ch_wdth + 4;
      s_button_x[i] =  m_button_x[i] + ms_wdth + 4;
    
      y += 31;
     
      i += 1;
      (i % 8 == 0) ? (
        x += 138;
        y = 8;
      );
    );
    
    function draw_btn(txt, x, y, w, h, toggle) (
      toggle == 0 ? (
        gfx_set(.17, .17, .17);
      ) : (
        gfx_set(.1, .4, .3);
      );
      gfx_rect(x, y, w, h, 5, 1);
    
      gfx_set(.95, .95, .95);
      gfx_x = x + 11;
      gfx_y = y + 8;
      gfx_printf(txt);
    );
    
    function draw_ckbx(txt, x, y, w, h, toggle) (
      toggle == 0 ? (
        gfx_set(.17, .17, .17);
      ) : (
        gfx_set(.1, .4, .3);
      );
      gfx_rect(x, y, w, h, 5, 1);
    
      gfx_set(.95, .95, .95);
      gfx_x = x + w + 6;
      gfx_y = y + 4;
      gfx_printf(txt);
    );
    
    @gfx 415 283
    gfx_setfont(0);
    
    i = 0;
    while (i < n_btn) (
      #label = sprintf(#, "Ch %d", i + 1);
      draw_btn(#label, ch_button_x[i], ch_button_y[i], ch_wdth, bt_hght, ch_state[i]);
      draw_btn("M",     m_button_x[i], ch_button_y[i], ms_wdth, bt_hght,  m_state[i]);
      draw_btn("S",     s_button_x[i], ch_button_y[i], ms_wdth, bt_hght,  s_state[i]);
      i += 1;
    );
    
    draw_ckbx("Note off on channel change", ck_x, ck_y, ck_wh, ck_wh, note_off);
    
    ((mouse_cap == 1 || mouse_cap == 5) && (mouse_cap_p == 0)) ? (
      ((mouse_y >= ck_y) && (mouse_y <= ck_y + ck_wh) &&
       (mouse_x >= ck_x) && (mouse_x <= ck_x + 235)) ? (note_off = !note_off);
    
      i = 0;
      while (i < n_btn) (
        ((mouse_y >= ch_button_y[i]) && (mouse_y <= ch_button_y[i] + bt_hght)) ? (
          ((mouse_x >= ch_button_x[i]) &&
           (mouse_x <= ch_button_x[i] + ch_wdth)
          ) ? (
            (mouse_cap == 1) ? (
              memset(ch_state, 0, n_btn);
              (note_off == 1) ? (note_off_send = 1);
            );
            ch_state[i] = !ch_state[i];
          );
     
          ((mouse_x >= m_button_x[i]) &&
           (mouse_x <= m_button_x[i] + ms_wdth)
          ) ? (
            (mouse_cap == 5) ? (memset(m_state, 0, n_btn));
            m_state[i] = !m_state[i];
          );
    
          ((mouse_x >= s_button_x[i]) &&
           (mouse_x <= s_button_x[i] + ms_wdth)
          ) ? (
            (mouse_cap == 5) ? (memset(s_state, 0, n_btn));
            s_state[i] = !s_state[i];
          );
        );
    
        i += 1;
      );
    );
    
    mouse_cap_p = mouse_cap;
    
    solo = 0;
    i = 0;
    while (i < n_btn) (
      s_state[i] == 1 ? (
        solo = 1;
        i = 666;
      );
      i += 1;
    );
    
    @block
    (note_off_send == 1) ? (
      note_off_send = 0;
      i = 0;
      while (i < n_btn) (
        midisend(0, $xB0 + i, 123, 0);
        i += 1;
      )
    );
    
    while (midirecv(pos, msg1, msg2, vel)) (
      i = 0;
      while (i < n_btn) (
        pass = 0;
    
        (solo == 0) ? (ch_state[i] == 1) ? (pass = 1);
     
        (m_state[i] == 1) ? (pass = 0);
        (s_state[i] == 1) ? (pass = 1);
     
        (pass == 1) ? (midisend(pos, (msg1 & $xF0) + i, msg2, vel));
    
        i += 1;
      );
    )

    and @xorome
    [​IMG]
     
    Last edited: Apr 18, 2024
    • Like Like x 2
    • Winner Winner x 2
    • Love it! Love it! x 1
    • List
  7. justsomerandomdude

    justsomerandomdude Rock Star

    Joined:
    Aug 24, 2020
    Messages:
    490
    Likes Received:
    322
  8. Chaindog

    Chaindog Platinum Record

    Joined:
    Dec 12, 2016
    Messages:
    232
    Likes Received:
    187
    Here are 2 great Repositories with awesome JSFX and Synths for Reaper:

    Saike's workshop
    https://forums.cockos.com/showthread.php?t=220277
    Direct Link to the Repository:
    https://raw.githubusercontent.com/JoepVanlierFX /JSFX/master/index.xml

    Some videos:



    Tukan Studios plugins
    Overview List (PDF)
    https://raw.githubusercontent.com/TukanStudios/TUKAN_STUDIOS_PLUGINS/main/Complete_Plugin_List.pdf
    Direct Link to the Repository:
    https://raw.githubusercontent.com/TukanStudios/TUKAN_STUDIOS_PLUGINS/main/index2.xml

    Some videos:
    [
    ]
     
  9. Sinus Well

    Sinus Well Audiosexual

    Joined:
    Jul 24, 2019
    Messages:
    2,108
    Likes Received:
    1,626
    Location:
    Sanatorium
    Here are some things that are probably more likely to be categorised as "simple and boring", but are absolutely indispensable for me in my day-to-day work.


    SWS: ReaConsole


    It's not sexy but,
    • Sometimes you just reach your goal faster with the keyboard than with the mouse.
    • And in combination with the Cycle Action Editor, you can use the Console to create quite complex actions.

    [​IMG]




    rodilab_Color palette
    • A very simple color palette - despite many customization options - but the fact that I can dock it vertically next to my TCP makes it very handy for me.
    [​IMG]

    ReaNamer (track-item-region renaming utility) [amagalma & gianfini]
    • Seriously, this tool saves me A LOT of time.
    [​IMG]




    SWS: Auto Color/Icon/Layout & Default_7.0_theme_adjuster
    • I mainly use Auto Color/Icon/Layout to load layouts based on prefixes in the name. Or to automatically color children based on their folder color.
    • The new Theme Adjuster is just great.
    layout.png




    "View: Toggle to alternate TCP area width (alternate is zero by default)"
    • Need more screen space for arranging and editing? This is your action!
    layout s.png
     
    • Like Like x 4
    • Interesting Interesting x 1
    • Love it! Love it! x 1
    • Useful Useful x 1
    • List
Loading...
Loading...