Skip to Content

Hydrogen for live use: MIDI control, playlists

No replies
screwtop
Offline
Joined: 12/06/2011

Hi all,

I’ve been setting up Hydrogen for use in a live band situation, using its MIDI control capabilities. In particular, we hope to use a foot controller to pause, stop, play, and cue up the next (or previous) track, and also to have a couple of pedals sending CC messages to control the dynamics and tempo.

Our main songwriter was using Hydrogen on a Windows laptop, but we couldn’t get MIDI input working (it works in other apps, e.g. Pure Data, but AFAICT it’s not supported by Hydrogen on Windows). I’ve therefore set up a netbook with Debian 8/Jessie to use instead, which provides Hydrogen version 0.9.6.1. The MIDI hardware interface is an M-Audio MIDISport 1x1 USB.

One problem we’ve had is with playlists: we can create them OK, but Hydrogen doesn’t seem to be able to load them again, and I see the following debug output:

(E) LocalFileMng::loadPlayList Error reading playlist: playlist node not found
(E) PlaylistDialog::loadListByFileName Error loading the playlist
(E) MainForm::MainForm Error loading the playlist
(E) PlaylistDialog::loadListByFileName Error loading the playlist
(E) ::int main(int, char**) Error loading the playlist

A glance at the playlist file shows that it’s not empty and looks to be well-formed XML with a top-level “playlist” element, so I’m not sure what the problem is there.

The MIDI foot controller sends Program Change messages for the footswitches, so I was hoping to map different Program Change targets to different actions in Hydrogen, but it seems that the MIDI Action settings don’t let you use Program Change more than once.

(Initially I wasn’t sure how to use the BPM_CC_RELATIVE action, as it seemed to have no effect, but then I realised the need to set the output Parameter value for the MIDI action to 1.)

Another problem I noticed early in testing was that Hydrogen was missing drum hits on a seemingly random basis. This one I managed to troubleshoot: the debug output occasionally reports NULL samples for the Snare instrument, and it turns out to be a problem with the YamahaVintageKit instrument package. Specifically, the Snare layers are set up such that there is a gap in the velocities between MIDI velocity 97 and 98. With humanised velocities, there will be occasional note-ons that fall into the gap, and no sample will play! I also wonder if such gaps are something that Hydrogen should disallow (if you really want silence for a certain velocity range, use a silent sample).

The other stumbling block has been how to generate MIDI MMC messages to control Hydrogen. I’ve been using Pure Data as a MIDI filter between the MIDI hardware and Hydrogen, using [midiout] in Pure Data to generate the MMC messages. They appear to be received correctly when received by amidi -p virtual -d, but Hydrogen’s debugging output shows that the message bytes are being treated as separate System Exclusive messages, and it won’t respond:

(I) AlsaMidiDriver::handleMidiMessage [start of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] channel: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val1: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val2: -1
(W) AlsaMidiDriver::handleSysexMessage Unknown SysEx message: (1) [F0 ]
(I) AlsaMidiDriver::handleMidiMessage [end of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [start of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] channel: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val1: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val2: -1
(W) AlsaMidiDriver::handleSysexMessage Unknown SysEx message: (1) [7F ]
(I) AlsaMidiDriver::handleMidiMessage [end of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [start of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] channel: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val1: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val2: -1
(W) AlsaMidiDriver::handleSysexMessage Unknown SysEx message: (1) [1 ]
(I) AlsaMidiDriver::handleMidiMessage [end of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [start of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] channel: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val1: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val2: -1
(W) AlsaMidiDriver::handleSysexMessage Unknown SysEx message: (1) [6 ]
(I) AlsaMidiDriver::handleMidiMessage [end of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [start of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] channel: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val1: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val2: -1
(W) AlsaMidiDriver::handleSysexMessage Unknown SysEx message: (1) [2 ]
(I) AlsaMidiDriver::handleMidiMessage [end of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [start of handleMidiMessage]
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] channel: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val1: -1
(I) AlsaMidiDriver::handleMidiMessage [handleMidiMessage] val2: -1
(W) AlsaMidiDriver::handleSysexMessage Unknown SysEx message: (1) [F7 ]
(I) AlsaMidiDriver::handleMidiMessage [end of handleMidiMessage]

Note messages generated within Pure Data using its [noteout] object are received in Hydrogen correctly, however.

Also, the Director window doesn’t seem to allow itself to be put into full-screen mode, which I thought would be a sensible way to use it.

Lastly, is there any way to have a MIDI CC stream control the velocity of all the drum tracks? At the moment, we have it varying the mixer master volume but it would be nice to take advantage of the layered instruments for more realistic dynamics.

Thanks and sorry for what might read like a lot of complaining, when actually Hydrogen is awesome and I really appreciate the devs’ efforts!