Reaper: Interesting Tips, Tricks & Actions.

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

  1. justsomerandomdude

    justsomerandomdude Rock Star

    Joined:
    Aug 24, 2020
    Messages:
    511
    Likes Received:
    336
    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:
    951
    Likes Received:
    542
  3. Chaindog

    Chaindog Platinum Record

    Joined:
    Dec 12, 2016
    Messages:
    262
    Likes Received:
    220
    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,365
    Likes Received:
    1,019
    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,156
    Likes Received:
    1,672
    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:
    511
    Likes Received:
    336
    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:
    511
    Likes Received:
    336
  8. Chaindog

    Chaindog Platinum Record

    Joined:
    Dec 12, 2016
    Messages:
    262
    Likes Received:
    220
    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,156
    Likes Received:
    1,672
    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
  10. justsomerandomdude

    justsomerandomdude Rock Star

    Joined:
    Aug 24, 2020
    Messages:
    511
    Likes Received:
    336
    MIDI Razor Edits
    Original Post: https://forum.cockos.com/showthread.php?p=2839310

    (from Forum)

    What does MIDI Razor Edits do?

    MIDI Razor Edits adds the ability to:
    • Select, copy, and manipulate MIDI notes and CC data with the precision of Razor Edits.
    • Use workflows similar to REAPER’s native Razor Edits but designed specifically for MIDI editing.
    • Stretch, scale, invert, duplicate, copy your MIDI data quickly and conveniently.
    • You don't need to change event selection to work with notes and CC data.
    • Save time and make MIDI editing more flexible and intuitive.

    How does it work?

    When the script is active (I recommend assigning it to a key command or a toolbar icon), you can left-drag to create areas over notes and CC lane events. Cmd/Ctrl+drag will let you create several at a time. The script reads your grid-snapping settings out and uses them as the default, press Shift to reverse that setting (to turn snapping off or on). Adding the Option/Alt key will cause your lane to extend to the full lane height (in the piano roll), or to _not_ extend to the full lane height (in a CC lane).

    Or you can double-click on some empty space and get a new area encompassing all the data in that lane (full-lane in a CC lane (use Option/Alt to get a free area), only surrounding the notes in the piano roll).

    Once you've got an area, you can drag to move it (and whatever is under it) to a new location. Cmd/Ctrl+drag will make a copy. Again, Shift will reverse your snapping setting. Or delete the area (and whatever is under it).

    Or you can press Option/Alt and drag on the edges of the area to stretch the contents in time, or scale the contents in value. This doesn't work for all stuff -- velocities and notes are special --, but you'll figure it out.

    Or you could double-click on an area to reveal The Widget©™, which will let you scale and tilt stuff along a linear ramp.

    Or you can use some keyboard commands to do stuff like invert the contents, delete the area contents, duplicate all selected areas to the right. It's documented in this PDF.

    There's a preferences app which lets you assign keyboard commands, change scale/tilt behaviors, etc.

    [​IMG]

    [​IMG]

    [​IMG]

    Repository Link: https://github.com/jeremybernstein/ReaScripts/raw/main/index.xml

    This Is much like the multi-tool script, This one: https://forum.cockos.com/showthread.php?t=176878


    [​IMG]
     
Loading...
Similar Threads - Reaper Interesting Tips Forum Date
reaper midi paint notes question Reaper Apr 12, 2025
Reaper daw question - Inline midi editor Reaper Apr 10, 2025
Melodyne copy/paste in Reaper Software Reviews and Tutorials Apr 3, 2025
What do other DAWs have that REAPER doesn't? (songwriting, composition, music production) DAW Jan 25, 2025
How to configure Remidi4 in Reaper (tired) :) Mixing and Mastering Jan 23, 2025
Loading...