From GameBrew - a wiki dedicated to Video Game Homebrew.
A C library to play XM (and MOD) modules on Nintendo DS using only ARM7 resources (thus freeing your ARM9 from that task).
It works completely on ARM7, it has some effect column support, some volume column support, instruments with complete volume envelopes support, 8 & 16 bit samples with normal & ping-pong loop support.
- Up to 16 channels.
- Distinct volume and effect column for each channel.
- Module length up to 256 patterns.
- Module can contain up to 256 different patterns of variable length from 1 to 256 lines.
- Up to 128 instruments, each one of which:
- Has up to 16 different 8 or 16 bit samples, each one having a forward (normal) or a ping-pong loop optionally.
- May have a volume envelope with up to 12 points, optionally with a sustain point and/or a loop, plus a release (fade out) rate.
- May have a panning envelope with up to 12 points, optionally with a sustain point and/or a loop.
- May have a vibrato definition with speed, depth and sweep.
- Both linear frequency table mode (XM native) and Amiga frequency table mode (MOD native) are supported for completeness, even if the latter is very uncommon nowadays.
The use of XMs as a background music in your own games allows much more flexibility compared to the old MOD format: more channels, multisample instruments, envelopes, panning and so on.
In addition, the XM format is widespread among composers who compose music using their favourite tracker. Moreover, the reproduction of the tune will not use ARM9 resources as all the necessary elaboration is carried out by the ARM7. With LIBXM7 all user has to do is load the module and fire.
More information can be found here.
LIBXM7 demo: Rhubarbarian
LIBXM7 demo: Ribbed Rubber
LIBXM7 demo: Parallax Glacier
- Bug fixed: Effect E5x (set note finetune) now works correctly also with MODs.
- Bug fixed: Effect Dxx (pattern break) works as expected when using hex values.
- Added: MOD support added for 4 and 8 channel modules subtypes:'M.K.','M!K!','FLT4','OCTA','CD81','FLT8'.
- Added: MOD support added for 1 to 16 channel modules subtypes:'TDZx','xCHN','xxCH'.
- Added: On-the-fly sample change feature, for ProTracker MOD modules.
- Added: It's possible to select different replay modes.
- Added: It's possible to select different panning modes and panning 'apertures'.
XM7_LoadXM() ARM9 XM loading function:
- Bug fixed: XM7_LoadXM() now will load instrument envelopes (both volume&panning) and settings (fadeout/autovibrato)even if the file has been saved with SkaleTracker.
- Added: Instrument panning envelope is now supported.
- Added: Instrument 'auto' vibrato is now supported.
- Added: Amiga frequency table mode (MOD native mode) is now supported.
- Bug fixed: Effect Hxy (slide global volume) now has memory effect.
- Bug fixed: Effect EDx (note delay) now retrigs last note and his envelope when specified on a 'empty' line.
- Bug fixed: Effect E9x (note retrig) now retrigs instrument envelope too.
- Bug fixed: Effect Lxx (Set volume envelope position) now starts working in the first tick.
- Bug fixed: Instrument finetune parameter 3 LSB are now ignored, as in FastTrackerII.
XM7_LoadXM() ARM9 XM loading function:
- Bug fixed: XM7_LoadXM() now doesn't fail while loading XMs containing multi-sample instrument with 16bits samples in it.
Version Beta 0.93
- Added: Vibrato effect (4xy) and vibrato control effect (E4x) are now supported.
- Added: Tremolo effect (7xy) and tremolo control effect (E7x) are now supported.
- Added: Vibrato with volume slide effect (6xy) is now fully supported.
- Added: Tremor effect (Txy) is now supported.
- Added: Pattern loop effect (E6x) is now supported.
- Added: Instrument finetune effect (E5x) is now supported.
- Added: Glissando control effect (E3x) is now supported.
- Added: Vibrato volume column effect (Vx) is now supported.
- Added: Set vibrato speed volume column effect (Sx) is now supported.
- Bug fixed: notes specified 'alone' (with no istrument) in the pattern now shouldn't lead unpredictable results (it was happening only if you never specified an instrument before in that channel) Also, notes 'alone' should now be played correctly.
- Bug fixed: high pitch notes (octave 7 and above) of instruments with sample finetuning (or pitch bended) now shouldn't be "muted".
- Bug fixed: Instrument envelopes having points over the 255th tick should now work correctly anyway.
- Bug fixed: effect EEx (pattern delay) now should produce a correct delay even when it used with an Fxx effect (set song speed) on the same line.
- Bug fixed: effect 9xx (sample offset) now shouldn't give weird side effects when used with a sample that has a loop, and 'memory effect', should work, now.
XM7_LoadXM() / XM7_Unload() ARM9 XM loading/unloading functions:
- Bug fixed: "squeezed" XMs can now be loaded correctly.
- Bug fixed: conversion from ping pong to forward loop now shouldn't cause instrument detuning.
- Bug fixed: XMs that fail to load now will be correctly unallocated from memory using XM7_Unload().
Version Beta 0.81
- Added: Portamento slide effects (1xx, 2xx, E1x, E2x, X1x, X2x) are now supported.
- Added: Portamento to note effect (3xx) is now supported.
- Added: Portamento to note with volume slide effect (5xy) is now fully supported.
- Added: Jump to position effect (Bxx) and Pattern break effect (Dxx) are now supported.
- Added: Key off effect (Kxx) is now supported.
- Added: Portamento to note volume column effect (Mx) is now supported.
- Bug fixed: istruments specified 'alone' (with no note) in the pattern now shouldn't lead to unpredictable results even when used when you never specified a note before in that channel.
- Bug fixed: Also, they should now work even after key-offs of instrument with no envelopes.
- Bug fixed: effect Rxy (retrig note with volume slide) used at the same time when setting a volume on the volume column now should correctly reset the volume before every every retrig. 'Memory effect', should work correctly now, even when only one of the values (x or y) is 0.
- Bug fixed: effect 0xy (Arpeggio) now keeps on working even in the 'extra ticks' added by an effect EEx (Pattern Delay) on the same line.
- Bug fixed: effect 9xx (sample offset) is now not ignored when used with a sample that has a loop.
- Bug fixed: libxm7 startSound() (internal) function has been renamed, so you don't have to rename yours.
Version Beta 0.59
- First release.
devkitARM & libnds.
Briend (c)runX 's help in teaching XM, back in 1997.
raina's priceless work and modules.
Strobe's help in finding lots of bugs while implementing new effects, and his modules.
Rhinostrich, setrodox, Magic Fred, Romeo Knight, ogge and Kmuland for their modules and the permission to use them.