Loopy Pro: Create music, your way.

What is Loopy Pro?Loopy Pro is a powerful, flexible, and intuitive live looper, sampler, clip launcher and DAW for iPhone and iPad. At its core, it allows you to record and layer sounds in real-time to create complex musical arrangements. But it doesn’t stop there—Loopy Pro offers advanced tools to customize your workflow, build dynamic performance setups, and create a seamless connection between instruments, effects, and external gear.

Use it for live looping, sequencing, arranging, mixing, and much more. Whether you're a live performer, a producer, or just experimenting with sound, Loopy Pro helps you take control of your creative process.

Download on the App Store

Loopy Pro is your all-in-one musical toolkit. Try it for free today.

Any midi app to reverse expression pedal data?

Hello, I'm looking for a midi tool to reverse the cc data from an expression pedal, to convert from 0-127 to 127-0. Anything out there would do the job? Preferably AuV3, but not critical.

This is for an M-vave chocolat 4 button foot switch, which is great apart from its curiously backwards expression pedal. I've tried rewiring my cable, that didn't work. so I was hoping there might be a midi plugin that could do it?

Comments

  • edited December 2022

    Many plugins can do it.
    Streambyter, Mozaic, Drambo, ...

    The M-wave is a cool device, never seen it before!

    In Drambo, it's as simple as this, and you can fine tune the response curve in Graphic Shaper if you like:

  • And if you are controlling AU parameters, most hosts can reverse the response in the midi mapping setup :

  • @rs2000 thank you, I have Drambo so I'll give that a go. I have Streambyter, but couldn't work out how to do it and in Mozaic I've not been brave enough to try :)

    It also looks like Midiflow will do it (cc input/output value remapping), but that's £5.99 plus a £3.99 IAP and I don't have that one (yet).

  • edited December 2022

    @espiegel123 said:
    And if you are controlling AU parameters, most hosts can reverse the response in the midi mapping setup :

    Thank you. Specifically I want to control the Wah in Thu (so yes AUv3, but using it's own internal mapping). I was having a look in AUM as I thought I'd seen ways to reverse things previously, but I didn't find it - I'll go and have another dig - off down another hole :)

  • @steve99 said:

    @espiegel123 said:
    And if you are controlling AU parameters, most hosts can reverse the response in the midi mapping setup :

    Thank you. Specifically I want to control the Wah in Thu (so yes AUv3, but using it's own internal mapping). I was having a look in AUM as I thought I'd seen ways to reverse things previously, but I didn't find it - I'll go and have another dig - off down another hole :)

    Aha - top tip - just loaded the new (and free) Nembrini Wah in AUM and I can see on the channel midi mapping that I can reverse the midi. Shame I can't access the parameters for Thu in AUM, but the arrival of the Nembrini wah has met a long held desire, so not complaining.

  • @steve99 said:

    @espiegel123 said:
    And if you are controlling AU parameters, most hosts can reverse the response in the midi mapping setup :

    Thank you. Specifically I want to control the Wah in Thu (so yes AUv3, but using it's own internal mapping). I was having a look in AUM as I thought I'd seen ways to reverse things previously, but I didn't find it - I'll go and have another dig - off down another hole :)

    In the aum, tap on the parameter mapping and change 0 to 100 to 100 to 0.



  • McDMcD
    edited December 2022

    This sounds like a job for the free Streambyter MIDI FX app.

    Can someone provide the StreamByter instructions to convert the value?

    The MIDI Spec says expression is CC=11.

    For a non-free solution Mozaic can do this too:

    @OnLoad
    
    @End
    
    @OnMidiCC
    
      // MidiByte2 holds the CC Number so we look for “11”
      // MidiByte3 holds the pedal position 0-127
    
      if MidiByte2 = 11
        // this will flip a 127 to a zero and a zero to a 127 and convert all in between values
        Reverse = (127 - MidiByte3)
        // after confirming it’s working comment this next line out with //
        Log {MidiByte2=}, MidiByte2, { MidiByte3=}, MidiByte3, { Reverse=}, Reverse
      endif
    
      SendMidiCC MidiChannel, MidiByte2, Reverse
    
    @End  
    
  • For streambyter, the math you need to implement is

    InvertValue is 127 - oldValue

  • Here is the streambyter for inverting cc 16

    IF M0 == B0 $16
    MATH M2 = $127 - M2
    END

  • @McD @espiegel123 thank you enormously, I will try both of those and educate myself along the way.

    @rs2000 I've replicated your Drambo setup to the best of my current ability, I have midi going in and out (from and to AUM) via the shaper, with the triangle the same shape as yours - but my vertical value bar is still going from high to low across the shaper (as I would perhaps expect) and my wah pedal still backwards, so it's not modifying the value. Any tips? I can send screenshots, but don't want to overly burden you with my Drambo ignorance (though I'd love to be enlightened).

    Anyway, great response, thanks people.

  • @steve99 said:
    @McD @espiegel123 thank you enormously, I will try both of those and educate myself along the way.

    @rs2000 I've replicated your Drambo setup to the best of my current ability, I have midi going in and out (from and to AUM) via the shaper, with the triangle the same shape as yours - but my vertical value bar is still going from high to low across the shaper (as I would perhaps expect) and my wah pedal still backwards, so it's not modifying the value. Any tips? I can send screenshots, but don't want to overly burden you with my Drambo ignorance (though I'd love to be enlightened).

    Anyway, great response, thanks people.

    Wait, if the vertical bar in G. Shaper goes from high to low then it's following the expression pedal correctly. Most likely you just have to add a MIDI Out module and make sure the pedal ONLY sends MIDI data to Drambo, not AUM.

  • Here's a small update on the StreamByter script. It applies to CC #11, and it will work on any MIDI channel. The $## in StreamByter denotes a decimal value, since the default coding is hexadecimal. Note that StreamByter passes any other MIDI messages through by default.

    #ReverseExpression
    
    If MT == B0      # handle CC on any MIDI channel
       If M1 == $11      # process CC #11
          Mat M2 = $127 - M2
       End
    End
    
  • Does the documentation for the pedal disclose the CC value it’s using? In the MIDI spec, CC=11 is intended to be used as a percentage of Volume (like a master volume knob overlayed on a track volume slider). I’d expect a way pedal to use one of the
    MIDI Filter CC’s like CC=84. Getting the right value is critical to any of these methods.

    I suspect Streambyter might have a logging capability. (I think I need to get back into attempting to master Streambyter for these little filter/convert/monitor tasks. The code is somewhat cryptic but everyone can use “free” if they can master Cut and Paste. Both Safari and Chrome are acting very strange with “select text” touches with one of the end points jump wildly around the page. It’s always something frustrating the intent to simplify complex instructions.

  • @uncledave said:
    Here's a small update on the StreamByter script. It applies to CC #11, and it will work on any MIDI channel. The $## in StreamByter denotes a decimal value, since the default coding is hexadecimal. Note that StreamByter passes any other MIDI messages through by default.

    #ReverseExpression
    
    If MT == B0      # handle CC on any MIDI channel
       If M1 == $11      # process CC #11
          Mat M2 = $127 - M2
       End
    End
    

    This code is the equivalent of what I posted I believe , other than the choice of a different CC number.

  • McDMcD
    edited December 2022

    Yes… StreamByter has a Monitoring window invoked by the Magnifying Glass icon. Here in this image it’s showing that the CC# incoming is a CC=1 (Ctl Num).

    The CC_is 1 [log] output comes from me using a Log statement in my StreamByter script:

  • @espiegel123 said:

    @uncledave said:
    Here's a small update on the StreamByter script. It applies to CC #11, and it will work on any MIDI channel. The $## in StreamByter denotes a decimal value, since the default coding is hexadecimal. Note that StreamByter passes any other MIDI messages through by default.

    #ReverseExpression
    
    If MT == B0      # handle CC on any MIDI channel
       If M1 == $11      # process CC #11
          Mat M2 = $127 - M2
       End
    End
    

    This code is the equivalent of what I posted I believe , other than the choice of a different CC number.

    Yes, but your code only works for MIDI channel 1, it requires M0 to exactly match B0. The MT variable is M0 with the channel number masked out, so MT matches B0 when the CC is on any channel. I thought it might be useful in case the OP has multiple MIDI controllers set to different channels.

  • @uncledave said:

    @espiegel123 said:

    @uncledave said:
    Here's a small update on the StreamByter script. It applies to CC #11, and it will work on any MIDI channel. The $## in StreamByter denotes a decimal value, since the default coding is hexadecimal. Note that StreamByter passes any other MIDI messages through by default.

    #ReverseExpression
    
    If MT == B0      # handle CC on any MIDI channel
       If M1 == $11      # process CC #11
          Mat M2 = $127 - M2
       End
    End
    

    This code is the equivalent of what I posted I believe , other than the choice of a different CC number.

    Yes, but your code only works for MIDI channel 1, it requires M0 to exactly match B0. The MT variable is M0 with the channel number masked out, so MT matches B0 when the CC is on any channel. I thought it might be useful in case the OP has multiple MIDI controllers set to different channels.

    I see. I assumed the person would change the comparison to whatever they need. I should have clarified in the comment.

  • @uncledave said:

    @espiegel123 said:

    @uncledave said:
    Here's a small update on the StreamByter script. It applies to CC #11, and it will work on any MIDI channel. The $## in StreamByter denotes a decimal value, since the default coding is hexadecimal. Note that StreamByter passes any other MIDI messages through by default.

    #ReverseExpression
    
    If MT == B0      # handle CC on any MIDI channel
       If M1 == $11      # process CC #11
          Mat M2 = $127 - M2
       End
    End
    

    This code is the equivalent of what I posted I believe , other than the choice of a different CC number.

    Yes, but your code only works for MIDI channel 1, it requires M0 to exactly match B0. The MT variable is M0 with the channel number masked out, so MT matches B0 when the CC is on any channel. I thought it might be useful in case the OP has multiple MIDI controllers set to different channels.

    Thanks again everyone - I generally use CC4 on a few different programmable expression controllers, as I have one that defaults to that and can’t be changed (Melo audio / Harley Benton mp100), but I get the flow of the previous posts, so can adapt as required.

  • While we’re loosely on the topic, the Mvave chocolat may go backwards, but it does have a nice smooth response to the expression pedal, that’s why I’m keen to use it.

    I also have the much more expensive (mercifully not too bad on eBay) Xsonic Airstep, but the expression on that is very steppy and so unusable for wah. Very disappointing for what’s marketed as a high end device.

  • @rs2000 said:

    @steve99 said:
    @McD @espiegel123 thank you enormously, I will try both of those and educate myself along the way.

    @rs2000 I've replicated your Drambo setup to the best of my current ability, I have midi going in and out (from and to AUM) via the shaper, with the triangle the same shape as yours - but my vertical value bar is still going from high to low across the shaper (as I would perhaps expect) and my wah pedal still backwards, so it's not modifying the value. Any tips? I can send screenshots, but don't want to overly burden you with my Drambo ignorance (though I'd love to be enlightened).

    Anyway, great response, thanks people.

    Wait, if the vertical bar in G. Shaper goes from high to low then it's following the expression pedal correctly. Most likely you just have to add a MIDI Out module and make sure the pedal ONLY sends MIDI data to Drambo, not AUM.

    That cracked it, thanks. I had the midi out enabled on the Drambo track. I disabled that and added the midi output module as illustrated in your pic. Now the pedal is reversed and going the right way when the Drambo midi out is routed to Thu in AUM.

  • edited December 2022

    Deleted post, incorrect solution.

  • @McD said:
    This sounds like a job for the free Streambyter MIDI FX app.

    Can someone provide the StreamByter instructions to convert the value?

    The MIDI Spec says expression is CC=11.

    For a non-free solution Mozaic can do this too:

    @OnLoad
      
    @End
    
    @OnMidiCC
    
      // MidiByte2 holds the CC Number so we look for “11”
      // MidiByte3 holds the pedal position 0-127
    
      if MidiByte2 = 11
        // this will flip a 127 to a zero and a zero to a 127 and convert all in between values
        Reverse = (127 - MidiByte3)
        // after confirming it’s working comment this next line out with //
        Log {MidiByte2=}, MidiByte2, { MidiByte3=}, MidiByte3, { Reverse=}, Reverse
      endif
    
      SendMidiCC MidiChannel, MidiByte2, Reverse
    
    @End
    

    This works beautifully, thank you. Can you help me get it to allow the other CC’s to pass through unmodified? I’m getting to the point i can read a Mozaic script, but not quite up to writing into one just yet.

    So that’s Drambo and Mozaic doing well, now for Streambyter…

  • @uncledave said:
    Here's a small update on the StreamByter script. It applies to CC #11, and it will work on any MIDI channel. The $## in StreamByter denotes a decimal value, since the default coding is hexadecimal. Note that StreamByter passes any other MIDI messages through by default.

    #ReverseExpression
    
    If MT == B0      # handle CC on any MIDI channel
       If M1 == $11      # process CC #11
          Mat M2 = $127 - M2
       End
    End
    

    That was the easiest one of all, typical I should tackle them in reverse order of difficulty. Still, some good time spent at ABF university with universally useful results. The streambyter script allows the CCs for my footswitches to pass through with no additional setup.

    Also, in a break with current fashion, i believe this is the one that will work best standalone (streambyter as a Midifire module) for those times i just want to play some wah guitar in Thu without getting sucked in to all the distractions on offer in an AUv3 host (AUM or loopy).

    @rs2000 @espiegel123 @McD @uncledave , couldn’t have achieved any of this without you. Cheers.

  • This Mozaic will pass the other CC#s. The problem was that "reverse" was undefined for CCs other than 11. However, it will still block any other MIDI messages (notes, program change, etc.).

    @OnLoad
    @End
    
    @OnMidiCC
       reverse = MIDIByte3 
       if MIDIByte2 = 11
          reverse  = 127 - MIDIByte3 
       endif
    
       SendMIDIOut MIDIByte1, MIDIByte2,  reverse 
    @End 
    
  • An alternative, to pass all other midi messages unmodified:

    @OnLoad
    invertCC = 11
    @End
    
    @OnMidiInput
       if (MIDICommand = 0xB0) and (MIDIByte2 = invertCC)
          SendMIDIOut, MIDIByte1, MIDIByte2, (127 - MIDIByte3) 
       else
          SendMIDIThru
      endif
    @End 
    
    @OnSysex
      SendSysexThru
    @End
    
    
  • @wim @uncledave great, thank you, will put them to work. I did actually end up playing some guitar last night, just a simple MidiFire (StreamByter reversing the Mvave expression pedal) and Thu setup…. Very straightforward, some meditative wah-wah-ing and Fx toggling…Then I started playing round with the Thu looper… going to need more foot switches, oh here we go again :)

  • wimwim
    edited December 2022

    @steve99 said:
    @wim @uncledave great, thank you, will put them to work. I did actually end up playing some guitar last night, just a simple MidiFire (StreamByter reversing the Mvave expression pedal) and Thu setup…. Very straightforward, some meditative wah-wah-ing and Fx toggling…Then I started playing round with the Thu looper… going to need more foot switches, oh here we go again :)

    Be careful not to get too carried away with that playing stuff. Remember, the goal is to spend as much time as possible configuring apps, running down strange problems, and if possible developing scripts. A little music making here and there for a change of pace is fine, but don't let it lead you too far astray.

  • @wim said:

    @steve99 said:
    @wim @uncledave great, thank you, will put them to work. I did actually end up playing some guitar last night, just a simple MidiFire (StreamByter reversing the Mvave expression pedal) and Thu setup…. Very straightforward, some meditative wah-wah-ing and Fx toggling…Then I started playing round with the Thu looper… going to need more foot switches, oh here we go again :)

    Be careful not to get too carried away with that playing stuff. Remember, the goal is to spend as much time as possible configuring apps, running down strange problems, and if possible developing scripts. A little music making here and there for a change of pace is fine, but don't let it lead you too far astray.

    Indeed - I’ve shot no end of trouble, but I still don’t know how anything actually works :)

Sign In or Register to comment.