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.