DIY Chewie Monsta Looper (Based on Ed Sheeran's)

Introduction: DIY Chewie Monsta Looper (Based on Ed Sheeran's)

I will admit that I had heard of Ed Sheeran for a few years now and never really paid him much attention. I liked some of this songs on the radio but thought he was just another pop artist until I say him perform "Shape of You" at the 2017 Grammys. I was blown away! I didn't really even like the song but to watch him perform it live by himself with his loop pedal was mesmerizing. I scoured the internet looking for info on this pedal and found that there wasn't much out there. I final found some articles saying that it was custom built by Ed and his guitar tech which disappointed me until I finally came across and Instructable by "edsutcliffe" ( https://www.instructables.com/id/DIY-Chewie-Monst... ) that had the "secret sauce" on exactly how it worked. I was pumped because now being an engineer I new I could build one of these so I got to work. However, while working through the instructable I ran into several "gotchas" along the way which is why I wrote this instrcutable. edsutcliffe's page does a great job of describing the pieces and how they go together. My intention here is to fill in some of the gaps that drove me crazy and cost me hours if not days of time trying to solve problems. So while Im not going to walk you through step by step how to build the loop pedal (most of which you can find on edsutcliffe's page), Im going to walk you through the key integration issues that plagued me.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: The Pedal

While seeming to be the most critical piece, the pedal itself is the easiest and most straight forward part of the project. My advice here is to start slow and build a rough mock up first and experiment with it. I found that until you actually start using it that its difficult to know what you want. You may think that three tracks are enough but after playing a bit you may find that you really would like a fourth track. Changing it later isn't the easiest thing to do. Even while I was building my second version of the pedal I went back and forth about adding a button for "UNDO" but decided against it. I later found that it we really be useful but I didn't leave enough space for it. I ended up having to take the "programmers" way out and multitask the CLEAR button. Now I have it so that a short press triggers UNDO and a long press triggers CLEAR.

Beyond that, the only other consideration here is whether you want to use pedals or foot switches. I went with foot switches initially just for cost but I recently built a second board using pedals and found them much easier to use.

There are lots of options on Amazon but the ones I used are below.

Step 2: Arduino

In the instructable, rather than telling you to just by a manufactured Arduino board it list each component and has you build your own. In my opinion this is ridiculous given that a mfg board cost ~$10 on the internet so do yourself a favor and just go with that.

https://www.amazon.com/Elegoo-EL-CB-001-ATmega328P...

Now down to my first "gotcha". One important item that isn't discussed anywhere is how to create the sketch (code) for the Arduino which is pretty critical since the buttons wont do anything without this. So Im providing my code for you to use. Again, Im not going to walk you through step by step how to program the Arduino. If you go to their homepage they have plenty of tutorials on how to do that. If you are savvy enough then feel free to edit it however works best for you.

The Basics

  • The pedal has 8 buttons and 2 LEDs
  • A button press sends a MIDI command message from the Arduino
  • Buttons (While I'm describing each button's function, the Arduino code itself does nothing but send a MIDI command. the MIDI command must be tied to a script in Mobius which will be covered later)
  • Buttons consist of two groups
    • Global = Sends the same MIDI command regardless the mode
    • Mode-based = Sends different MIDI command based on the mode
  • Mode-based:
    • MODE = this button changes the "mode" of the pedal (Record / Play / Volume Control)
      • Short press toggles between Record and Play mode

      • Long press (more than 1 sec) goes to Volume control mode.

    • REC/PLAY
      • In REC mode = In RESET mode it will start the loop and close the loop on next press and go to Overdub mode. After that it toggles between Play and Overdub of the current track.
      • In PLAY mode = Unmutes and restarts all tracks
    • X / STOP
      • In REC mode = Applies "instant multiply" function to the current track.
      • In PLAY mode = Mute and Pause all tracks
    • TRACK 1/2/3
      • In REC mode = In RESET mode it will start the loop and close the loop on next press and go to Play mode. After that it toggles between Play and Overdub of the selected track.
      • In PLAY mode = Toggle between Mute and Play
      • In Volume Control mode = Track 2 cycles through the tracks, Track 1 reduces the output level (volume) of the current track by 5, Track 3 increases the output level of the current track by 5.
  • Global
    • RESET = applies "Global Reset" function
    • CLEAR
      • Short press (<1000ms) applies "UNDO" function to the current track
      • Long press (>=1000ms) applies "CLEAR" function to the current track
  • LEDs
    • REC LED = Red, on when in Record mode.
    • VOL LED = Blue, on when in Volume Control mode.
  • Pins
    • REC/PLAY = pin 3
    • RESET = pin 4
    • X/STOP = pin 5
    • CLEAR = pin 6
    • TRACK 1 = pin 7
    • TRACK 2 = pin 8
    • TRACK 3 = pin 9
    • MODE = pin 10
    • REC LED = pin 11
    • VOL LED = pin 12

Note: A community friend, Claudio, made some enhancement to the sketch and shared it back with us. Thanks, Claudio!

Step 3: The MIDI Interface

This is an area I feel wasn't cover very clearly in the other instructable. Basically, as discussed in the Arduino section, the pedal and Arduino just outputs a MIDI command based on the button pressed. In order to be used you need to send the MIDI to the PC running Mobius. I found 3 ways to do this and it's dependent on the type of audio interface you buy (more to come).

  1. Option 1 - Depending on what audio interface you buy, some have built in MIDI in/out ports. If this is the case then you can just follow the instructable and pull out the serial channel on the Arduino and connect it to the MIDI In port. You will then be able to select this as your MIDI controller source later when you setup Mobius
  2. Option 2 - My audio interface didn't have a built in MIDI port so this presented a challenge. So I initially pulled out the serial channel as in option 1 and purchased a separate MIDI-to-USB adapter. While this did work, I found it to be clunky and unreliable. Plus I was frustrated because this would be a 3rd USB connection and my PC only had two. I could disconnect the cable to the Arduino which I was using for power and debugging but that meant I would need an external power supply for it.
  3. Option 3 - I didn't understand why I couldn't get the MIDI commands over the USB connection and have the same connection power the Arduino. I knew there must be a way. After a lot of internet searching I finally found a way by using two freeware apps.
    • loopMIDI - Ironically named, this free apps enables you to create a "virtual" MIDI port on your PC. All you have to do is install it and define a virtual MIDI Out port and that's it. It will run automatically at boot up. https://www.tobias-erichsen.de/software/loopmidi.h...
    • Hairless MIDI - This program enables you to create a "serial bridge" so that you can map the serial COM port used to program your Arduino to the virtual MIDI port you just created with loopMIDI. And Whalla! You now only need a single USB connection from the PC to the Arduino. http://projectgus.github.io/hairless-midiserial/

    • NOTE: If you choose to use option 3 then you need to make sure that the Arduino code has the serial channel baud rate set to 38400 instead of the standard 31250 that MIDI uses.

    • // Set MIDI baud rate:

    • //Serial.begin(31250);

    • // Set baud rate to 38400 for Hairless MIDI

    • Serial.begin(38400)

Step 4: The Audio Interface

I will say now that this is probably the most important component that you will have to select. Since low cost was a key driver for me I looked for an inexpensive audio interface. I ended up settling on the BEHRINGER U-PHORIA UM2 (https://www.amazon.com/Behringer-UM2-BEHRINGER-U-P... ) which you can get from Amazon for ~$30 because it was low cost and had 2 input channels and 2 output channels which is all I needed. There are lots of options out there but it could slightly change the Mobius setup later.

Understand here that you do get what you pay for. While the UM2 does a great job for its price, I occasionally run into issues such as a random "pop" sound if I overdub too many layers or sometime get static and have to reboot the interface. So if you are serious about performing with this pedal then spring for a higher quality audio interface.

I really thought this would be the easiest part of the project but this ended up being the hardest problem for me to solve and almost resulted in me abandoning the project. When you first plug it in to your PC, Windows will automatically install a driver and you think you are set, right? Wrong. After I first set it up and starting recording tracks I found that the latency was so bad (more than a second) that the pedal was basically unusable. I had to be doing something wrong. Again, after a ton of internet searching I found the problem. Windows will install a default MME driver for the audio interface. When you read about these it says that they are very high latency and not suitable for real-time recording. What I had to do was go to the Behringer website and find the ASIO drive for my specific interface. ASIO drivers are specifically designs to minimize latency which is what you need here. After installing this driver the recording latency was not even detectable by the human ear. So the takeaway here is that whatever audio interface you use please make sure you get the ASIO driver from the manufacturer and save yourself the headache that I experienced.

Step 5: Mobius

Let's face it, without Mobius all we have so far is a MIDI controller pedal board. Mobius is a free software program created by Circular Labs (http://www.circularlabs.com/ ) that does all of the recording and looping. It's really an amazing program. That being said, the documentation from Circular Lab I found to be very lacking. After the install you get a window with 8 tracks and tons of buttons, meters, and counter. It took me a while to figure out how to navigate the GUI and configure it for me needs. Fortunately I found a youtube video posted by edsutcliffe that walks you through the configuration step by step.

After that, the only part of the setup that I had trouble with was mapping a certain input channel to a certain track. In the video, they are using a 4 channel interface and each channel shows up independently in Mobius. The UM2 interface that I used actually uses a single stereo channel and utilizes the right and left channels independently. So I only see 1 "channel" in mobius but I can map a single channel by moving the "Pan" setting all the way to the left or to the right. So I have track 1 and 2 with pan set all the way to the right so that only channel 2 (instrument) gets recorded. Then for track 3 I left pan in the middle so that I can record either the mic or the guitar on it. If I want to only record the mic then I would pan all the way to the left channel.

Step 6: Mobius Scripts and MIDI Bindings

The final piece of the puzzle is the Mobius scripts and MIDI bindings. Even though I'm very familiar for computer programming, I found the Mobius scripting language to be a little confusing and not well documented. It took me a long time and a lot of tweaking to get them the way a wanted but in the end they work for what I need.

Well that's it. Hopefully these tips will help you out with your build and you will be able to avoid the frustrations that I ran into.

Be the First to Share

    Recommendations

    • Trash to Treasure Contest

      Trash to Treasure Contest
    • Raspberry Pi Contest 2020

      Raspberry Pi Contest 2020
    • Wearables Contest

      Wearables Contest

    38 Discussions

    0
    ClaudioCas
    ClaudioCas

    5 months ago

    Dear Matt,
    I completed my prototype of midi pedalboard. I do several test and I had troubles with tempo. My loops didn't not stop (or start) at the right timing. I did a bit of research on you code and I discovered that you add a delay(30) at the end of the readButton procedure.
    You implemented a 3 position buffer for each button (to avoid false button press?) but a delay of 30ms each arduino loop introduce at least 90ms of delay to sending midi commands (and 90ms are a lot of time in a looping context).
    I commented the delay line and now Mobius react faster and I am able to record my first loop at right timing. Probably I need to add a "minimum retrigger time" to avoid false multiple, and so ignore button press if last command was sent before Xms...
    What do you think about that?
    Thanks
    Claudio

    0
    Mr-Monkey
    Mr-Monkey

    Reply 2 months ago

    Dear Claudio,

    I use your code but the long-pressed clear button doesn't send the midi command (1: control 18). Can you please check it? Thanks Sur

    0
    Mr-Monkey
    Mr-Monkey

    Reply 8 weeks ago

    Yes! Thank you!

    0
    MattJ134
    MattJ134

    Reply 5 months ago

    Hi and thanks for the comment. To be honest Im not 100% sure what my current timing is. I thought the 30ms delay was my latest code but I did a lot of experimentation to tweak the delay and number of samples that worked best for me. You are correct that the bit shifting is used for "debouncing" to eliminate false positives.

    The "millis()" command returns the current number of millisec since boot and is used in my "long press" logic. You can probably adapt that for a minimum retrigger time. Without any delay at the end of the loop the code will execute as fast as possible and increase the possibility of signal bounce.

    0
    ClaudioCas
    ClaudioCas

    Reply 5 months ago

    Dear Matt,
    thanks for your reply.
    I did a lot of code changes for myself but I also produce a strip down version with only the debounce code.
    Here you can find my upgrade to avoid bouce using millis() instead delay. The first press of a button now send immediatly the midi command, the other press before retrigger time are ignored.
    https://www.dropbox.com/s/z3vzhkgi7s0cuxy/looper_p...
    Let me know
    Claudio

    0
    MattJ134
    MattJ134

    Reply 5 months ago

    Claudio, I posted your Arduino sketch in the instructable. Thanks for giving back!

    0
    ClaudioCas
    ClaudioCas

    Reply 5 months ago

    Dear Matt, thanks. I fix a bug that I introduce in my sketch. I broke the long press on Undo, now I fixed it. The link is the same. Please update the instructable. Thanks a lot!

    0
    Mr-Monkey
    Mr-Monkey

    Question 2 months ago

    Dear Matt,

    I need your help to edit arduino file. I've made some changes on Mobius and Arduino; I changed to 4 tracks and move the LED to analog ports.

    I would like to add another function, I named it 'free/sync mode'. It will toggle between the default rec mode and the independent rec mod. This is the .mos of the independent rec mod.
    ## Free modus Track 1 ##
    !focuslock
    Track1
    if mode == reset
    Variable activeTrack trackNumber
    set input 127
    Record
    next

    message New Mode Free Record
    elseif mode == record
    Variable activeTrack trackNumber
    Overdub
    for *
    if trackNumber != activeTrack
    set input 127
    Mute
    endif
    next
    message New Mode Play
    elseif mode == overdub
    Play
    message New Mode Play
    elseif mode == play
    Overdub
    message New Mode Overdub
    elseif mode == mute
    Overdub
    message New Mode Overdub
    endif

    On the arduino I use pin 12 for the 'free/sync mode' toggle button between default rec mode and the free one. I also use A3 for the LED. Default state LED off and the Free state LED on.
    Could you please tell me how to handle the Arduino code?
    Thank you
    Cheers Sur

    Circuits Looper pedal 4 tracks 2 type syncs - Analog LED   Tinkercad.png
    0
    MattJ134
    MattJ134

    Answer 2 months ago

    Hi there. The audrino code does nothing more than send a midi command whenever a pedal is pressed. Since it looks like you are handling all the state changes in the mobius script then all you need to do is link the correct midi command from the pedal to the script in mobius as shown in the video above.

    If you are trying to add more buttons then just increase the array defines at the beginning with the new pin number. Then the array loop should handle the reset.

    0
    Mr-Monkey
    Mr-Monkey

    Reply 2 months ago

    Hi Matt,

    Thank you!

    0
    PasqualeM15
    PasqualeM15

    6 months ago

    Very nice tutorial thank you very much!
    I'm going now for a prototype of this setting, but I have already bought a separate MIDI-to-USB adapter, could you please show me how to set it on Mobius? I really can't figure it out.. I'm following the tutorial of edsutcliffe because it was the first Instructables I've seen, but you know, he has a different audio interface with a MIDI interface incorporated and the setup is a little bit different.
    Unfortunately I don't understand too much of electronics and I don't know if it's the Arduino's scripts that might be changed or some settings in Mobius, I even don't know which of the two MIDI connector ( IN or OUT ) I have to connect to my Arduino... :(
    I attach a screenshot of my MIDI Device Selection with the hope to be more clear.
    I really wish you can help me to figure it out because it's going to be frustrating to me..
    Thank you very much,
    Pasquale

    Schermata 2019-08-12 alle 19.54.11.png
    0
    MattJ134
    MattJ134

    Reply 6 months ago

    Hi! I didnt use a separate midi adapter but if its installed correctly then it should show up in the midi input box. So i think you should just have to select Midi-to-Usb 2.0 porta 1.

    0
    PasqualeM15
    PasqualeM15

    Reply 6 months ago

    Hi MattJ134 thank you very much for the quick reply! Unfortunately even when I selected Midi-to-Usb 2.0 porta 1 it didn't work! But now I will try to follow your instructions and the setup you used and I'm sure it will work!

    0
    ClaudioCas
    ClaudioCas

    Reply 6 months ago

    Hi Pasquale,
    have you setup Hairless Midi correctly? Check that the speed of the Hairless, arduino code and your operation system are the same.
    You should see blink hariless midi "virtual led" when push the buttons.
    Claudio

    0
    ClaudioCas
    ClaudioCas

    Question 6 months ago on Step 5

    Really nice work.
    May you upload also script for Undo and Clear? They are not included into mobius_scripts.zip. Thanks a lot.

    Btw, I had some issue with Hairless Midi. You make sure that the Baudrate is the same also into you COM port into device management of Windows... You can also choose different boud rate (I use standard boudrate of hairless midi 115200 and it works great)

    0
    MattJ134
    MattJ134

    Answer 6 months ago

    Hi and thanks for the feedback. I dont have scripts for undo and clear. If you look at the binding screen you can either bind to scripts or to built in mobius functions. Undo and clear already exist as mobius functions so just bind to them.

    0
    djwilliams0822
    djwilliams0822

    7 months ago

    When the laptop is turned off or battery dies do you have to restart everything or will it come up by itself?

    0
    MattJ134
    MattJ134

    Reply 7 months ago

    Well, I don't have a dedicated PC. I use my personal laptop so I have to start Mobius manually. However if you want it to start automatically that would just depend on how you configure windows on your PC.

    0
    ZoranP13
    ZoranP13

    9 months ago

    Great job mate!!! If you're willing to help I have a question for you. I have a diy footswitch midi controller with 8 buttons and I tried to upload your ino script. In my MIDI Monitor I'm getting invalid messages for every press of a button. The footswitch is based on chinese Arduino NANO, not on UNO :(
    Thanks,
    Zoki