Reaper: Interesting Tips, Tricks & Actions.

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

  1. justsomerandomdude

    justsomerandomdude Platinum Record

    Joined:
    Aug 24, 2020
    Messages:
    437
    Likes Received:
    287
    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 Rock Star

    Joined:
    Apr 18, 2013
    Messages:
    849
    Likes Received:
    465
  3. Chaindog

    Chaindog Producer

    Joined:
    Dec 12, 2016
    Messages:
    201
    Likes Received:
    139
    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:
    751
    Likes Received:
    591
    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,008
    Likes Received:
    1,539
    Location:
    Sanatorium
    .... already mentioned on page 1.
    :bleh:
     
    • Agree Agree x 1
    • Funny Funny x 1
    • List
  6. justsomerandomdude

    justsomerandomdude Platinum Record

    Joined:
    Aug 24, 2020
    Messages:
    437
    Likes Received:
    287
    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
    • Winner Winner x 2
    • Like Like x 1
    • Love it! Love it! x 1
    • List
Loading...
Similar Threads - Reaper Interesting Tips Forum Date
Cocokos Reaper on Sonoma Issue Mac / Hackintosh Apr 3, 2024
Dragging mp3 stems from folder to Reaper general discussion Mar 6, 2024
Real Guitars not showing on Reaper [solved] Software Feb 11, 2024
Torn between REAPER and Cubase for songwriting/composing/production DAW Jan 16, 2024
Using Komplete Kontrol on comp screen in Reaper and keyboard ONLY to play Reaper Dec 5, 2023
Loading...