LibXM7: Difference between revisions

From GameBrew
No edit summary
No edit summary
Line 10: Line 10:
| source      = Media:Libxm7exampledssrc.zip
| source      = Media:Libxm7exampledssrc.zip
}}     
}}     
A C library to play XM (and MOD) modules on Nintendo DS using only ARM7 resources (thus freeing your ARM9 from that task).
A C library to play XM (and MOD) modules on Nintendo DS using only ARM7 resources (thus freeing your ARM9 from that task).


Line 16: Line 15:


==Features==
==Features==
*Up to 16 channels
* Up to 16 channels.
*Distinct volume and effect column for each channel
* Distinct volume and effect column for each channel.
*Module length up to 256 patterns
* Module length up to 256 patterns.
*Module can contain up to 256 different patterns of variable length from 1 to 256 lines
* Module can contain up to 256 different patterns of variable length from 1 to 256 lines.
*Up to 128 instruments, each one of which:
* 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
** 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 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 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
** 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
* 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.


==User guide==
==User guide==
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.  
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.
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.
Line 37: Line 36:


==Media==
==Media==
LIBXM7 demo: Rhubarbarian
LIBXM7 demo: Rhubarbarian<br>
 
<youtube>yr0UOMvpfNo</youtube>
<youtube>yr0UOMvpfNo</youtube>


LIBXM7 demo: Ribbed Rubber
LIBXM7 demo: Ribbed Rubber<br>
 
<youtube>DOTtW3GKVTs</youtube>
<youtube>DOTtW3GKVTs</youtube>


LIBXM7 demo: Parallax Glacier
LIBXM7 demo: Parallax Glacier<br>
 
<youtube>9e8uyL4Qngo</youtube>
<youtube>9e8uyL4Qngo</youtube>


==Changelog==
==Changelog==
'''Version 1.06 '''
'''Version 1.06 '''
 
* Bug fixed: Effect E5x (set note finetune) now works correctly also with MODs.
[bug] Effect E5x (set note finetune) now works correctly also with MODs
* Bug fixed: Effect Dxx (pattern break) works as expected when using hex values.
[bug] Effect Dxx (pattern break) works as expected when using hex values


'''Version 1.04 '''
'''Version 1.04 '''
*Add MOD support added for 4 and 8 channel modules subtypes:'M.K.','M!K!','FLT4','OCTA','CD81','FLT8'
*Added: 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'
*Added: MOD support added for 1 to 16 channel modules subtypes:'TDZx','xCHN','xxCH'.
*Add On-the-fly sample change feature, for ProTracker MOD modules
*Added: On-the-fly sample change feature, for ProTracker MOD modules.
*Add It's possible to select different replay modes
*Added: It's possible to select different replay modes.
*Add It's possible to select different panning modes and panning 'apertures'  
*Added: It's possible to select different panning modes and panning 'apertures'.


[XM7_LoadXM() ARM9 XM loading function:]
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
*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.


'''Version 1.00 '''
'''Version 1.00 '''
*Add Instrument panning envelope is now supported
*Added: Instrument panning envelope is now supported.
*Add Instrument 'auto' vibrato is now supported
*Added: Instrument 'auto' vibrato is now supported.
*Add Amiga frequency table mode (MOD native mode) 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 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 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 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: 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
*Bug fixed: Instrument finetune parameter 3 LSB are now ignored, as in FastTrackerII.


[XM7_LoadXM() ARM9 XM loading function:]
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
*Bug fixed: XM7_LoadXM() now doesn't fail while loading XMs containing multi-sample instrument with 16bits samples in it.


'''Version Beta 0.93 '''
'''Version Beta 0.93 '''
*Add Vibrato effect (4xy) and vibrato control effect (E4x) are now supported.
* Added: Vibrato effect (4xy) and vibrato control effect (E4x) are now supported.
*Add Tremolo effect (7xy) and tremolo control effect (E7x) are now supported.
* Added: Tremolo effect (7xy) and tremolo control effect (E7x) are now supported.
*Add Vibrato with volume slide effect (6xy) is now fully supported.
* Added: Vibrato with volume slide effect (6xy) is now fully supported.
*Add Tremor effect (Txy) is now supported.
* Added: Tremor effect (Txy) is now supported.
*Add Pattern loop effect (E6x) is now supported.
* Added: Pattern loop effect (E6x) is now supported.
*Add Instrument finetune effect (E5x) is now supported.
* Added: Instrument finetune effect (E5x) is now supported.
*Add Glissando control effect (E3x) is now supported.
* Added: Glissando control effect (E3x) is now supported.
*Add Vibrato volume column effect (Vx) is now supported.
* Added: Vibrato volume column effect (Vx) is now supported.
*Add Set vibrato speed volume column effect (Sx) 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: 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: 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: 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 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.
* 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:]
XM7_LoadXM() / XM7_Unload() ARM9 XM loading/unloading functions:
*Bug fixed: "squeezed" XMs can now be loaded correctly
* 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: 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()
* Bug fixed: XMs that fail to load now will be correctly unallocated from memory using XM7_Unload().


'''Version Beta 0.81'''
'''Version Beta 0.81'''
*Add Portamento slide effects (1xx, 2xx, E1x, E2x, X1x, X2x) are now supported.
* Added: Portamento slide effects (1xx, 2xx, E1x, E2x, X1x, X2x) are now supported.
*Add Portamento to note effect (3xx) is now supported.
* Added: Portamento to note effect (3xx) is now supported.
*Add Portamento to note with volume slide effect (5xy) is now fully supported.
* Added: 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.
* Added: Jump to position effect (Bxx) and Pattern break effect (Dxx) are now supported.
*Add Key off effect (Kxx) is now supported.
* Added: Key off effect (Kxx) is now supported.
*Add Portamento to note volume column effect (Mx) 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: 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: 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 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 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: 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.
* Bug fixed: libxm7 startSound() (internal) function has been renamed, so you don't have to rename yours.


'''Version Beta 0.59 '''
'''Version Beta 0.59 '''
*First release
* First release.


==Credits==
==Credits==
Line 121: Line 116:
Briend (c)runX 's help in teaching XM, back in 1997.
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.
raina's priceless work and modules.


Strobe's great help in finding lots of bugs while implementing new effects, and his 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.
Rhinostrich, setrodox, Magic Fred, Romeo Knight, ogge and Kmuland for their modules and the permission to use them.

Revision as of 23:32, 16 May 2021

LibXM7
File:Libmx7ds.png
General
Author(s)sverx
TypeMusic
Version1.06
LicenceMixed
Links
[Media:Libxm7106ds.zip Download]
Website
[Media:Libxm7exampledssrc.zip Source]
Advertisements

<htmlet>adsense</htmlet>

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.

Features

  • 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.

User guide

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.

LibXM7 demo (of version beta 0.93).

More information can be found here.

Media

LIBXM7 demo: Rhubarbarian

LIBXM7 demo: Ribbed Rubber

LIBXM7 demo: Parallax Glacier

Changelog

Version 1.06

  • 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.

Version 1.04

  • 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.

Version 1.00

  • 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.

Credits

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.

Advertising: