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 StoreLoopy Pro is your all-in-one musical toolkit. Try it for free today.
Comments
Thanks @TheOriginalPaulB
in fact updating pad labels is not a priority. It would be fine to have display numeric variables only.
You could also have a visual match with the color and flashing of the Mozaic pad itself.
Good idea. Anything that doesn’t involve the need to build strings would probably lead to less frustration.
Map between AUM or Audiobus and a Launchpad mk3. So the Ableton ‘session mode’ of mixing sliders, sends and returns, mutes, and solos is possible.
I.e. https://github.com/git-moss/DrivenByMoss-Documentation/blob/master/Novation/Novation-LaunchkeyMiniMk3.md
I can help.. testing (and a bit of coding).
Here is the code
@OnLoad
ShowLayout 0
@End
@OnMidiInput
SendMIDIThruOnCh 1 // send everything to channel 2
@End
@OnMidiNoteOn // when Note On Velocity received do the following
@End
@OnMidiCC // if there are MIDI CC then...
@End
@GeeBee You can make the code of your post more readable if you ‚edit‘ it again and add three backticks before and three more after the code.
Backticks `are not easy to input on IOS, the simplest way to get 6 of them is by using the forums edit menu, open the Paragraph popdown (left of the smiley popdown) and press three times ‚Code‘ , Now you could select three of them and move them to the end of your listing. This creates an indented code block.
.
BTW: Your mp3 example was wonderfull - and if i understood correclty, you played the GeoSax using a guitar running through midiguitar to get midi notes from the audio and then additionally modified the midi using the above script to convert the expressions. Very cool![:) :)](https://forum.loopypro.com/resources/emoji/smile.png)
Works a treat, if only I’d spotted the SendMIDIThruOnCh, i might have saved myself a right nightmare... I’ll update my chord one with that!
Cheers
Thank you for the compliments. The way you describe it, is the way I'm doing it. Just to clarify, the guitar is played live and there is no post editing whatsoever. I am really surprised on how well the Midi Guitar 2 iPad app tracks the string vibrations and converts them into midi data. ( Thanks for the tip on backtics i will try it out ...)
Code for the MidiGuitar 2 converterto play GeoSax SWAM ( with the backtics)
REQUEST FOR SCRIPT: make a script that toggles rhythmic CC's to make a Channel in AUM "glitch" creating a rhythmic pulsing sound (like Perforator).
Converting MIDI notes to CC 127 and 0 events.
NOTE ON -> CC = 127 (or some settable level via variable or knob)
NOTE OFF -> CC = 0 (or some settable level via variable or knob)
If it exists or a script could be tweaked for this behavior.
Ready... set... code!
This is what it does to an audio track.
1. 7 seconds of Perfomatic processed audio
2. after 7 seconds the DrumComputer source is added to the mix
3. at the 20 second period you can hear the audio source without "holes"
4. then ending with just perfomatic audio.
Hello everybody: I would need a simple script to do the following:
When I play a given note ( say E1 for sake of argument ) I need to send a CC command ( say # 20 ) with a speed of 127 , to turn on a parameter and when I play that same note again later , send the same CC with speed 0 , to turn off the parameter. ( I tried several alternatives but only manage to get the "turn on " command, I gave up on turning it off ). Thanks in advance !!
If you copy your script to this thread it will be easy to suggest the right changes to make the CC toggle with each Note input. It just takes a "state variable" so each input gets switched to send the correct statement to toggle the CC value between 127 or 0.
You and a lot of lurkers will learn a very common programming pattern i Mozaic. That's the "teach a man to fish" model that's more powerful than the
"give a man a fish" which is how PatchStorage works. PatchStorage is good for 9 course meals of fish, fowl, veggies, dessert, vino and a cigar.
Your ask is a simple trout. You're very close to having written it all if you have the ON case solved.
Thank you very much, here it goes:
I haven't tested this yet... But someone will correct me if I mess up.
@GeeBee That GeoSax track played on a guitar is mind-bendingly good. If I hadn't read how it was generated, I'd have no idea that it wasn't a real sax.
Thank you very much ( I also posted another sample track in Youtube
). I am still working on the Mozaic plugin to see if I can improve some of the functions to be able to give the sound even more dynamics.
Impressive! Would love to get a screen shot of the MG settings. Obviously you have a good enough ear to understand what sax phrasing sounds like.
Ok, thank you very much. I gave it a couple of runs but there's some trouble.
I had to replace the "elseif" for an "else" , and also changed "SendMIDI" to "SendMIDICC".
However what I get is that it does send the "ON" command alright when I play key 40 but then inmediately after it sends the "OFF" command. So it does not work as intended.
So I changed the original "if MIDINote = 40 " for "if MIDICommand = 144, 40" , in this way it only responds to the Note On message each time , and it switches alternatively from "YES" to "NO" only when it gets the Note On message. Here is the complete code which I tested and works as intended.Thank you very much for the help and also for the learning. Cheers
Feels pretty cool, right? That's what become addicting. Solving problems and making
re-usable, shareable tools. Since it worked out... I'm glad I had errors in my solution.
You learn a lot more when you found the right statements to enforce the toggle and the
event detection.
I started a tutorial thread that you could follow to pick up more cool tricks.
https://forum.audiob.us/discussion/36604/learn-to-program-the-mozaic-workshop-to-create-midi-fx-and-controllers-you-could-learn-something/p1
You only need one SendMIDICC call.
@OnLoad
ccval = 127
@End
@OnMidiNoteOn
if (MIDINote = 40)
SendMIDICC 1, 20, ccval
if (ccval > 0)
ccval = 0
else
ccval = 127
endif
endif
@End
Thanks........I think I claimed victory too fast. The " if MIDICommand = 144 , 40" triggers when ANY Note On is played , not only when I play note 40 . So I had to replace it for:
"if MIDICommand = 144 and MIDINote = 40 "
Thanks again and I'll take a look at the thread
@GeeBee
Try changing back to McD's version, but with your changes of 'else' instead of 'elseif' and 'SendMIDICC' instead of 'SendMIDI'
Then change '@OnMidiInput'
to '@OnMidiNoteOn'
The version that was turning on and off immediately was because '@OnMidiInput' gets called for both NoteOn and NoteOff events. So the CC was going to 127 when you pressed down on the note, and then switched to 0 when you let off the note. Using @OnMidiNoteOn event avoids that problem, gets called only when you press down on the note, not when you let up.
EDIT: Whoops, just noticed your previous post where you're checking for MIDICommand = 144 in @OnMidiInput event. That should work, too, but making use of the separate event for @OnMidiNoteOn events only can make your code a little cleaner, no need to check for command type because only Midi On events get into @OnMidiNoteOn event.
You may also want to retain @OnMidiInput, unless somewhere else in your code you're sending midi thru:
On another issue:
I am using the following command to send Channel Pressure ( on Ch 2) with attenuated pressure values so it does not fade away so quickly
" SendMIDIOut 0xD1, TranslateCurve MIDIByte3 , 0.3 ,0 ,127 "
(The MIDIByte3 is a value I get from the Aftertouch message).
The TranslateCurve does the job of attenuating ( stretching ) the values but it starts at , say, 127 and drops gradually to 41 and stops at that value. That is, it does not go all the way down to 0. If I change the curve parameter from 0.3 to , say, 0.6, then the pressure values start also at the highest values, say 127, but drop to 13 and get stuck at that level and take a shorter time to do so. It is only when I use the curve parameter of 1 that the pressure values go all the way down to zero, but then , at this value the drop from 127 to 0 is very fast and defeats the purpose ( or at leas the idea that I have to make the Channel Pressure last longer )
In other words, I must be mistaken.......I understood that TranslateCurve would let you "stretch" the timing from the moment a value hits 127 ( or the highest input value ) and goes down to zero. What is it that I am missing ( or am I misusing the TranslateCurve instruction ).
Thanks, I did play a bit of alto sax some time ago, but not enough to sound good. Then i discovered the combination of the Akai EWI and the Audio Modelling Sax Brothers, and have been playing mostly that over the past couple of years. But since i also play some guitar i decided to give it a try to Jam Origin's Midi Guitar software and see what could![](https://forum.audiob.us/uploads/editor/8k/czqlot8wlwgs.png)
come out with the new Geoshred SWAM Tenor Sax. I think that if you listen to some jazz sax music you can easily get the idea of the phrasings and nuances. Just experiment fooling around with the guitar and sooner than later something pleasant can come out. I even combined the whole set with a Mozaic Patch that forces notes into a given scale and you can basically play any note on the guitar at a blazing speed .....and it will sound in tune. It's fun.
Regarding the settings ,here I post a screen shot of mine, but be aware that they depend on the output of your guitar and the output of your interfase....so you will need to adjust the gain and noise gate accordingly (trial and error).
Thank you. Yes , to be honest, I am using like three or four plugins in parallel, because I am using the note velocity and/ or the aftertouch to drive different parameters..... and, since MIDI seems to be linear , I have not found a way of sending one MIDI data simultaneously to drive two actions on the same script. So, although very primitive, I program several of these individual plugins each one doing its own thing and place them all in parallel in AUM. One of them, as you point out, is the one that sends the MidiThru. When I finish the whole thing and I am satisfied as it sounds I'll post the scripts and instructions in Patchstorage.com
What is it that you want to accomplish that you feel you can’t because of MIDI’s sequential nature?
I am still working on the project , but this is a script to use the data coming out from Jam Origin's MidiGuitar 2 to be able to play the SWAM Tenor Saxophone on Geoshred. If you look on this thread I already managed to work out some solution and it works fairly well , but I keep experimenting to see if I can get more control over the sounds. Basically I get three streams of data from the MidiGuitar app. Note Velocity, Aftertouch and PitchBend , all routed thru Ch 1. On the other hand the Tenor Sax physical model has an Expression setting which is driven by Channel Pressure , it has a "Formant" sound parameter driven by CC20, Growl driven by CC22 and Flutter by CC21. Then the Geoshred app has tons of other instruments to play with, but they do not necessarily share the same midi commands to shape the sounds , some have over 20 parameters. Obviously it gets to a point where you have to be selective and cannot pretend to handle in real time that many variables just to shape a sound. So you have to settle on 3 or 4 or 5 of them and, to use them with the MidiGuitar software , they have to be driven with either Note Velocity , Aftertouch or Pitchbend. ( I hope you follow the explanation so far )
All of this means that sometimes you might want to use Note Velocity to drive two or three commands simultaneously, say, Channel Pressure, CC113 and CC24 , or use the Aftertouch data for CC1 and CC20, or even get the Pitchbend info and send it to CC 25 and CC 27 , etc......I hope you get the idea. But all of this has to be done simultaneously . I tried to do it sequentially and for some reason it does not work or it is erratic at best. Either the information does not go through ( which I recon might be an issue of programming - I only started learning to code last week - ) or if it goes through it doesn't modify the sound in a timely fashion ( I get all sort of artifacts ).
I keep working on it and so far the quickest and dirtiest solution was to have a module for each of the parameters i want to modify an run them in parallel so there are no glitches........let's say its a modular approach. When I eventually have a satisfactory arrangement I think I will ask for some help to put it together in only one script ....if it is possible.
@GeeBee
Note velocity only occurs on note inception, so it is not suitable for translating to continuous controller data such as you’d need for a lot of the parameters you mentioned. Aftertouch (not sure how that’s generated from a guitar input) and pitchbend are suitable for continuous controllers, but conversely, are not typically available at note inception. It sounds like you’ll need a lot of flexibility to cater for and be able to experiment with all your case scenarios.
I would recommend you use the 22 knob template, with each knob dedicated to a different output controller, CC20, CC22, etc., and have 4 possible settings on each knob for the input data, velocity, aftertouch, pitchbend and OFF. That way you can process the input data how you like for each SWAM instrument and try different configurations, etc.
On a related topic, I wrote a script for adding poly aftertouch to a MIDI stream. Any notes being played were dynamically assigned to faders until they stopped playing. Moving a fader applies poly aftertouch to the associated note. It works, for slow chordal parts where I want to highlight different notes over the duration of each chord, but it’s a bit of a kludge.
Hi @wim , I hope you are having a good holiday. Did you have time to get your hands on this? My head keeps banging against useless attempts.
Request. ‘CC’ before ‘note on’ fix for the BopPad.
Issue: the radius CC gets sent after the note on on the BopPad. So the radius position is heard on the subsequent note strike.
Fix: change the note on/off order of the midi
from:
to:
thanks!