Skip to content
thijs edited this page Jan 23, 2014 · 2 revisions

Hydrogen Song Format

Hydrogen songs are a well-formed, but non-standard XML file. See below for why they are non-standard. There is currently no style sheet, but the schema is something like this, in pseudo-DTD syntax:

 song (version, bpm, volume, metronomeVolume, name, author,
       notes, license, loopEnabled, mode, humanize_time,
       humanize_velocity, swing_factor, instrumentList,
       patternList, patternSequence, ladspa) 

 instrumentList (instrument+)
 patternList (pattern+)
 patternSequence (group+)
 ladspa (fx+)

 instrument (id, drumkit, name, volume, isMuted, pan_L, pan_R,
        gain, filterActive, filterCutoff, filterResonance,
        FX1Level, FX2Level, FX3Level, FX4Level, Attack,
        Decay, Sustain, Release, randomPitchFactor,
        muteGroup, layer+)

 layer (filename, min, max, gain, pitch)

 pattern (name, category, size, noteList)

 noteList (note+)

 note (EMPTY | (position, leadlag, velocity, pan_L, pan_R, pitch
       key, length, instrument))

 group (patternID+)

 fx (name, filename, enabled, volume)

 '''Note:''' There are no attributes

 Documentation on individual elements:

 TO-DO.  :-)

BEFORE YOU START HACKING

Remember that the values read and written have always been done by Hydrogen. There's not a lot of input checking there. If you manually create a file, you could potentially crash Hydrogen.

You have been warned.

Non-Standard XML

Hydrogen, internally, uses TinyXML. In the past, TinyXML did not read and write numeric character references correctly. The current devel. version of Hydrogen (to be 0.9.4) will write them correctly, but read them in a way that is compatible with old versions of Hydrogen.