MSL Scripts
SheeranXLib.msl
#name Sheeran Looper X Library
#library
//Library script to emulate the Sheeran Looper X
// (Still a work in progress)
init{
InstallUIElement("mutemodeLabel","mutemode" :Text :text "Mute Mode" :width 67 :onColor :white :offColor :gray)
InstallUIElement("tapmodeLabel","tapmode" :Text :text "Tap Mode" :width 60 :onColor :white :offColor :gray)
InstallUIElement("fmenuALabel","fmenuA" :Text :text "Function Menu A" :width 100 :onColor :white :offColor :gray)
InstallUIElement("a1modeLabel","a1mode" :Text :text "1. TUNER" :width 59 :onColor :white :offColor :gray)
InstallUIElement("a2modeLabel","a2mode" :Text :text "2. FX" :width 34 :onColor :white :offColor :gray)
InstallUIElement("a3modeLabel","a3mode" :Text :text "3. LOAD" :width 52 :onColor :white :offColor :gray)
InstallUIElement("a4modeLabel","a4mode" :Text :text "4. SAVE" :width 50 :onColor :white :offColor :gray)
InstallUIElement("a5modeLabel","a5mode" :Text :text "5. PEEL" :width 47 :onColor :white :offColor :gray)
InstallUIElement("a6modeLabel","a6mode" :Text :text "6. CLEAR ALL" :width 82 :onColor :white :offColor :gray)
InstallUIElement("a7modeLabel","a7mode" :Text :text "7. CLEAR TRACKS" :width 108 :onColor :white :offColor :gray)
InstallUIElement("a8modeLabel","a8mode" :Text :text "8. EXIT" :width 47 :onColor :white :offColor :gray)
InstallUIElement("fmenuBLabel","fmenuB" :Text :text "Function Menu B" :width 100 :onColor :white :offColor :gray)
InstallUIElement("b1modeLabel","b1mode" :Text :text "1. BOUNCE" :width 68 :onColor :white :offColor :gray)
InstallUIElement("b2modeLabel","b2mode" :Text :text "2. MULTIPLY" :width 76 :onColor :white :offColor :gray)
InstallUIElement("b3modeLabel","b3mode" :Text :text "3. SPEED" :width 57 :onColor :white :offColor :gray)
InstallUIElement("b4modeLabel","b4mode" :Text :text "4. BACKING TRACK" :width 116 :onColor :white :offColor :gray)
InstallUIElement("b5modeLabel","b5mode" :Text :text "5. TRANSPOSE" :width 90 :onColor :white :offColor :gray)
InstallUIElement("b6modeLabel","b6mode" :Text :text "6. FADE" :width 50 :onColor :white :offColor :gray)
InstallUIElement("b7modeLabel","b7mode" :Text :text "7. REVERSE" :width 73 :onColor :white :offColor :gray)
InstallUIElement("b8modeLabel","b8mode" :Text :text "8. EXIT" :width 47 :onColor :white :offColor :gray)
}
export variable normalmode=1
export variable mutemode=0
export variable tapmode=0
export variable fmenuA=0
export variable fmenuB=0
export variable fsubmenu=0
export variable a1mode=0
export variable a2mode=0
export variable a3mode=0
export variable a4mode=0
export variable a5mode=0
export variable a6mode=0
export variable a7mode=0
export variable a8mode=0
export variable b1mode=0
export variable b2mode=0
export variable b3mode=0
export variable b4mode=0
export variable b5mode=0
export variable b6mode=0
export variable b7mode=0 export variable b8mode=0
SheeranXPedal1.msl
#name SheeranXPedal1
#repeat
if normalmode equals 1{
//Must be in Normal Mode so pressing pedal 1 selects Track 1
SelectTrack(1)
}
else if mutemode equals 1{
//We must be in Mute mode so pressing pedal 1 Mutes/Unmutes Track 1.
in 1 Mute
}
else if fmenuA equals 1{
//We must be in Function Menu A.
if fsubmenu equals 1{
//We must be in a function submenu.
if a5mode equals 1{
//If a5mode=1 must be in Peel Mode so pressing pedal 1 undoes an overdubbed layer on Track 1.
in 1 Undo
}
else if a7mode equals 1{
//If a7mode=1 must be in Clear Track Mode so pressing pedal 1 clears Track 1.
in 1 Reset
}
}
}
else if fmenuB equals 1{
//We must be in Function Menu B.
if fsubmenu equals 1{
//We must be in a function submenu.
if b2mode equals 1{
//If b2mode=1 must be in Multiply Mode so pressing pedal 1 Divides the active loop.
Divide(2)
}
else if b3mode equals 1{
//If b3mode=1 must be in Speed Mode so pressing pedal 1 multiplies the speed (0.5X) of the active loop.
SpeedOctave(-1)
}
else if b7mode equals 1{
//If b7mode=1 must be in Reverse Mode so pressing pedal 1 reverse the direction of Track 1.
in 1 Reverse
}
}
}
//Double press of pedal 1 solos Track 1
function OnRepeat(repeatCount){
in 1 Solo }
SheeranXPedal2.msl
#name SheeranXPedal2
#repeat
if normalmode equals 1{
//Must be in Normal Mode so pressing pedal 2 selects Track 2
SelectTrack(2)
}
else if mutemode equals 1{
//We must be in Mute mode so pressing pedal 2 Mutes/Unmutes Track 2.
in 2 Mute
}
else if fmenuA equals 1{
//We must be in Function Menu A.
if fsubmenu equals 1{
//We must be in a function submenu.
if a5mode equals 1{
//If a5mode=1 must be in Peel Mode so pressing pedal 2 undoes an overdubbed layer on Track 2.
in 1 Undo
}
else if a7mode equals 1{
//If a7mode=1 must be in Clear Track Mode so pressing pedal 2 clears Track 2.
in 1 Reset
}
}
}
else if fmenuB equals 1{
//We must be in Function Menu B.
if fsubmenu equals 0{
//We must not be in a submenu yet so pressing pedal 2 enters Multiply Mode (fsubmenu=1, b2mode=1)
fsubmenu = 1
b2mode = 1
}
else if fsubmenu equals 1{
//We must be in a function submenu.
if b2mode equals 1{
//If b2mode=1 must be in Multiply Mode so pressing pedal 2 Mutiplies (2X) the active loop.
InstantMultiply(2)
}
else if b3mode equals 1{
//If b3mode=1 must be in Speed Mode so pressing pedal 2 multiplies the speed (2X) of the active loop.
SpeedOctave(1)
}
else if b7mode equals 1{
//If b7mode=1 must be in Reverse Mode so pressing pedal 2 reverse the direction of Track 2.
in 2 Reverse
}
}
}
//Double press of pedal 2 solos Track 2
function OnRepeat(repeatCount){
in 2 Solo }
SheeranXPedal3.msl
#name SheeranXPedal3
#repeat
if normalmode equals 1{
//Must be in Normal Mode so pressing pedal 3 selects Track 3
SelectTrack(3)
}
else if mutemode equals 1{
//We must be in Mute mode so pressing pedal 3 Mutes/Unmutes Track 3.
in 3 Mute
}
else if fmenuA equals 1{
//We must be in Function Menu A.
if fsubmenu equals 1{
//We must be in a function submenu.
if a5mode equals 1{
//If a5mode=1 must be in Peel Mode so pressing pedal 3 undoes an overdubbed layer on Track 3.
in 3 Undo
}
else if a7mode equals 1{
//If a7mode=1 must be in Clear Track Mode so pressing pedal 3 clears Track 3.
in 3 Reset
}
}
}
else if fmenuB equals 1{
//We must be in Function Menu B.
if fsubmenu equals 0{
//We must not be in a submenu yet so pressing pedal 3 enters Multiply Mode (fsubmenu=1, b3mode=1)
fsubmenu = 1
b3mode = 1
}
else if fsubmenu equals 1{
//We must be in a function submenu.
if b2mode equals 1{
//If b2mode=1 must be in Multiply Mode so pressing pedal 3 Mutiplies (4X) the active loop.
InstantMultiply(4)
}
else if b3mode equals 1{
//If b3mode=1 must be in Speed Mode so pressing pedal 3 multiplies the speed (4X) of the active loop.
SpeedOctave(2)
}
else if b7mode equals 1{
//If b7mode=1 must be in Reverse Mode so pressing pedal 3 reverse the direction of Track 3.
in 3 Reverse
}
}
}
//Double press of pedal 3 solos Track 3
function OnRepeat(repeatCount){
in 3 Solo }
SheeranXPedal4.msl
#name SheeranXPedal4
#repeat
if normalmode equals 1{
//Must be in Normal Mode so pressing pedal 4 selects Track 4
SelectTrack(4)
}
else if mutemode equals 1{
//We must be in Mute mode so pressing pedal 4 Mutes/Unmutes Track 4.
in 4 Mute
}
else if fmenuA equals 1{
//We must be in Function Menu A.
if fsubmenu equals 1{
//We must be in a function submenu.
if a5mode equals 1{
//If a5mode=1 must be in Peel Mode so pressing pedal 4 undoes an overdubbed layer on Track 4.
in 4 Undo
}
else if a7mode equals 1{
//If a7mode=1 must be in Clear Track Mode so pressing pedal 4 clears Track 4.
in 4 Reset
}
}
}
else if fmenuB equals 1{
//We must be in Function Menu B.
if fsubmenu equals 1{
//We must be in a function submenu.
if b2mode equals 1{
//If b2mode=1 must be in Multiply Mode so pressing pedal 4 Mutiplies (8X) the active loop.
InstantMultiply(8)
}
else if b3mode equals 1{
//If b3mode=1 must be in Speed Mode so pressing pedal 4 multiplies the speed (8X) of the active loop.
SpeedOctave(3)
}
else if b7mode equals 1{
//If b7mode=1 must be in Reverse Mode so pressing pedal 4 reverse the direction of Track 4.
in 4 Reverse
}
}
}
//Double press of pedal 4 solos Track 4
function OnRepeat(repeatCount){
in 4 Solo }
SheeranXPedal5.msl
#name SheeranXPedal5
#sustain
if normalmode equals 1{
//We must be in Normal Mode
case mode {
:Reset {TransportStart Record}
:Record Play
:Overdub Play
:Play Overdub
:Mute Play
else print("Unhandled mode" mode)
}
}
else if fmenuA equals 1{
//We must be in Function Menu A
if fsubmenu equals 0{
//We must not be in a function submenu yet so pressing pedal 5 enters Peel Mode (fsubmenu=1, a5mode=1)
fsubmenu = 1
a5mode = 1
}
}
else if tapmode equals 1{
//We must be in Tap Tempo Mode so pedal 5 sets the Transport Tempo
TransportTap
}
function OnSustain(sustainCount sustainElapsed) {
if normalmode equals 1{
Undo
} }
SheeranXPedal6.msl
#name SheeranXPedal6
#sustain
if normalmode equals 1{
//We must be in Normal Mode so pressing Pedal 6 stops all tracks (we actually Mute them)
in all MuteOn
}
else if fmenuA equals 1{
//We must be in Function Menu A
if fsubmenu equals 0{
//We must not be in a function submenu yet so pressing pedal 6 clears all Tracks
in all Reset
}
}
function OnSustain() {
if normalmode equals 1{
//We must in Normal Mode so pressing and holding pedal 6 clears all Tracks
in all Reset
} }
SheeranXPedal7.msl
#name SheeranXPedal7
if mutemode equals 1{
//We must be in MuteMode so pressing pedal 7 exits Mute Mode and returns to Normal Mode
mutemode = 0
normalmode = 1
}
else if fmenuA equals 1{
//We must be in Function Menu A
if fsubmenu equals 0{
//We must not be in a function submenu yet so pressing pedal 7 enters Clear Track Mode (fsubmenu=1, a7mode=1)
fsubmenu = 1
a7mode = 1
}
}
else if fmenuB equals 1{
//We must be in Function Menu B
if fsubmenu equals 0{
//We must not be in a function submenu yet so pressing pedal 7 enters Reverse Mode (fsubmenu=1, b7mode=1)
fsubmenu = 1
b7mode = 1
}
}
else if normalmode equals 1{
//We must be in Normal Mode so pressing pedal 7 enters Mute Mode
mutemode = 1
normalmode = 0 }
SheeranXPedal8.msl
#name SheeranXPedal8
#sustain 500
#repeat 500
if normalmode equals 1{
//We must be in Normal Mode so pressing pedal 8 enters Function Menu A
fmenuA = 1
normalmode = 0
}
else{
//We must not be in Normal Mode so pressing pedal 8 exits and returns to Normal Mode
normalmode = 1
fmenuA = 0
}
mutemode = 0
tapmode = 0
fmenuB = 0
fsubmenu = 0
a1mode = 0
a2mode = 0
a3mode = 0
a4mode = 0
a5mode = 0
a6mode = 0
a7mode = 0
a8mode = 0
b1mode = 0
b2mode = 0
b3mode = 0
b4mode = 0
b5mode = 0
b6mode = 0
b7mode = 0
b8mode = 0
function OnSustain(sustainCount){
if normalmode equals 1{
//We must be in Normal Mode so pressing and holding pedal 8 should enters Function Menu B
fmenuB = 1
fmenuA = 0
normalmode = 0
}
else if fmenuA equals 1{
//We must be in Function Menu A so pressing and holding pedal 8 should enter Function Menu B
fmenuA = 0
fmenuB = 1
}
else if fmenuB equals 1{
//We must be in Function Menu B so pressing and holding pedal 8 should enter Function Menu A
fmenuA = 1
fmenuB = 0
}
}
function OnRepeat(repeatCount){
tapmode = 1
fmenuA = 0
normalmode = 0 }