Using Axoloti as USB MIDI Host for synths with only USB MIDI ports (Modal Electronics CRAFTsynth)


#1

Hi all,

I've seen the other threads discussing the MIDI thru object and USB host capabilities of the Axoloti, but because I am new I am unsure which thread specifically offers the solution to my questions below.

I have a Modal Electronics CRAFTsynth which only contains 5 pads for playing notes, and a class compliant USB MIDI port (i.e. No MIDI DIN). The USB port also powers the unit.

I just ordered an Axoloti from the latest restock and (upon learning many other things as I await delivery), I'm wondering if you could give me some guidance on how to program the Axoloti as a USB host for controlling the CRAFTsynth with an external MIDI keyboard/synth, while also allowing the unit to remain powered.

Basically, I want to play the CRAFTsynth with a full-ish sized keyboard without routing through a computer/DAW.

Two scenarios/questions:

  1. How can I use the Axoloti to do this with a keyboard/controller containing only a MIDI OUT port? (Ex. Behringer UMX250, Alesis QX 49)

  2. How can I use the Axoloti to do this with a keyboard/controlled containing only a USB MIDI port? (Ex. Akai LPK25, OP-1)

Thanks for your comments!


#2

Scenario 1 should work. Plug the CRAFT in the USB host port of the Axoloti, and a controller keyboard in the DIN MIDI IN port on the Axoloti.

Scenario 2 won't work. The Axoloti doesn't support USB hubs, so you can only plug in one USB device into the board at a time.


#3

The bleeding edge firmware in the Github repository does support USB hubs. I've had success using a Korg Minilogue as a keyboard controller and a BCR 2000 as a CC knob controller at the same time via a USB hub connected directly to Axoloti's USB A port (the large one). Checking out the code and building everything from source is pretty straightforward if you're feeling a little adventurous; follow the documentation. Keep in mind that it might be less likely that you'll receive support on the forums if you run the newer code (I will gladly help if you want to send me a message); you'll be mostly on your own for debugging. In my experience, what's in the repo right now is stable. I have yet to run into any showstopping firmware issues.


#4

Thank you both for your comments.

The newer code allowing hub use is awesome to hear. I will definitely check it out, but realistically I'll likely only do this after attaining a comfort level with "base" Axoloti. Thank you for offering to help me get set up with the new code; I'll definitely keep it in mind if/when I go down that road.

