Mixman dm2

From Hive13 Wiki
Jump to navigation Jump to search


Property "ProjectImage" (as page type) with input value "Image:dm2.jpg|200px" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.

Hive13 Project
Mixman dm2 Project

[[Dm2.jpg|200px]]

Status: Inactive
Start Date: 12/23/2009

Overview

Chis Davis brought in the Mixman digital music mixer 2 (dm2) device and asked if anybody wanted to get it working in linux. Of course we do :) So this is the work log of getting it to work in linux and whatever else we end up doing with the device.. Example: use the dm2 to control an RC tank...crossfader=accelerator, turntable one is steering, turntable 2 is turret direction ;)

Worklog

12/23/09

Did some research on linux and mixer tables. Turns out there are LOTS of apps for mixing on linux. Sweet! Decided to get Mixxx and TerminatorX as my test apps. This may change later. Also it should be noted that I'm running Debian with the 2.6.31 kernel. I used apt-get to install both Mixxx and TerminatorX.

When plugging in dm2 via usb I get the following:

[ 2160.086434] usb 5-1: New USB device found, idVendor=0665, idProduct=0301
[ 2160.086437] usb 5-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2160.086530] usb 5-1: configuration #1 chosen from 1 choice

So obviously there are no builtin drivers for linux for this device. I have two options here. I can get the windows drivers and sniff the usb traffic and port that to linux or I can check to see if anybody else has already done that :) So after a quick search I find somebody who has already done most of the work (maybe all of it)

It appears that there are two parts to this. One is the dm2 driver itself and the other is a patch to the kernel (uhci-q.c) that basically turns off the check for low speed bulk transfers. We will use both. If you don't already have the kernel source go get it now. To patch goto the linux source directory (/usr/src/linux)

patch -p1 < /path/to/dm2/src/linux-lowspeedbulk.patch

That should give you a message for a different offset but should succeed (there isn't much to this patch). Then compile your kernel and boot from it to ensure the new kernel works. Next you will goto the dm2 source directory and type make. This should build the dm2.ko kernel module.

If your kernel is < 2.6.28 then the module won't compile normally. This is because snd_card_new became snd_card_create. You can get the subversion code release.

svn co https://dm2linux.svn.sourceforge.net/svnroot/dm2linux dm2linux

Then change into the dm2_alsa and type make and 'make install'.

modprobe dm2

In dmesg you should see:

[ 1913.083125] dm2: Mixman DM2 device now attached.
[ 1913.083170] usbcore: registered new interface driver Mixman DM2

Now bring up mixxx and goto Preferences.

You should have a MIDI option now. Select the DM2 device and choose Mixman DM2 from the pulldown list.

That's it, Mixxx shoudl work fine with DM2 now. After I'm done playing then maybe I'll comeback to this worklog to talk about how to use midi controllers to control other things.

Mixxx Hive13 Config file

This is a simplistic/minimum config but I've found it's best to start with a custom XML file because the ones that come with mixxx really screw up the temp :)

This script does the following:

  • Controller1 and Controller2 play buttons work (middle button)
  • Crossfader Works
  • LEDs lights run around each controller

I will update when I test more features and settings

<?xml version="1.0" encoding="utf-8"?>
    <MixxxMIDIPreset schemaVersion="1" mixxxVersion="1.7.0+">
	<info>
		<name>Mixman DM2 Hive13 Setup</name>
		<author>Craig Smith</author>
		<description>Chris Davis donated his Mixman DM2 device and we set out to ensure it works well on linux.  Here is the results of the Hive13 Hackerspace keybindings for Mixxx.</description>
	</info>
<controller id="dm2 ctrl1" port="">
  <controls>
    <control>
      <group>[Master]</group>
      <key>crossfader</key>
      <miditype>Ctrl</miditype>
      <status>0xB0</status>
      <midino>2</midino>
      <midichan>1</midichan>
    </control>
    <control>
      <group>[Master]</group>
      <key>volume</key>
      <miditype>Ctrl</miditype>
      <status>0xB0</status>
      <midino>121</midino>
      <midichan>1</midichan>
    </control>

    <control>
      <group>[Channel1]</group>
      <key>play</key>
      <miditype>Key</miditype>
      <status>0x90</status>
      <midino>55</midino>
      <midichan>1</midichan>
    </control>

    <control>
      <group>[Channel2]</group>
      <key>play</key>
      <miditype>Key</miditype>
      <status>0x90</status>
      <midino>54</midino>
      <midichan>1</midichan>
    </control>

 </controls>
  <outputs>
   <output>
      <group>[Channel1]</group>
      <key>play</key>
      <status>0xB0</status>
      <midino>0x58</midino>
      <threshold>0.5</threshold>
   </output>
   <output>
      <group>[Channel2]</group>
      <key>play</key>
      <status>0xB0</status>
      <midino>0x59</midino>
      <threshold>0.5</threshold>
   </output>
  </outputs>
</controller>
</MixxxMIDIPreset>

Just save to /usr/share/mixxx/midi

References