4 instance TH-U looper with Overdub on-off switch

It’s a weekend, so time to share some new stuff

I took this great idea of using the built-in THU plugin as a looper from @speed12 and modified his scriptlet a bit. The problem I had with the scriptlet was that the TH-U looper always works in Overdub mode, which I never need. But it also has two channels, which I also never need, and after quite a lot of tinkering I finally figured out a way to use both channels so that the looper acts as a normal single channel one with Overdub mode that can be turned on and off.

Another small thing I changed is the Level knob doesn’t go above 113, which is 0 dB gain - I never need the loop to be louder than the origininal level.

So, here’s my version of the looper:

Instead of using channels, I have several instances of the looper, which can be selected by the Source Select buttons.

The gig file with the looper controls in the Global rackspace:
Global Rack Looper.gig (264.9 KB)

Now, I can’t for the life of me figure out what is and what isn’t saved in the gig file, so here are some additional things you might need if it doesn’t work out of the box:

First, here are presets for all the involved blocks:
looper-presets.zip (8.3 KB)
Just copy them to your Presets folder, then open the Wiring view and select them for the scriptlet and TH-U blocks.

If that still doesn’t work, that’s probably because the midi mappings aren’t set up for the TH-U plugin. Open one of the TH-U plugin windows, select the MIDI menu, scroll down a bit and check whether the looper bindings look like this:

If they are empty, you’ll need to either manually map them or scroll up to the GLOBAL MIDI BINDINGS section, click LOAD, and import the midi.t3b file (it’s in the looper-presets.zip file above, you should have copied it to Presets/Overloud/TH-U folder)

Finally, you’ll probably be using it in your own gig file, so to make it a bit easier, you can add all the instances of the looper and the scriptlet from this file:
looper-favorites.zip (5.9 KB). Unzip it to your Favorites folder, and then right click in the Wiring view, go to Favorites, and you’ll be able to import everything in one move.

Of course, you’ll then have to copy and paste the widgets to your rackspace, and also add the script that makes it all work (copy it from the Global Rackspace script in the gig file or see below).

Enjoy!


// LOOPER CONTROL SECTION

Var

    gSrcPost, gSrcDI, vSrcPost, vSrcDI: Widget //looper source select buttons
    
    gPostLpr, gPostLprC, gDILpr, gDILprC, vPostLpr, vPostLprC, vDILpr, vDILprC: PluginBlock //looper blocks
    
    lprTrigger, lprStop, lprClear, lprOverdub, lprLabel, lprUndo, lprOpen, lprLvl, lprRecording, lprPlaying, lprMemory: Widget //looper controls
    


On WidgetValueChanged (w: Widget, i: Integer, sval: double) from gSrcPost, gSrcDI, vSrcPost, vSrcDI
    Var sumValues: Double = GetWidgetValue (gSrcPost) + GetWidgetValue (gSrcDI) + GetWidgetValue (vSrcPost) + GetWidgetValue (vSrcDI)
    If sumValues == 0.0 Then
        SetWidgetValue (gSrcPost, 1.0)
    Else
        Select
            i == 0 Do
                If sval > 0 Then
                    MapWidgetToPlugin (lprTrigger, gPostLprC, 0)
                    MapWidgetToPlugin (lprLabel, gPostLprC, 7)
                    MapWidgetToPlugin (lprStop, gPostLprC, 18)
                    MapWidgetToPlugin (lprUndo, gPostLprC, 2)
                    MapWidgetToPlugin (lprOverdub, gPostLprC, 21)
                    MapWidgetToPlugin (lprClear, gPostLprC, 19)
                    MapWidgetToPlugin (lprOpen, gPostLpr, -1)
                    MapWidgetToPlugin (lprLvl, gPostLprC, 8)
                    MapWidgetToPlugin (lprRecording, gPostLprC, 4)
                    MapWidgetToPlugin (lprPlaying, gPostLprC, 5)
                    MapWidgetToPlugin (lprMemory, gPostLprC, 6)
                    
                End
            i == 1 Do
                If sval > 0 Then
                    MapWidgetToPlugin (lprTrigger, gDILprC, 0)
                    MapWidgetToPlugin (lprLabel, gDILprC, 7)
                    MapWidgetToPlugin (lprStop, gDILprC, 18)
                    MapWidgetToPlugin (lprUndo, gDILprC, 2)
                    MapWidgetToPlugin (lprOverdub, gDILprC, 21)
                    MapWidgetToPlugin (lprClear, gDILprC, 19)
                    MapWidgetToPlugin (lprOpen, gDILpr, -1)
                    MapWidgetToPlugin (lprLvl, gDILprC, 8)
                    MapWidgetToPlugin (lprRecording, gDILprC, 4)
                    MapWidgetToPlugin (lprPlaying, gDILprC, 5)
                    MapWidgetToPlugin (lprMemory, gDILprC, 6)
                End
            i == 2 Do
                If sval > 0 Then
                    MapWidgetToPlugin (lprTrigger, vPostLprC, 0)
                    MapWidgetToPlugin (lprLabel, vPostLprC, 7)
                    MapWidgetToPlugin (lprStop, vPostLprC, 18)
                    MapWidgetToPlugin (lprUndo, vPostLprC, 2)
                    MapWidgetToPlugin (lprOverdub, vPostLprC, 21)
                    MapWidgetToPlugin (lprClear, vPostLprC, 19)
                    MapWidgetToPlugin (lprOpen, vPostLpr, -1)
                    MapWidgetToPlugin (lprLvl, vPostLprC, 8)
                    MapWidgetToPlugin (lprRecording, vPostLprC, 4)
                    MapWidgetToPlugin (lprPlaying, vPostLprC, 5)
                    MapWidgetToPlugin (lprMemory, vPostLprC, 6)
                End
            i == 3 Do
                If sval > 0 Then
                    MapWidgetToPlugin (lprTrigger, vDILprC, 0)
                    MapWidgetToPlugin (lprLabel, vDILprC, 7)
                    MapWidgetToPlugin (lprStop, vDILprC, 18)
                    MapWidgetToPlugin (lprUndo, vDILprC, 2)
                    MapWidgetToPlugin (lprOverdub, vDILprC, 21)
                    MapWidgetToPlugin (lprClear, vDILprC, 19)
                    MapWidgetToPlugin (lprOpen, vDILpr, -1)
                    MapWidgetToPlugin (lprLvl, vDILprC, 8)
                    MapWidgetToPlugin (lprRecording, vDILprC, 4)
                    MapWidgetToPlugin (lprPlaying, vDILprC, 5)
                    MapWidgetToPlugin (lprMemory, vDILprC, 6)
                End
        End
    End
End
5 Likes

Thanks for Sharing! :slight_smile:

1 Like

There’s more stuff coming soon, I’m not done yet :slight_smile:

3 Likes