Reaper: Interesting Tips, Tricks & Actions.

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

  1. justsomerandomdude

    justsomerandomdude Platinum Record

    Joined:
    Aug 24, 2020
    Messages:
    439
    Likes Received:
    292
    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:
    850
    Likes Received:
    466
  3. Chaindog

    Chaindog Producer

    Joined:
    Dec 12, 2016
    Messages:
    203
    Likes Received:
    142
    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:
    781
    Likes Received:
    618
    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,026
    Likes Received:
    1,554
    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:
    439
    Likes Received:
    292
    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
VSTi in Reaper Reaper Tuesday at 8:12 AM
Reaper doesn't allow some cracked plugins Reaper Tuesday at 7:09 AM
Reaper...video render settings for lowest size with best quality possible? Reaper Tuesday at 12:44 AM
Transition from Sonar to Reaper Reaper Friday at 1:27 PM
Cocokos Reaper on Sonoma Issue Mac / Hackintosh Apr 3, 2024
Loading...