Last updated:

ReaTab Hero: Side-Scrolling Tab Viewer Script for MIDI Items in REAPER

New (2022-10-28): New alternative GUI engine for smoother scrolling! Check ReaImGui update below!
Notes: Most screenshots and videos here are made with early version of the plugin. See screenshot above for last version.

Introduction

Have you already tried to play guitar, bass, or any similar instrument from a REAPER MIDI composition? MIDI Editor and Notation Editor are a bit difficult to read in real time, and there is no indication of what string is related to a particular note.
This is why I made a MIDI to Tablature viewer for REAPER!

Background

I had a complex composition I wanted to share to a friend so he can play the bass. His part was already programmed in MIDI, but transposing MIDI notation to fingers placement on a bass neck is not that handy. He needed something more optimized for his instrument, something he was used to: a simple tab view.

REAPER (since 5.20), offers a notation editor, but a lot of people are not that good for reading scores. A tab-like view fit guitarists special needs better because you have the string/frets associated to notes.

As Guitar Pro is a excellent software for displaying tabs, I exported the track to MIDI, and imported to Guitar Pro. That was terrible.

Several problems:

  • Guitar Pro need precisely quantized Notes, you can’t export a humanized MIDI performance, or free tempo compositions.
  • Guitar Pro have troubles handling “incomplete measure” (like 15/16) and note below sixteenth notes (which happen a lot in certain music genres).
  • Guitar Pro import MIDI tracks as Piano per default. There is no easy way to change this setting or a track instrument. You have to copy paste all notes from the piano track, create a new score, paste them in it.

Other notation editors can be more solid with MIDI import, but fundamental issues with this process are still there:

  • As your tab and your projects are not synced, if you make a change in your REAPER project, you will have to export/import your MIDI again
  • If you do that, you will lose all customization you made in your tabs (like string transposition)
  • You don’t have the real sound of your project in tab editors
  • You can’t really simply have free tempo kind of tab.

Reciprocally, having a tab viewer integrated to a DAW offer this three major advantages:

  • Instant sync with the project, no export/import needed
  • Ability to have the sound of the project
  • Less softwares features to learn/buy

That was it. Inspired by games like Guitar Hero and RockSmith, I decided to make my own MIDI Tab Viewer REAPER Script. It will not aim to replace a proper tab editor/viewer (which can do print oriented stuffs for example), but it could do just what I wanted: displaying MIDI notes in a side-scrolling window which would allow me to share/learn my compositions more easily, in sync with my projects.

And now, let me introduce you to my most advanced ReaScript so far: ReaTab Hero!

Simple arpeggios displayed in ReaTab Hero.
Simple arpeggios displayed in ReaTab Hero (v1.0).

Concept

Notes are sampled from non-muted MIDI notes of all MIDI items of a track that has been define as source (by a simple click on the Strings panel).

Because it is more performance oriented than composition oriented, you don’t need to quantize your notes and align them to the grid. You can even compose in free tempo!

String notes are defined by their MIDI channels: channel 1 is first string, channel 2 is second string etc…

Notes are displayed as trapeziums (almost rectangles) according to their length and according to their relative position from the cursor position, based on the look ahead time after it. This allows you to see the notes coming without having to bother about what is already passed.

You can customize your instrument (strings number, strings tonality, cases number) and the tab display (color schemes, look ahead time and mod etc) by entering the settings panel by pressing a any keyboard with the script window in focus. To toggle back, press another key.

I added a lot of features to make it customizable and user friendly. You will find the list below!

