M-Audio Ozone (built 2003) with OpenSuse Leap

M-Audio sold around 2003 this MIDI keyboard. Besides the 2 octave keyboard it offers also an external USB Sound card with many audio connections. Moreover it offers controls to control a DAW application. Target Operating System were Mac and Windows.

I got such a keyboard in 2020 and tried to use it with Linux. This is possible and I describe here what has to be done.

The connectivity between Keyboard and PC is USB, with version 1.1. This is slow, but enough for Stereo 48KBit or Mono 96KBit .

I tested the MIDI feature of the keyboard (MIDI out connection) and it works fine. More on that maybe later in another article.

After connecting the USB cable, the device is not recognized as an Audio Device.

[ 4701.664414] usb 1-5: new full-speed USB device number 11 using xhci_hcd [ 4701.816379] usb 1-5: New USB device found, idVendor=0763, idProduct=2808 [ 4701.816390] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 4701.816396] usb 1-5: Product: Unknown [ 4701.816401] usb 1-5: Manufacturer: Unknown

To have the device recognized, it is required to load an updated firmware into it. Therefore two tools exist: fxload and madfuload.

While madfuload can read in a binary file, the newer fxload requires a INTELHEX file. It is possible to convert a binary file into a INTELHEX file, so these two tools are basically the same. fxload is part of OpenSuse repositories and can be installed from there. madfuload seems to be outdated, but its source package can still be downloaded

I installed madfuload from source:

tar xvzf madfuload-1.0.tar.gz cd madfuload-1.0/ ./configure make

madfuload requires to give the path in USB device tree with ‘-D’ option. To get the name of the device, use lsusb:

dennis@linux-h3a7:~> lsusb
... Bus 001 Device 021: ID 0763:2808 M-Audio ...

This means the path is /dev/bus/usb/001/021. Then load the firmware (as root):

sudo ./madfuload -f ma008100.bin -vvv -D /dev/bus/usb/001/021 -3 ma008100.bin:
5675 bytes read successfully reading device descriptor … interface descriptor 0:
0 DFU interface is 0 DFU descriptor found transfer size is 64 waiting 32 ms
cannot reset device: (19) No such device
/usr/sbin/hwinfo --sound

Check availability of hardware:

36: USB 00.1: 0401 Multimedia audio controller \[Created at usb.122\] Unique ID:
NwzV.rkmn5HwiMPD Parent ID: k4bc.2DFUsyrieMD SysFS ID: /devices/pci0000:00/0000:
00:14.0/usb1/1-5/1-5:1.1 SysFS BusID: 1-5:1.1 Hardware Class: sound Model: "
M-Audio Ozone"
Hotplug: USB Vendor: usb 0x0763 "M-Audio"
Device: usb 0x2008 "M-Audio Ozone"
Revision: "1.00"
Speed: 12 Mbps Module Alias: "usb:v0763p2008d0100dc00dsc00dp00ic01isc02ip00in01"
Driver Info #0:
Driver Status: snd-usb-audio is not active Driver Activation Cmd: "modprobe
snd-usb-audio"
Config Status: cfg=new, avail=yes, need=no, active=unknown Attached to: #40 (
Hub)

See line ‘Driver Activation Cmd’ how to load the driver (as root). After that, the device is visible and can be used in e.g. audacity and other tools with name like ‘Ozone: USB Audio (hw: 0,1)’.

sudo modprobe snd-usb-audio

It is also possible to enter the firmware load as a udev rule: /etc/udev/rules.d/42-midisport-firmware.rules

# Using madfuload  
ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="763/2808/*", RUN+="
/usr/local/sbin/madfuload -l -3 -f /usr/local/share/usb/maudio/ma008100.bin -D
$env{DEVNAME}"

# Using fxload with two ihx files, one 'loader' and one 'firmware' file  
ACTION=="add", SUBSYSTEM=="usb", DEVPATH=="/_.0", ENV{PRODUCT}=="763/2808/_",
RUN+="/sbin/fxload -s /usr/local/share/usb/maudio/MidiSportLoader.ihx -I
/usr/local/share/usb/maudio/ma008100.ihx"

Use kmix and kmixcrtl to check the sound card availability, order and more things.

After this basic integration into Linux audio layer, the keyboard can be used as any other audio device.