Playdate MOD player
A downloadable tool
A ProTracker module player library for Playdate written 100% in Lua.
Playdate MOD player can play ProTracker .mod
modules and its most
common
4-channel extended versions.
The library has been completely written from scratch, so don't expect it to be perfect. It still does the job pretty well and a lot of love has been put into it. I also intend to dogfood the player in my own games, so you can expect fixes and improvements over time.
Demo
You can also check out Amigo Tracker to hear the library in action.
What's in the box?
- Perpetual license (just keep the receipt and you're golden)
- Minified modplayer.lua module with a LuaLS compatible API
- HTML documentation
Why not open source?
It's still a fresh library and I want to keep things simple for myself for now. That said, I might include the full source code in later releases for your convenience.
Features
- Can load 4-channel MODs. Most 1-15 and 1-31 versions are supported.
- Playback at any refresh rate.
- Crank mode (playback only advances when you rotate the crank)
- Load-time resampling.
- Advanced APIs for displaying information etc.
- Module metadata
- Playback information
- Pattern data
Limitations
- Due to the lack of direct access to the audio buffer in Playdate API, low refresh rates will increase the probability of timing errors.
- Because Playdate Lua API can only load samples from files, the player uses a cache. This increases loading times and takes up some space, but can be mitigated using external samples.
- Resampling will considerably increase loading times.
Performance
Playdate MOD player is relatively easy on the CPU, but fast songs require 50 fps refresh rate. Experiment with different setups to find the best fit for your project.
The player works best with Garbage Collection turned off. Lua GC is not designed for fast updating apps and will eat up your CPU even if there is nothing to clean.
Here's some example data from my own platformer game*:
*) 50 fps refresh rate, 45 fps game update, GC off.
Effects
Here's an exhaustive list of MOD effects and their support status.
Effect | Support | Description |
---|---|---|
0xy |
yes | Arpeggio |
1xx |
yes | Portamento up |
2xx |
yes | Portamento down |
3xx |
yes | Tone portamento |
4xy |
yes | Vibrato |
5xy |
yes | Volume slide + Tone portamento. |
6xy |
yes | Volume slide + Vibrato. |
7xy |
yes | Tremolo |
8xx |
yes | Set panning |
9xx |
yes | Sample offset |
Axx |
yes | Volume slide |
Bxx |
yes | Position jump |
Cxx |
yes | Set volume |
Dxx |
yes | Pattern break |
E0x |
-- | Set filter |
E1x |
yes | Fine portamento up |
E2x |
yes | Fine portamento down |
E3x |
-- | Glissando control |
E4x |
-- | Set vibrato waveform. Not supported, always sine |
E5x |
yes | Set finetune |
E60 |
-- | Pattern loop start |
E6x |
-- | Pattern loop |
E7x |
-- | Set tremolo waveform. Not supported, always sine |
E8x |
yes | Set panning. 8xx is more accurate version of the same effect |
E9x |
yes | Retrigger sample |
EAx |
yes | Fine volume up |
EBx |
yes | Fine volume up |
ECx |
yes | Note cut |
EDx |
yes | Note delay |
EEx |
yes | Pattern delay |
EFx |
-- | Invert loop |
Fxx |
yes | Set speed / tempo |
Attribution
- https://www.aes.id.au/modformat.html
- https://wiki.multimedia.cx/index.php/Protracker_Module
- https://wiki.openmpt.org/Manual:_Effect_Reference
- http://coppershade.org/articles/More!/Topics/Protracker_File_Format/
- https://github.com/johnnovak/nim-mod/blob/master/doc/Protracker%20effects%20(Fir...
- https://www.eblong.com/zarf/blorb/mod-spec.txt
- https://masm32.com/board/index.php?topic=7993.msg87456#msg87456
License
Playdate MOD player is licensed under a non-exclusive, royalty-free, non-transferrable, irrevocable perpetual license.
Terms and Conditions
Redistribution of Playdate MOD player is permitted provided that the following conditions are met:
- The distributor holds a valid license purchased from the copyright holders.
- Playdate MOD player is only distributed as a part of another software product.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Playdate MOD player, Copyright © Outgunned Games 2024. All rights reserved.
Purchase
In order to download this tool you must purchase it at or above the minimum price of $15 USD. You will get access to the following files: