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.

Show 'n Tell: Raspberry Pi BLE Midi Bridge Thingy

123578

Comments

  • @wim I gave up on using SunVox on the Pi way back in 2016 when I realized how much better my iPhone 6 was than my Pi 2 for SunVox. I doubt I’ll try it on the Pi 4 as it’s probably better than Pi 2, but I’m sure my 2012 Mac, 2017 iPad Pro, probably Air 2, and iPhone 8 are much better running it.

    If I find another project worth trying, I’ll post about it. There definitely are some projects out there, though many are kind of sub-par synths or just using Soundfonts, etc. I may even set up Samplerbox, as the Pi 2 can do that without issues, unlike the more modern Pis. Really with these Volcas having a sample player may not be a bad idea. I have the original 3, so it’s all analog.

    Let us know how that Midi Logger goes, hopefully it does the trick for you. MIDI is usually over some kind of sequence with Pulses per Quarter Notes (PPQ) subdivisions. I’m not sure how free form MIDI with no timetable will work when played back or recorded.

  • heshes
    edited November 2020

    @DMan said:
    There definitely are some projects out there, though many are kind of sub-par synths or just using Soundfonts, etc.

    Not sure if it's been mentioned in this thread already, but Orac is one of the projects out there that runs on the RPi.
    Github page: https://github.com/TheTechnobear/Orac

    Youtube video:

  • Good point @hes, Orac also has a preset sharing section on https://patchstorage.com/platform/orac/

    The RPI also runs PureData, there are tons of patches available on forums and dedicated web sites.

  • We have Orca and Orac. We just need a Cora, Roca ...

  • @wim said:
    We have Orca and Orac. We just need a Cora, Roca ...

    They do have the same Coar though...

  • 😄🙄😂

  • @wim a github page for

    orac-control-web

    Web client for the ORAC synth to be run on the Raspberry PI. Installation tested and designed to work out of the box on the Patchbox OS. Web client also includes UDP OSC <-> Socket.IO bridge and simple static file server. It runs on the rPi, next to the ORAC, so all you need is a web browser essentially. Application is designed to be mobile-friendly.

    https://github.com/dsedleckas/orac-control-web

  • edited November 2020

    @rs2000 said:

    @wim said:
    We have Orca and Orac. We just need a Cora, Roca ...

    They do have the same Coar though...

    I have only looked into Orac at the moment, but if it’s anything like in the wild Orca are the real killers.

  • wimwim
    edited November 2020

    @audiblevideo said:
    @wim a github page for

    orac-control-web

    Web client for the ORAC synth to be run on the Raspberry PI. Installation tested and designed to work out of the box on the Patchbox OS. Web client also includes UDP OSC <-> Socket.IO bridge and simple static file server. It runs on the rPi, next to the ORAC, so all you need is a web browser essentially. Application is designed to be mobile-friendly.

    https://github.com/dsedleckas/orac-control-web

    Thanks, that’s great stuff, but Orac probably needs more than a pi zero, which is very minimal, and has no native audio out other than over HDMI.

  • I've been looking for this for aaaaaages.

  • @ashh said:
    I've been looking for this for aaaaaages.

    Let me know if you run into any problems setting it up. I'll try to help.

  • @wim said:

    @ashh said:
    I've been looking for this for aaaaaages.

    Let me know if you run into any problems setting it up. I'll try to help.

    You are such a gent. :)

    Use case? Well, a kind of desk tidy in my head. I want MIDI inputs for the ipad and I knew it was possible on the Pi if I just got a USB Hub or Host but that was yet another piece of kit hanging around on my desk with only one use. Like having a different peeler for every bit of fruit and veg in my kitchen instead of a knife. Not gonna happen.

    Yes, this will be a single use thing but it could have more!

  • @wim: do you have a cheat sheet of useful terminal commands on the rpi to check out the MIDI connections made by the Raspberry Pi Bluetooth setup or make custom connections? To date, it has worked flawlessly (i am just using the basic setup provided by Neumastudios)

    I am asking because, it works perfectly with my LaunchKeyMIDI but when I plug in a LaunchPad X, I don't receive any MIDI data that I'd expect. It makes me wonder if one of the Novation drivers isn't connecting.

    I was able to ssh into the raspberry pi and ran the aconnect -l command

    It lists the launchpad as client 20 and has two 'sub-clients' listed '0' and '1'. 0 connects to bluetooth MIDI but the other shows no connections. I am wondering if on the Launchpad the 'DAW' driver is the 0 and the other is the plain MIDI port (which would be the opposite of how the Launchkey's ports work.

    I wonder if there is a way to force '20.1' to make a connection.

    Thoughts?

    Here is the aconnect listing:

  • @espiegel123 said:
    @wim: do you have a cheat sheet of useful terminal commands on the rpi to check out the MIDI connections made by the Raspberry Pi Bluetooth setup or make custom connections? To date, it has worked flawlessly (i am just using the basic setup provided by Neumastudios)

    I am asking because, it works perfectly with my LaunchKeyMIDI but when I plug in a LaunchPad X, I don't receive any MIDI data that I'd expect. It makes me wonder if one of the Novation drivers isn't connecting.

    I was able to ssh into the raspberry pi and ran the aconnect -l command

    It lists the launchpad as client 20 and has two 'sub-clients' listed '0' and '1'. 0 connects to bluetooth MIDI but the other shows no connections. I am wondering if on the Launchpad the 'DAW' driver is the 0 and the other is the plain MIDI port (which would be the opposite of how the Launchkey's ports work.

    I wonder if there is a way to force '20.1' to make a connection.

    Thoughts?

    Here is the aconnect listing:

    Answering my own question.

    To manually make the connection, one issues the following command (assuming the port numbers in the screenshot)
    aconnect 20:1 128:0

    Now, I need to figure out a way to modify the automatic connection script so that the second port connects. It appears that the automatic connection script only connects the first port.

  • @espiegel123 said:

    Now, I need to figure out a way to modify the automatic connection script so that the second port connects. It appears that the automatic connection script only connects the first port.

    Mine has been working great still. I only use it with one MIDI device though. My name eventually reverted back to the hexadecimal name on it’s own by the time I connected to my new Mac. The original iPad I was using still has the name I chose. My second iPad has the hexadecimal name again. I don’t care as long as it works.

    When I was first setting it up and testing before I even had bluetooth working, it was definitely auto connecting more than one MIDI port. I had my PC-300 Roland keyboard and either Novation Circuit, or maybe I did LaunchControl and it auto routed everything just fine. I’m not sure what is going on with yours. I suppose I could check if mine is working with more than one device, but I have it configured so I just plug in a small battery pack and everything gets powered. I’ll have to get some USB hubs etc to check.

  • @DMan said:

    @espiegel123 said:

    Now, I need to figure out a way to modify the automatic connection script so that the second port connects. It appears that the automatic connection script only connects the first port.

    Mine has been working great still. I only use it with one MIDI device though. My name eventually reverted back to the hexadecimal name on it’s own by the time I connected to my new Mac. The original iPad I was using still has the name I chose. My second iPad has the hexadecimal name again. I don’t care as long as it works.

    When I was first setting it up and testing before I even had bluetooth working, it was definitely auto connecting more than one MIDI port. I had my PC-300 Roland keyboard and either Novation Circuit, or maybe I did LaunchControl and it auto routed everything just fine. I’m not sure what is going on with yours. I suppose I could check if mine is working with more than one device, but I have it configured so I just plug in a small battery pack and everything gets powered. I’ll have to get some USB hubs etc to check.

    It works fine with multiple devices for me. The issue is that some devices publish multiple separate ports. The autoconect script only connects the the first port of a device and ignores the other. Both the launchkey and launchpad publish two ports one of which is the regular midi from the device and the other is for MIDI that controls the Launchkey or Launchpad.

    On the Launchkey, that is fine because it’s first port is the normal midi port. The problem is the Launchpad whose first port is the control port. So, that one is autoconnected but useless in this co text because the midi notes are sent on the other port.

  • @espiegel123 said:

    @DMan said:

    @espiegel123 said:

    Now, I need to figure out a way to modify the automatic connection script so that the second port connects. It appears that the automatic connection script only connects the first port.

    Mine has been working great still. I only use it with one MIDI device though. My name eventually reverted back to the hexadecimal name on it’s own by the time I connected to my new Mac. The original iPad I was using still has the name I chose. My second iPad has the hexadecimal name again. I don’t care as long as it works.

    When I was first setting it up and testing before I even had bluetooth working, it was definitely auto connecting more than one MIDI port. I had my PC-300 Roland keyboard and either Novation Circuit, or maybe I did LaunchControl and it auto routed everything just fine. I’m not sure what is going on with yours. I suppose I could check if mine is working with more than one device, but I have it configured so I just plug in a small battery pack and everything gets powered. I’ll have to get some USB hubs etc to check.

    It works fine with multiple devices for me. The issue is that some devices publish multiple separate ports. The autoconect script only connects the the first port of a device and ignores the other. Both the launchkey and launchpad publish two ports one of which is the regular midi from the device and the other is for MIDI that controls the Launchkey or Launchpad.

    On the Launchkey, that is fine because it’s first port is the normal midi port. The problem is the Launchpad whose first port is the control port. So, that one is autoconnected but useless in this co text because the midi notes are sent on the other port.

    Sorry - just seeing this now. I've been off designing a 3d printed case for my next project. B)

    I'll take a look at the connection script. It should be able to be modified for the Launchpad, though it will require some care to make sure the two ports on the Launchpad aren't connected to each other. :#

  • wimwim
    edited December 2020

    @DMan said:

    @espiegel123 said:

    Now, I need to figure out a way to modify the automatic connection script so that the second port connects. It appears that the automatic connection script only connects the first port.

    Mine has been working great still. I only use it with one MIDI device though. My name eventually reverted back to the hexadecimal name on it’s own by the time I connected to my new Mac. The original iPad I was using still has the name I chose. My second iPad has the hexadecimal name again. I don’t care as long as it works.

    When I was first setting it up and testing before I even had bluetooth working, it was definitely auto connecting more than one MIDI port. I had my PC-300 Roland keyboard and either Novation Circuit, or maybe I did LaunchControl and it auto routed everything just fine. I’m not sure what is going on with yours. I suppose I could check if mine is working with more than one device, but I have it configured so I just plug in a small battery pack and everything gets powered. I’ll have to get some USB hubs etc to check.

    I've had luck fixing the name by shutting down the device while the connection list is present, then swiping left on the entry to delete it. Next shut down Bluetooth (you might want to reboot for good measure). When Bluetooth is enabled once again, the device always shows up with the right name for me.

    I've had trouble deleting the numeric named device on my Mac. However there you can rename the device in Audio/MIDI setup, and the name sticks.

    I've never seen it revert to a numeric value once the name is "set". The only time I've had name issue is when I've rebuilt the device on the same hardware. Is there some chance the device is also "paired" in the iOS settings > Bluetooth? If so, forget the device. It shouldn't be in the paired device list.

    Of course, if it's working OK for you and the name issue isn't too annoying, you might want to leave well enough alone.

  • @wim said:

    @espiegel123 said:

    @DMan said:

    @espiegel123 said:

    Now, I need to figure out a way to modify the automatic connection script so that the second port connects. It appears that the automatic connection script only connects the first port.

    Mine has been working great still. I only use it with one MIDI device though. My name eventually reverted back to the hexadecimal name on it’s own by the time I connected to my new Mac. The original iPad I was using still has the name I chose. My second iPad has the hexadecimal name again. I don’t care as long as it works.

    When I was first setting it up and testing before I even had bluetooth working, it was definitely auto connecting more than one MIDI port. I had my PC-300 Roland keyboard and either Novation Circuit, or maybe I did LaunchControl and it auto routed everything just fine. I’m not sure what is going on with yours. I suppose I could check if mine is working with more than one device, but I have it configured so I just plug in a small battery pack and everything gets powered. I’ll have to get some USB hubs etc to check.

    It works fine with multiple devices for me. The issue is that some devices publish multiple separate ports. The autoconect script only connects the the first port of a device and ignores the other. Both the launchkey and launchpad publish two ports one of which is the regular midi from the device and the other is for MIDI that controls the Launchkey or Launchpad.

    On the Launchkey, that is fine because it’s first port is the normal midi port. The problem is the Launchpad whose first port is the control port. So, that one is autoconnected but useless in this co text because the midi notes are sent on the other port.

    Sorry - just seeing this now. I've been off designing a 3d printed case for my next project. B)

    I'll take a look at the connection script. It should be able to be modified for the Launchpad, though it will require some care to make sure the two ports on the Launchpad aren't connected to each other. :#

    Making sure the ports don’t connect to each other won’t be a problem. The current logic is fine, it simply doesn’t look at the second port of a device. So, the only thing to add is to iterate through a devices ports when making connections and continue only connect to other devices.

  • P.s. I am hopeless with regex which the connect script uses liberally, I think.

  • @espiegel123 said:
    P.s. I am hopeless with regex which the connect script uses liberally, I think.

    Yeh, I suck at it too. Hurts my brain. I should be able to figure it out though.

    But I disagree - it will be bad juju if those two ports get connected together, and I believe it could easily happen.

  • @wim said:

    @espiegel123 said:
    P.s. I am hopeless with regex which the connect script uses liberally, I think.

    Yeh, I suck at it too. Hurts my brain. I should be able to figure it out though.

    But I disagree - it will be bad juju if those two ports get connected together, and I believe it could easily happen.

    I agree that you don’t want to connect a device to itself. But that is easy to avoid. You only consider making connections to other devices.

    Devices and ports have a format like deviceID:port number

    In the picture above we’ve got 20:0 and 20:1 for the launchpad. When iterating through, you just skip connecting to your own id an iterate through the ports For those devices with which one connects.

    The logic is

    For Each deviceID
    for each port of device deviceID
    Iterate through the device Ids
    If the device is is not my device, connect to each port of the device

    That logic is in the existing script, it just doesn’t know that some devices have multiple ports

  • @espiegel123 said:

    @wim said:

    In the picture above we’ve got 20:0 and 20:1 for the launchpad. When iterating through, you just skip connecting to your own id an iterate through the ports For those devices with which one connects.

    The logic is

    For Each deviceID
    for each port of device deviceID
    Iterate through the device Ids
    If the device is is not my device, connect to each port of the device

    That logic is in the existing script, it just doesn’t know that some devices have multiple ports

    I took a look, and have the basic idea of what needs to be done, but I'm shut-in' down the ol' brain for the night. The script is written in Ruby, which I'm not familiar with. Basically, we need another level of iteration below the first detection of each line that starts with "client".

    I'll take a crack at it tomorrow, and if I can't figure it out in Ruby, then I'll see if I can write a python script to replace it. That seems like it would be easy enough to do.

  • @wim said:

    @espiegel123 said:

    @wim said:

    In the picture above we’ve got 20:0 and 20:1 for the launchpad. When iterating through, you just skip connecting to your own id an iterate through the ports For those devices with which one connects.

    The logic is

    For Each deviceID
    for each port of device deviceID
    Iterate through the device Ids
    If the device is is not my device, connect to each port of the device

    That logic is in the existing script, it just doesn’t know that some devices have multiple ports

    I took a look, and have the basic idea of what needs to be done, but I'm shut-in' down the ol' brain for the night. The script is written in Ruby, which I'm not familiar with. Basically, we need another level of iteration below the first detection of each line that starts with "client".

    I'll take a crack at it tomorrow, and if I can't figure it out in Ruby, then I'll see if I can write a python script to replace it. That seems like it would be easy enough to do.

    Thanks for looking into it.

  • @wim: i just looked at the ruby script. The script doesn't check for subports. It builds an array of port numbers and then iterates through and connects deviceIDA:0 to deviceIDOther:0 (where :0 means first subport).

    One solution (inelegant but maybe doesn't have any drawbacks for my use-case) is to assume that there is also a subport :1 for each device and attempt to make a connection. Perhaps there is no drawback than getting an error for those cases (which will be most) where there isn't a subport :1.

    A more elegant solution would be to build a port list that also checks to see if a device has more than one subport. (I guess a 2D array would work where where slot 1 of the array is the device ID and slot 2 would be the number of subports.

    Btw, do you just ssh into the rPi or do you connect with a monitor or vnc?

  • edited December 2020

    @espiegel123 said:
    @wim: i just looked at the ruby script. The script doesn't check for subports. It builds an array of port numbers and then iterates through and connects deviceIDA:0 to deviceIDOther:0 (where :0 means first subport).

    One solution (inelegant but maybe doesn't have any drawbacks for my use-case) is to assume that there is also a subport :1 for each device and attempt to make a connection. Perhaps there is no drawback than getting an error for those cases (which will be most) where there isn't a subport :1.

    A more elegant solution would be to build a port list that also checks to see if a device has more than one subport. (I guess a 2D array would work where where slot 1 of the array is the device ID and slot 2 would be the number of subports.

    Btw, do you just ssh into the rPi or do you connect with a monitor or vnc?

    Ok. My dumb hack seems to work. If anyone else wants to do it, adding this one line to the /usr/local/bin/connectall.rb script
    will force the script to try to connect a devices second port (whether it exists or not):

    find the line: system "aconnect #{p1}:0 #{p2}:0"
    and add this as the next line: system "aconnect #{p1}:1 #{p2}:0"

    I recommend backing up the old script first.

    One could write a more elegant script but for the moment this works for my needs.

    NOTE: this works to get the MIDI from the device to the rPi -- I suspect I need to another line or two to make user that that the connections are made in the other direction, too. (In case you need to send MIDI from the iOS device to the Launchpad or Launchkey's second port.

  • This revised hack of the script will work for two-port devices and make connections both ways.

    add these lines to the connectall.rb script (/usr/local/bin/connectall.rb) after the line: "aconnect #{p1}:0 #{p2}:0"

    system "aconnect #{p1}:1 #{p2}:0"
    system "aconnect #{p1}:0 #{p2}:1"
    system "aconnect #{p1}:1 #{p2}:1"

  • @espiegel123 said:
    This revised hack of the script will work for two-port devices and make connections both ways.

    add these lines to the connectall.rb script (/usr/local/bin/connectall.rb) after the line: "aconnect #{p1}:0 #{p2}:0"

    system "aconnect #{p1}:1 #{p2}:0"
    system "aconnect #{p1}:0 #{p2}:1"
    system "aconnect #{p1}:1 #{p2}:1"

    Cool, I still want to come up with a more comprehensive solution, but I think I'll leave it for a bit since you have a solution that works.

    In answer to your earlier question about connecting: I connect via ssh. I don't instal the GUI version of Raspberry Pi OS on the Zero W, so vnc isn't needed. I have connected with a USB keyboard and HDMI display, but that's not as convenient as ssh over WiFi.

  • @wim: i don't recall. did you put a little microdisplay on yours? I didn't on mine but am now thinking it would be handy to see a list of what is connected

  • wimwim
    edited December 2020

    @espiegel123 said:
    @wim: i don't recall. did you put a little microdisplay on yours? I didn't on mine but am now thinking it would be handy to see a list of what is connected

    I did, but decided I didn't care for it on there. Instead I extended it with a little web server so I can check the connections without the clutter of the display. See the wiki article if you're interested in that option. Otherwise, I can scratch my memory a bit for how I had the OLED display configured if you need some help.

    One reason I didn't keep the display is I don't think the example code included scrolling if there were more lines than could fit on the display (4 in my case). I would have had to find a way to do that. But the real reason was I didn't like the fragile nature of it with the display attached, and didn't have a way (then) to make a case.

Sign In or Register to comment.