artefact2 / libxm Goto Github PK
View Code? Open in Web Editor NEWA small XM (FastTracker II Extended Module) player library.
License: Do What The F*ck You Want To Public License
A small XM (FastTracker II Extended Module) player library.
License: Do What The F*ck You Want To Public License
is there easy way in code to convert this to 16bit pcm instead of ieee float wav file which is not valid for openal to play
I noticed that the license for this repository is WTFPL, and was wondering if I could license the code under the combination of Unlicense (also public domain) and MIT License. The main reason for this is to hopefully allow for better adoption in a fashion similar to what Sean Barret's Single File Library's repository uses.
https://modarchive.org/module.php?33498
Gets stuck in a loop using 100% of the CPU at the 1:18 mark.
Spd[05/75] Pos[0C/29] Pat[06/32] Row[22/40] Loop[00/01] 00:01:18.88
Write a little helper program (xmanalyze?) that loads a module and sees which effects are used. The program spits out CFLAGS to build libxm with only these effects enabled. Maybe this saves a couple dozen bytes for demos and such.
Things that could be somewhat easily #ifdef'd out:
I'm writing a Rust wrapper for libxm
, and noticed that there's no bounds for moddata
in xm_create_context()
. This is obviously bad if moddata
is corrupted or invalid.
From what it appears, you seem to be aware of this issue already; it's listed in the README as:
Are there any plans to address this issue in the near future?
Gave it a spin with some tricky songs, and unfortunately I noticed some bugs that also appear in several other player libs. Note that it might be the songs that are at fault, with certain libs (xmplay/bassmod, openmpt/modplug, milkytracker/milkyplay) taking steps to cover it up. I don't know enough about the file format to judge.
.
binary_world.xm goes bad 39sec in, and OpenMPT has slight issues too
http://modarchive.org/module.php?138953
http://clyp.it/hhp3pfex
.
around 51sec, the lead echo in colond.xm is played at a slightly different pitch than the main lead, resulting in phasing
http://modarchive.org/module.php?174415
http://clyp.it/gfuaa1do
.
as jt_strng.xm hits the higher notes at 35sec, they go off-pitch.
libxm gets a fair bit of static as well but I suppose that's intended
http://modarchive.org/module.php?46508
http://clyp.it/nh15rq5h
.
synthetic_attack.xm plays correctly but segfaults at the end: (fixed in ac0bbdb, the module file is unsane. Opening then resaving the module in MilkyTracker fixes it.)
http://modarchive.org/module.php?142503
#0 xm_row (ctx=0x7f8d92832010, output=, numsamples=128) at /libxm-master/src/play.c:847
#1 xm_tick (ctx=0x7f8d92832010, output=, numsamples=128) at /libxm-master/src/play.c:948
#2 xm_sample (ctx=0x7f8d92832010, output=, numsamples=128) at /libxm-master/src/play.c:1293
#3 xm_generate_samples (ctx=0x7f8d92832010, output=, numsamples=128) at /libxm-master/src/play.c:1340
.
zalza-tequila_groove.xm throws assertion failures, (fixed in f24bcab)
and some static at the 49sec and 58sec marks:
http://modarchive.org/module.php?66518
xm_sample(): final sample value is 136597905678638606450688.000000, this is a bug
xm_sample(): final sample value is 296616456960244306673664.000000, this is a bug
xm_sample(): final sample value is 144714319948683478564864.000000, this is a bug
.
All tests done with master as of writing.
Also, what are those (*) in the effects table?
Just to log it, there's another bug in Rxy which I'm not planning to fix for now. If a row contains no note but an instrument with the Rxy effect, what happens is that on tick 0, the ghost note of the previous instrument plays (as per standard behavior with rows that contain instruments without notes), but on the first retrigger the instrument is changed to the new one. So actually the instrument changes mid-row.
This looks harder to implement because the logic to change instruments is not part of xm_trigger_note
, but I haven't investigated into it. If you want, I can open an issue to log this.
Originally posted by @rasky in #20 (comment)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.