open-audiovisual
Search GitHub

ODD

ODD Ball

ODD Ball is a MIDI hardware controller by ODD: 3 pads, 4 knobs and 3 faders.

It sends CC and Note on channel 1. The profile cites 1 source. 10 of its controls are marked unverified: the number is our best reading, and Learn rebinds it in one move.

  • Artist's TouchDesigner tool
  • 10 unverified
Kind
hardware device
Maker
ODD
Controls
10 controls
Messages
CC · Note
MIDI channels
1
LED feedback
none sent
Signals
midi/oddball/…
Port name matches
/odd\s*ball/i
ODD BALLNOTESMOTIONMoveSpinFree fallEnergyORIENTATIONRot XRot YRot Z

Play ODD Ball on screen Full screen ↗ Raw JSON ↗ All controllers

Drag knobs and faders · tap pads and keys · or plug the real one in and press Connect. Nothing is sent anywhere unless you add a MIDI out.

MIDI implementation

Every control of ODD Ball and the message it sends

Generated from the profile file, so it is the same table the on-screen controller plays. Channels are 1–16; numbers are real MIDI numbers.

MIDI implementation of ODD Ball
ControlTypeMessageChNumberSignalLED feedbackVerified
Move move knob CC 1 0 midi/oddball/move — unverified
Spin spin knob CC 1 1 midi/oddball/spin — unverified
Free fall freefall knob CC 1 2 midi/oddball/freefall — unverified
Rot X rotx fader CC 1 3 midi/oddball/rotx — unverified
Rot Y roty fader CC 1 4 midi/oddball/roty — unverified
Rot Z rotz fader CC 1 5 midi/oddball/rotz — unverified
Energy energy knob CC 1 6 midi/oddball/energy — unverified
Tap / Bounce tap pad Note · velocity 1 60 · C4 midi/oddball/tap — unverified
Shake shake pad Note · velocity 1 61 · C#4 midi/oddball/shake — unverified
Twist twist pad Note · velocity 1 62 · D4 midi/oddball/twist — unverified

LED feedback is not modeled for this one yet, so OAV does not light its LEDs. Every control still plays and sends its message.

Sources

  • artist's tool Midi_ODD_Ball_251212.tox (the artist's TouchDesigner tool and its annotations)the only source used; no manufacturer document was consulted — every control is marked unverified

Where this profile comes from

Che-Yu Wu's TouchDesigner tool (annotated): notes N1 Tap/Bounce, N2 Shake, N3 Twist (default notes 60–62, editable in the tool); CC0 MoveSmoothed, CC1 Spin Smoothed, CC2 Free Fall, CC3–5 X/Y/Z orientation, CC6 Energy; values scaled 0..128 → 0..1, orientation → 0..360°; note gates held with a 0.4 s release lag; a Mock mode switches the MIDI In for simulated LFO signals. TouchDesigner's MIDI In CHOP names channels 1-based (ch1ctrl75 = CC 74, ch10n37 = note 36); the numbers here are real MIDI numbers. Midi_ODD_Ball_251212.tox

Notes

Mapping comes from the artist's TD tool, not from a manufacturer chart. The on-screen version is the TD tool's Mock mode: play the ball's gestures without the ball.

Port names it recognises

matches
/odd\s*ball/i

Signals

Every control publishes midi/oddball/<control> (0..1), plus /raw; pads add /hit, encoders /delta, keys /on /off and n<note>; the last control touched is midi/oddball/last.

Use it

Use ODD Ball in your own work

  1. Embed it with one line

    No import map, no build step. Change layout, add hardware="ask" for a Connect button.

    html
    <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script>
    <oav-controller profile="odd-ball" readout></oav-controller>
  2. Or as an iframe

    For places that only take an iframe. Every event arrives as a postMessage.

    html
    <iframe src="https://openaudiovisual.com/embed/controller/?profile=odd-ball&readout"
            width="720" height="382" style="border:0;max-width:100%" allow="midi"
            title="ODD Ball"></iframe>
    <script>
      // every control the visitor plays arrives here
      addEventListener('message', (e) => {
        if (e.data?.source !== 'openav' || e.data.type !== 'control') return;
        console.log(e.data.detail.signal, e.data.detail.value);
      });
    </script>
  3. Send it to Ableton, TouchDesigner or Resolume

    What you play on screen leaves as real MIDI on the IAC bus (macOS) or a loopMIDI port (Windows). The steps are on the catalog page.

    html
    <!-- what you play on this controller → the IAC bus (macOS) → Ableton, TouchDesigner, Resolume -->
    <script type="module" src="https://openaudiovisual.com/packages/midi/element.js"></script>
    <oav-controller profile="odd-ball" midi-out="IAC" readout></oav-controller>
    <!-- Windows: midi-out="loopMIDI" · let the visitor pick a port: midi-out="ask" -->

    macOS: Audio MIDI Setup → MIDI Studio → IAC Driver → “Device is online”. Windows 11: the built-in Windows MIDI Services have a loopback (not tested by us); older Windows: install loopMIDI, add a port and use midi-out="loopMIDI".

In p5.js, with one line

The one-line injection names knobs, faders and pads by their order in this profile, the order of the table above. Add ?profile=odd-ball to make the on-screen controller this one; a real ODD Ball is recognised by its port name.

javascript
document.head.prepend(Object.assign(document.createElement('script'), { src: 'https://openaudiovisual.com/p5/oav-p5.js?profile=odd-ball' }));
In your sketchControlMessage
knob1Move moveCC 0 · Ch 1
knob2Spin spinCC 1 · Ch 1
knob3Free fall freefallCC 2 · Ch 1
knob4Energy energyCC 6 · Ch 1
fader1Rot X rotxCC 3 · Ch 1
fader2Rot Y rotyCC 4 · Ch 1
fader3Rot Z rotzCC 5 · Ch 1
pad1Tap / Bounce tapNote 60 · C4 · Ch 1
pad2Shake shakeNote 61 · C#4 · Ch 1
pad3Twist twistNote 62 · D4 · Ch 1
p5.js sketch
function draw() {
  background(knob1 * 255);   // Move · CC 0
  circle(width / 2, height / 2, 50 + knob2 * 300);   // Spin · CC 1
}

function padPressed(n, velocity) {      // n = 1…3, as in the table
  circle(random(width), random(height), velocity * 100);
}

The whole p5.js page →

Missing

Is your controller not here?

Open an issue with the brand and model, whether you have the unit and a link to the manual. Or write the profile yourself: it is one JSON file.

GitHub

Is something in this data wrong?

Every number on this page comes from one JSON file. If it disagrees with your unit or the manual, tell us which firmware you checked and we fix the file.