Schrödinger’s Cat’s Möbius 3 Site
  1. Sheeran Looper X
  2. Möbius Implementations
  3. Advanced Version
  4. MSL Scripts
  • Home
  • Sheeran Looper X
    • Introduction
    • Möbius Implementations
      • Background
      • Basic Version
        • MSL Scripts
        • Installation
      • Advanced Version
        • MSL Scripts
        • Installation

On this page

  • SheeranXLib.msl
  • SheeranXPedal1.msl
  • SheeranXPedal2.msl
  • SheeranXPedal3.msl
  • SheeranXPedal4.msl
  • SheeranXPedal5.msl
  • SheeranXPedal6.msl
  • SheeranXPedal7.msl
  • SheeranXPedal8.msl
  1. Sheeran Looper X
  2. Möbius Implementations
  3. Advanced Version
  4. MSL Scripts

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
}
Advanced Version
Installation