subpixels.com | SPXL.TVblog | contactgallery | videoflash | processingmyspace | facebook

spxlAudioToMidi

by subpixel, subpixels.com

Description

A small application made with Processing to produce MIDI control messages from a live audio feed. Auto-levelling frequency band meters are used to obtain "peak" output values across the entire audio spectrum analysed (whereas it is usual to have strong bass response with weaker treble response), and easing is applied to make the levels less erratic. 10 separate monitor outputs are supplied, where each monitor is attached to one of the frequency band meters and that meter's output is scaled to the particular output range for the monitor, allowing for a reduced final output range as well as inverted ranges. Controls are provided to select the MIDI output device and the MIDI channel to use, as well as for selecting which monitors are connected to which meters and the monitor output ranges.

The application was developed and tested with Processing 1.1 under Windows 7 Professional (64-bit) and successfully used to control the VJ application Neon v2, allowing simultaneous control from an external MIDI controller on the same channel (using MIDI-OX and MIDI Yoke for routing).

Download

2010-06-25 v04: spxlAudioToMidi04.zip (8,588 bytes) - Source code

Demo Videos

Operation

The text at the top of the window controls the MIDI output. The left column of 30 bars are audio meters; each meter representing an average for a frequency band produced by FFT analysis with the low frequencies at the top of the display and the high frequencies at the bottom of the display. The meters are auto-levelling and provide normalised output values between 0 and 1 (inclusive). The right column of 10 bars are meter monitors, with each one connected to a particular meter. A monitor's output value is determiend by scaling the input meter value over the monitor's output range between 0 and 127 (inclusive); the lower and upper limits of each range can be adjusted, including to scale the meter input inversely, and the meter it is connected to (thus the frequency band it monitors) can be changed. If a MIDI output device is selected, each time a monitor output value changes, the value is emitted as a MIDI control message on the selected output channel. The control number is in the range 1 to 10, with the top monitor being control 1 and the bottom one being control 10.

Selecting MIDI output device

Click on the "SELECT OUTPUT" text to pop up the "SELECT DEVICE:" menu. Click a displayed device to select. Subsequently, clicking a displayed device name presents the "SELECT DEVICE:" menu again, and clicking the displayed channel number presents a "SELECT CHANNEL:" menu with channels 1 to 16.

Adjust monitor output ranges

Each monitor ouutputs values in the range 0 to 127 (inclusive) by default. The "minimum" and "maximum" limits can be adjusted by clicking (and dragging) the monitor output bar. Clicking in the top 3/4 of the bar adjusts the maximum; clicking in the top 1/4 of the bar adjusts the minimum. When dragging, if the mouse is dragged above or below the bar, the limit being dragged (min or max) snaps back to the previous value. Right-click the bar to reset to the default full range (0 to 127).

Changing monitor links

When the mouse is just off the left edge of a monitor bar the link to the associated meter is hilighted and "Drag to meter" is displayed. Click and drag the mouse pointer, releasing over to the desired meter; releasing when not over a meter leaves the link as it was previously. Right-clicking when "Drag to meter" is shown resets the link to the meter assigned by default when the application was started.

Keyboard controls

Below, the "selected monitor" is the monitor that the mouse is over.

Space / P
[P]ause (and unpause)
M
[M]ute meter inputs
E
Toggle [E]asing of meter values (on by default)
H
Toggle display of values in [H]exadecimal
R
[R]andom range (sets min and max output values) for selected monitor; Shift+R to randomise all ranges
F
[F]lip range (swap min and max output values) for selected monitor; Shift+F to flip all ranges
V
in[V]ert range (sets min to 127-min, max to 127-max) for selected monitor; Shift+V to invert all ranges
S
re[S]et range to default (sets min to 0, max to 127) for selected monitor; Shift+S to reset all ranges
Q
link selected monitor to random meter; Shift+Q to randomise all links
A
reset link to default meter; Shift+A to reset all links to default meters
1234567890
Set MIDI output channel (channels 1 to 10 only, 0 for 10)
!@#$%^&*()
Set the the MIDI output device (as per the order shown in the menu when clicked)
F1
Toggle display of meters
F2
Toggle display of monitors

Screenshots


Default state

Select MIDI device

Link to meter part 1

Link to meter part 2

Hover to show value

Set max output
Click (and drag)

Set min output
Click (and drag)

Random links,
random output ranges

Select MIDI channel

Pause + mute