Regarding Scenario 1, I have two follow-up questions:

  1. Will the MIDI through object available in the community library (discussed in this thread: https://sebiik.github.io/community.axoloti.com.backup/t/patch-send-midi-din-notes-to-op-1-usb-host/2059) be the only thing I need to implement on the Axoloti to get this working, or is there more to it? Sorry if this is obvious, but I don't yet have the product/patcher to explore these things.

  2. Because the CRAFTsynth gets it's power from USB only, and in Scenario 1 it will be plugged into the USB port of the Axoloti for host purposes, will it also be powered through the Axoloti? This wouldn't be a question for synths with dedicated power supplies or batteries, but I'm wondering if the Axoloti can host via USB and route USB power at the same time.

Thanks again for the assistance!


#5

yes, tb/midithru will do all you need.
yes, the axoloti acting as a host, will be happy to power the CRAFTsynth

as urklang said, the only issue is if you midi controller is also usb only, then 1.0.12 cannot host both..., though the dev version can.

one possible solution, is get 2 axolotis :slight_smile:

then you can connect the keyboard and synth to different axos, and then connect the two axolotis via a midi din cable. this might seem overkill, but actually its pretty neat because

  • axolotis are cheap
    you'll find it difficult to get a midi router cheaper

  • your going to grow into axoloti
    your experience can be used over both of them

  • there is so much more you can do with axoloti...
    you'll find lots of us here have multiple axos :wink:
    e.g. using for a nice reverb fx on the craft synth, use to accompany with percussion, more synth voices.


#6

Thank you! Very helpful.

And you know me all too well @thetechnobear. I'm already eyeballing that "Add to cart" button so that I can use one for mostly unique hosting purposes (as mentioned in this thread) and one for a dedicated FX unit.

I'll probably regret it as soon as this latest batch goes out of stock, but for now I think I'm going to do a deep dive into the single unit I purchased this week to see how we get along. If all goes well (as I expect it will), I'll be in line for Axo #2. Hopefully wait times between production/in stock aren't too lengthy.

Side note: @janvantomme I see you have a getting started book published on all this. Look for a sale soon :wink:!


#7

midi thru doesn't take any real processing power, so you'll be able to use one axoloti to both host and also to some FX as well... this is what i do for a small modular i have.

i think the thing with axoloti, your real investment is in time... to understand it, once you've got the basics down, its really easy to turn an axoloti to all sorts of tasks... a swiss army knife.

but yeah, always better to dip your toes in first, see if you like it, understand its strengths and limitations.


#8

Next one will be the summer sale in July :wink:


#9

Hi all,

I received the Axoloti today and after going through the installation user guide (winusbcompat on a Windows 7 machine was integral), I made my first (failed) attempt to get the CRAFTsynth (USB) to host the Behringer UMX250 (MIDI).

I'm hoping you can give me some guidance for what I'm doing wrong on this seemingly simple first project/patch.

Here's how everything is hooked up (testing/running in LIVE mode):

-Axoloti-to-PC via microUSB (connection successful; no errors; green LED; firmware 1.0.12)
-Behringer UMX250 (powered by 9V wall power supply) MIDI OUT to MIDI IN of Axoloti
-CRAFTsynth (powered by USB port of Axoloti) MicroUSB to full size USB of Axoloti
-Headphones plugged into headphone jack of CRAFTsynth

Here's what is in the patch:

New patch; open tb/midi/utils/midithru object
input = din (I also tried omni)
output = usb host port 1
led = on

When I go LIVE, I see a red LED blink for any button/key press of the Behringer UMX250, but there is no sound output from the CRAFTsynth. I can play the CRAFTsynth as normal since (a) it has power from the Axoloti, and (b) my headphones are plugged directly into it.

2 questions:

  1. Is there more to midithru hosting than what I've outlined above? Do I need to map the CC numbers of the 25 key keybed of the Behringer UMX250 controller to the CRAFTsynth somehow?

  2. For output of the midithru object, I have the option of USB host port 1-4, Internal Port 1-2 and USB device port 1. I assume USB device port is the microUSB port, but what are the 4 USB host ports and the internal ports? For my attempt above, I was mostly using USB host port 1, but I did try going LIVE with all of them; no luck.

I plan on going through the tutorials this weekend; perhaps the answer is in one of them. If so, I apologize. In the meantime, anyone care to school me on how to get these two items to work together?

Quick repeat of my goal from my first post above: I'd like to play the CRAFTsynth (it only has 5 notes or "keys") with the Behringer's 25 key keyboard without routing through a computer/DAW. Since I'm learning, I'm fine with controlling all other CRAFTsynth parameters (osc shape, lfo, fx, etc...) directly from the unit itself (for now :wink:).

Thanks for your time and assistance!


#10

Update:

The problem appears to be with the CRAFTsynth. I successfully controlled an OP-1 with the Behringer UMX250 using the simple midithru settings mentioned above, but the same will not work with the CRAFTsynth. Both are USB class compliant MIDI devices and I'm using the same cable to debug both synths.

The CRAFTsynth is comprised of various pots and 5 touch "sensors" for playing notes and changing settings. There is no traditional keybed, and only a single button. I'm able to set it to MIDI channel 1-16 manually, if needed, but this wasn't necessary for the OP-1.

I can hook up the CRAFTsynth to my PC and MIDI-OX (midi monitoring program) and see MIDI CC values activate for every knob/sensor on the synth. When I use the midi/in/monitor object within Axoloti, I see no MIDI CC values in the console.

It's like the Axoloti does not detect this synth.

Anyone have ideas that would help me out?

Thanks!


#11

according to the manual of the craft synth it should be class compliant. so, can you post the console output of the axoloti when you plug the craft synth into the usb in on the axoloti. there should be a few blue lines of text appearing, just copy those and post them here. this will help us see, if everything is detected right on the axoloti (or if craft synth indeed is not class compliant :slight_smile: )

also, which channel is the craft synth set to currently? try channel 1


#12

How strange.

Plugging in the CRAFTsynth (set to Channel 1) after turning on the Axoloti and loading the console returns a single message:

USB Device Attached

Expecting I should see more, I unplugged everything and repeated the process with the OP-1, which returns this beautiful amount:

USB Device Attached
PID: 4h
VID: 2367h
Address (#1) assigned.
cfg desc: num interfaces 2
interface: interface 0, num 0, numep 0, class 1 , sub class 1
interface: interface 1, num 1, numep 2, class 1 , sub class 3
endpoint: interface 1, ep num 0, addr 6
endpoint: interface 1, ep num 1, addr 85
Manufacturer : Teenage Engineering AB
Product : OP-1 Midi Device
Serial Number : b135ec4d7b130000d0a0901b8b8a14c2
Enumeration done.
Default configuration set.
Switching to Interface (#1)
Class : 1h
SubClass : 3h
Protocol : 0h
USB Host Output size requests : 40
USB Host Input size requests : 40
USB Host Output connected to 1 : 6
USB Host Input connected to 1 : 85
MID class started.

I suspect this means either (a) the CRAFTsynth is not class compliant, or (b) the Axoloti doesn't think it's class compliant.

When I plug the CRAFT directly into the PC, no drivers are installed. It "just works" like any other class compliant device would.

Thanks for responding and trying to help (and reading the CRAFT manual!). Any thoughts on how/if I can get this thing working?


#13

yes, this is indeed strange. there should be more lines shown...

maybe the craft synth draws too much current and cannot be powered by axoloti usb-bus? can you try to power the axoloti from a power wall adapter instead of a computer and see if that changes anything? (in case you don't do that already, i am not sure if it helps though) i think you cannot power the craft synth with a power adapter, right? otherwise you should definitely try that as well.

@johannes or @thetechnobear, any hints?


#14

Thanks for the reply; you're correct, the CRAFT can only be powered via USB (mini).

Here's some voltage info:

With Axoloti plugged directly into PC via microUSB only and nothing else hooked up, the console reads:

5V: 4.96V VDD: 3.30V

Note: The 4.96V sometimes fluctuates up or down slightly (I've seen 4.94V and 4.97V), but this was enough to power the OP-1.

I have a 12V 800mA 9.6W (Center pin positive) power supply that appears to power the Axoloti just fine. In order to read the console, I plugged both the 12V power supply and the microUSB into the Axoloti and received basically the same numbers:

5V: 4.98V VDD: 3.30V

Is this correct? Shouldn't some of these numbers be higher with the 12V power supply addition?

Plugging the CRAFT into the microUSB and 12V powered Axoloti makes the 4.98V number drop to 4.96V and I still get the basic USB Device Attached message.

Because the console numbers didn't change significantly, I am unsure if the power supply is not working, or if the console only reads from the microUSB slot-- can you inform?


#15

numbers are fine, yes.

i doubt it is a current draw issue now that i look at it a little closer, it seems to be a digital synth and seems to be connectable to tablets as well so shouldn't draw too much.

do you have access to a linux pc? you could do a lsusb with the craft synth plugged in and report back what you get there. you can also install USBView for windows or for OS X: https://apple.stackexchange.com/questions/170105/list-usb-devices-on-osx-command-line

might give us some more clues, why this fails.


#16

Sorry for the text dump, but here's what I get in USBView for Windows (no Linux access here); I must admit, I have no idea what any of this information means, but hopefully it is useful in solving this riddle:

Thanks!

[Port1] : USB Composite Device

Device Power State: PowerDeviceD0

** ---===>Device Information<===---**
English product name: "Craft Synth"

**ConnectionStatus: **
Current Config Value: 0x01 -> Device Bus Speed: Full
Device Address: 0x01
Open Pipes: 4

** ===>Device Descriptor<===**
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0101
bDeviceClass: 0x00 -> This is an Interface Class Defined Device
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 = (64) Bytes
idVendor: 0x1FC9 = NXP Semiconductors
idProduct: 0x8174
bcdDevice: 0x0200
iManufacturer: 0x01
** English (United States) "Modal Electronics"**
iProduct: 0x02
** English (United States) "Craft Synth"**
iSerialNumber: 0x03
** English (United States) "4294967295"**
bNumConfigurations: 0x01

** ---===>Open Pipes<===---**

** ===>Endpoint Descriptor<===**
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0040 = 0x40 bytes
bInterval: 0x01

** ===>Endpoint Descriptor<===**
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x02 -> Direction: OUT - EndpointID: 2
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0020 = 0x20 bytes
bInterval: 0x02

** ===>Endpoint Descriptor<===**
bLength: 0x09
bDescriptorType: 0x05
bEndpointAddress: 0x04 -> Direction: OUT - EndpointID: 4
bmAttributes: 0x02 -> Bulk Transfer Type
wMaxPacketSize: 0x0040 = 0x40 bytes
wInterval: 0x0000
bSyncAddress: 0x00

** ===>Endpoint Descriptor<===**
bLength: 0x09
bDescriptorType: 0x05
bEndpointAddress: 0x83 -> Direction: IN - EndpointID: 3
bmAttributes: 0x02 -> Bulk Transfer Type
wMaxPacketSize: 0x0040 = 0x40 bytes
wInterval: 0x0000
bSyncAddress: 0x00

** ---===>Full Configuration Descriptor<===---**

** ===>Configuration Descriptor<===**
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x0073 -> Validated
bNumInterfaces: 0x02
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0xC0 -> Self Powered
MaxPower: 0x32 = 100 mA

** ===>Interface Descriptor<===**
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x01 -> Audio Interface Class
bInterfaceSubClass: 0x03 -> MIDI Streaming Interface SubClass
bInterfaceProtocol: 0x00
iInterface: 0x00

** ===>Descriptor Hex Dump<===**
bLength: 0x07
bDescriptorType: 0x24
**07 24 01 00 01 41 00 **

** ===>Descriptor Hex Dump<===**
bLength: 0x06
bDescriptorType: 0x24
**06 24 02 01 01 00 **

** ===>Descriptor Hex Dump<===**
bLength: 0x06
bDescriptorType: 0x24
**06 24 02 02 02 00 **

** ===>Descriptor Hex Dump<===**
bLength: 0x09
bDescriptorType: 0x24
**09 24 03 01 03 01 02 01 00 **

** ===>Descriptor Hex Dump<===**
bLength: 0x09
bDescriptorType: 0x24
**09 24 03 02 04 01 01 01 00 **

** ===>Endpoint Descriptor<===**
bLength: 0x09
bDescriptorType: 0x05
bEndpointAddress: 0x04 -> Direction: OUT - EndpointID: 4
bmAttributes: 0x02 -> Bulk Transfer Type
wMaxPacketSize: 0x0040 = 0x40 bytes
wInterval: 0x0000
bSyncAddress: 0x00

** ===>Descriptor Hex Dump<===**
bLength: 0x05
bDescriptorType: 0x25
**05 25 01 01 01 **

** ===>Endpoint Descriptor<===**
bLength: 0x09
bDescriptorType: 0x05
bEndpointAddress: 0x83 -> Direction: IN - EndpointID: 3
bmAttributes: 0x02 -> Bulk Transfer Type
wMaxPacketSize: 0x0040 = 0x40 bytes
wInterval: 0x0000
bSyncAddress: 0x00

** ===>Descriptor Hex Dump<===**
bLength: 0x05
bDescriptorType: 0x25
**05 25 01 01 03 **

** ===>Interface Descriptor<===**
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x01
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x03 -> HID Interface Class
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x00

** ===>HID Descriptor<===**
bLength: 0x09
bDescriptorType: 0x21
bcdHID: 0x0111
bCountryCode: 0x00
bNumDescriptors: 0x01
bDescriptorType: 0x22 (Report Descriptor)
wDescriptorLength: 0x0021

** ===>Endpoint Descriptor<===**
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0040 = 0x40 bytes
bInterval: 0x01

** ===>Endpoint Descriptor<===**
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x02 -> Direction: OUT - EndpointID: 2
bmAttributes: 0x03 -> Interrupt Transfer Type
wMaxPacketSize: 0x0020 = 0x20 bytes
bInterval: 0x02


#17

well at this point @johannes has to jump in.


#18

Trying to find out here why I can't compile tb/midthru
I get a message:
/Applications/Axo2/Axoloti.app/Contents/Java/api/midi_legacy.h:16:64: error: 'b2' was not declared in this scope

That's Catalina, which version of Java should I be using?

cheers


#19

This is a compile error from an object that hasn't been updated to work with firmware 2.0.0 yet. If you can start the patcher application, your version of Java is ok.