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 user's 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] Effect E5x (set note finetune) now works correctly also with MODs [bug] Effect Dxx (pattern break) works as expected when using hex values
- Add MOD support added for 4 and 8 channel modules subtypes:'M.K.','M!K!','FLT4','OCTA','CD81','FLT8'
- Add MOD support added for 1 to 16 channel modules subtypes:'TDZx','xCHN','xxCH'
- Add On-the-fly sample change feature, for ProTracker MOD modules
- Add It's possible to select different replay modes
- Add 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
- Add Instrument panning envelope is now supported
- Add Instrument 'auto' vibrato is now supported
- Add 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
- Add Vibrato effect (4xy) and vibrato control effect (E4x) are now supported.
- Add Tremolo effect (7xy) and tremolo control effect (E7x) are now supported.
- Add Vibrato with volume slide effect (6xy) is now fully supported.
- Add Tremor effect (Txy) is now supported.
- Add Pattern loop effect (E6x) is now supported.
- Add Instrument finetune effect (E5x) is now supported.
- Add Glissando control effect (E3x) is now supported.
- Add Vibrato volume column effect (Vx) is now supported.
- Add 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
- Add Portamento slide effects (1xx, 2xx, E1x, E2x, X1x, X2x) are now supported.
- Add Portamento to note effect (3xx) is now supported.
- Add Portamento to note with volume slide effect (5xy) is now fully supported.
- Add Jump to position effect (Bxx) and Pattern break effect (Dxx) are now supported.
- Add Key off effect (Kxx) is now supported.
- Add 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 (if you think that this library accuracy is good then you should know it's mainly because of his help!) and wonderful modules.
Strobe's great 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.