Features

  • Customizable Instrument (for Guitar, Bass, Banjo, Ukulele…)
    • Customizable strings number from 4 to 9
    • Customizable cases number
    • Customizable tuning (individual or all strings tonality offset buttons)
  • Multiple Color Schemes
    • Strings Mod: arbitrary vivid colors (like Guitar Hero or RockSmith)
    • Tonality Mod: the closer a note is to an other, the more their tint will be similar
    • Intervals Mod: the more consonant an interval is, the more tint of its notes will be close (based on MyColorMusic principles)
  • Customizable look-ahead
    • Duration
    • Type (time in seconds or measures)
  • Customizable notes opacity mod (fixed or based on MIDI velocity)
  • Cursor View or Arrange View modes
  • Note Shapes modes (Trapeze or Round Rectangle)
  • Vertical Grid according to look ahead time and mod.
    • Possibility to hide the the grid
    • Grid based on Time
    • Grid based on Measures
    • Grid based on Beats
  • Instrument Presets Management
    • Create Presets
    • Load Presets
    • Delete Presets
    • Ability to save/restore presets for each tracks
  • Instant preview of first selected track MIDI notes
  • Loop mod (if you activate Loop and if the cursor is before or inside the loop section, then the next notes displayed are the notes of the loop. No more disturbing cursor back jump!
  • Muted MIDI notes excluded from visualization, but not muted items (useful for practicing). Also, MIDI notes or part of notes outside item boundaries are not displayed.
  • Selected notes have white background and colored fret number
  • Note display can be based on frets or note name
  • Vertical bar display for Item Edges and Tempo Markers
  • Online Help button
  • On screen instructions if no track selected at script start
  • Open Source (nice if you want to modify some deep variables, like background color for example).
  • Update with ReaPack.
  • Flexible Interface (from small screens to big ones)
  • CPU friendly (less than 1% on my test machine, in Live mod, on a regular Guitar track).
    • Refresh Mod “Live” for instant preview of notes modifications.
    • Refresh Mod “Frozen” prevent refresh of notes modifications, but save CPU (can be useful on low-end computers overcharged — more than 30 000 events — MIDI files)
  • Multiple instances can be launched at the same time
Settings panel, and all different buttons settings.
Settings panel, and all different buttons settings.

Demos

The following video s a simple overview of the main features of ReaTab Hero, with a tab for the song Beelzeboss by Tenacious D, from the soundtrack of The Pick of Destiny Movie Picture (copyright by SME – due to copyright, this video maybe not avaible in your country. You can check the second video if this is the case).

A second simple overview, with a personal composition, Asymmetrical Brain Damage:

Detailed tutorial on how to set up a tab from an already existing song Guitar Pro tab:

New (2022-10-28): ReaImGui alternative GUI Engine for smoother scrolling

Reatab Hero framerates drops when there are lot of notes on screen. I tried various things to optimize it, but I may have faced some REAPER limitations with GFX GUI engine.

At last, we have a workarround now! Thx to cfillion, we now have a new engine GUI for REAPER scripts, and good news is that it seems way smoother than GFX. Check below these two 30 fps GIF for comparison:

ReaTabHero GFX version, which is slowed down by all these notes.
ReaTab Hero ReaImGui version, which is way smoother than GFX version above.

The new version is so much smoother!

So now included in the pack as a free update, a ReaImGui – smooth – version of the script, X-Raym_ReaTab Hero_ReaImGui.lua ! I still keep the original GFX version in the pack because this is pretty recent, a bit experimental and need testing and feedback to be considered solid, but it is very promising! (Update 2024-25-03: now the regular version run with ReaImGui out of the box, if it is installed).

This is made possible by cfillion’s ReaImGui, available for free in ReaPack Reateam extension. The pack features a way to bridge any GFX script to ReaImGui engine, and we tested it with ReaTab Hero in particular.

There a few minor limitations for now, like you can’t have every character possible in MIDI markers names (it will be replaced “?” if not known), and a split second blur on text at setting panel initialisation. But there are other benefits like the anti-aliasing on shapes and circles which are better drawn. From now on, I would advice to use the ReaImGui version, cause it definitely seems better on almost every levels.

View Modes (Update 2024-03-20)

There use to be only one view modes (view from play cursor position + lookahead duration), now you also have an Arrange View Mode, which can display notes vertically aligned with what you see in arrange view. This is useful if you don’t need to practice playing guitar, but only want some kind of a guide during editing.

Cursor and Arrange View modes.

Tips

  • I strongly advice you to map the two actions Set selected event to one channel higher/lower to a keyboard shortcut to make edition easier.
  • Also, using the Color notes/CC by channel as a toolbar button can be great!
  • Use the X-Raym_Offset selected MIDI notes channel according to their chords.lua included in this script pack to offset strings (MIDI channel) associated to selected notes, according to their position in a chord. It supports strummed chords. Demo:
    Define string notes according to note position in chord.
  • Use my Select/Unselect note at the same pitch of mouse cursor script can be helpful.
  • Set one editor per project if you want the MIDI Editor to display/edit notes of all items on one track no matter which one is in focus.
  • If you want to make an existing song ReaTab friendly, but you don’t have the MIDI:
    • Import your audio into REAPER.
    • Import or Create a MIDI file into REAPER (From Guitar Pro, you can export your tab to MIDI)
    • Snap the first recognizable beat of a song to the grid, and sync the midi item to it.
    • Adjust tempo from this starting point. If the MIDI fits the song well and if the song was composed on the grid, it can fast to do, but if you work from a MIDI that doesn’t fit the song and if your song have different tempo and time signature variations, it will need some extra efforts (adding/adjusting different tempo markers, splitting the item etc…).
    • Adjust string notes.
  • Due to how Measures look ahead time mod work, if you have complex tempo map (time signatures variations…), use Time mod.
  • You can modify the Master Playrate of REAPER to practice your sound slower. You can also put a virtual instrument (a synth or even better, a virtual guitar as track FX so that you don’t have “slow-downed” sound effects.
  • Because REAPER supports video, you can even put a video synced with your sound, like someone performing the song with a guitar, or lyrics etc… very convenient for practicing!

Warnings

  • This scripts pack required to be a minimum cumfy with REAPER: MIDI editing basics, setting an action to a toolbar or a keyboard shortcut, filtering the action list… If you are a beginner, I advice you to read this article in order to get your hands over it and to access some resources to continue your learning.
  • The script doesn’t do any live input signal analysis (audio or MIDI), it cannot recognize what you are playing directly. It is just a tab viewer.
  • The script doesn’t work with looped items. Consider splitting your items loop into several items. You can use my Convert selected looped items into independent items script. It is shared for free in my script pack.
  • No display for advanced guitar play techniques like bends, vibrato, harmonics… Only notes. I didn’t find a satisfying solution to encode such infos from MIDI notes properties, and what I needed is mostly finger position. But this may change in the future. EDIT (2023): I made an updated which allows to add symbols using text events as a generic workarround for this.
  • Resizing script window on MacOS can make it flicker. This is a REAPER related issue. But once the size is set, it is all good.
  • Going from Guitar Pro (or other music notation software) to REAPER while preserving the string notes is not possible at this time. Indeed, only MusicXML format can do that, and MusicXML is not currently supported in REAPER. This may change in the future, as announced on the Cockos forum. So what you have to do is to export to MIDI, and then redefine the string manually. According to the song, this may be a matter of seconds, with some selection actions and the X-Raym_Offset selected MIDI notes channel according to their chords.lua script (from this pack), or it could be a lot harder.
  • If you export your MIDI track from REAPER to external notation editor, your notes string assignation may not be recognized, if your software importer doesn’t convert MIDI notes channel to a certain string. ReaTab is designed to work for REAPER projects, inside REAPER.
  • ReaTab hero doesn’t replace a usual Tab Editors. It doesn’t do print, page layout, or fancy symbols etc… It’s just a tab scroller.
  • The script doesnt do auto-string matching. You have to manually associated MIDI notes channel to the desired string. String 1 = channel 1, String 2 = channel 2 etc… I may add this in the future but no plan for it. Contact me if this is really needed.

Controls

Strings Panel

  • Left Click on the interface: define first selected track as source
  • Right Click on the interface: define go to settings panel
  • Space Play/Stop
  • Enter Play/Pause
  • n Toggle notes naming
  • c Toggle color modes
  • v Toggle view modes
  • CTRL/CMD Focus arrange view

Settings Panel

  • Left Click / Right Click primary or secondary actions of a button.
  • Left Click / Right Click on the info display: go back to Strings panel.

All Panels

  • Escape: exit the script
  • CTRL + Space: Play
  • Any other Key Toggle panel

Product Content

Summary

By purchasing this product, you will get:

  • The ReaTab Hero scripts files
  • A script to unselect all MIDI notes of selected items, right from the arrange view (X-Raym_Unselect all MIDI notes of selected items.lua)
  • 3 scripts for create common chords from the bottom MIDI note while offseting their MIDI channel (aka, while assigning them on different string):
    • X-Raym_Duplicate selected notes as fifth and octave triads offseting channels.lua
    • X-Raym_Duplicate selected notes as fifth offseting channels.lua
    • X-Raym_Duplicate selected notes as fourth offseting channels.lua
    • X-Raym_Offset selected MIDI notes channel according to their chords.lua
  • A script to set all MIDI notes of selected items to channel 1 right from the arrange view (X-Raym_Set all MIDI notes of selected items to channel 1.lua), very useful is you import MIDI from another app, that may export every instruments on different MIDI channels (like Guitar Pro)
  • 20 Instrument Presets (Bass, Guitar, Mandolin, Banjo, Ukulele)…
  • A demo project
  • New (2022-10-28): A ReaImGui version of the script (X-Raym_ReaTab Hero_ReaImGui.lua), smoother than the original script.

This script uses the following ReaScript Libraries shared for free by other members of the REAPER community. These will be provided with the main script:

  • eugen2777 simple GUI class, for the buttons, moded for this script
  • spk77 table to presets, for the presets management

Many thanks to eugen2777 and spk77 for these! Also, thanks to mpl and heda for some very useful code snippets, and cfillion for ReaPack!

Reapack Content

Installation

After purchase, just log into the website, to check the detailed installation instructions here, or on the dedicated Purchase Confirmation page. This pack can be installed and updated from REAPER thanks to the free ReaPack extension, via a custom repository link related to your licence, or via regular Zip download. License are valid lifetime. You will be able to enjoy updates and new scripts added to the pack without extra cost.

Links

  1. Cockos Forum Thread: ReaTab Hero: Side-Scrolling Tab Viewer ReaScript
  2. Cockos French Forum Thread: ReaTab Hero : Tablatures en défilement hozitontal
  3. AudioFanzine French Forum Thread: Tutoriel : ReaTab Hero : Tablatures en défilement hozitontal – Audiofanzine

Notes

By buying this product, you are supporting my free scripting. Thanks!

Purchase

  • Personnal use, you are an individual, a student, or a non-profit organization, and you will not use this pack on commercial projects.

  • You work for a small business company on commercial projects.

  • You are a big business company with a team of more than 5 people. Consider one purchase per team.