Feature #848
Set OpenMPT priority above ModPlug
100%
Description
I posted this before as note #303-6, however that bug is quite old (on top of being rejected) and I probably did not get noticed, so I am making a new report as a feature request.
Libmodplug is Audacious' library of choice for its official module playing input plugin, it enables playback of many old formats such as xm, it, mod, and others.
Unfortunately, libmodplug appears to be only sporadically maintained, the most recent commit listed on sourceforge as being 9357867, dated June 2nd, 2017, and on GitHub, af00e21, dated August 2nd, 2018. As listed on #303, it does have some playback issues with some modules, one of which I've attached to this report. Generally, it also plays modules back with a low amplitude, however that could be the result of Audacious' plugin's implementation.
In #303-2, libxmp was discussed, however the mentioned audacious plugin (#303-5) is no longer maintained, and libxmp itself appears to be sporadically maintained as well. The latest commit, 2a16cdf, is dated Oct 14th, 2018.
So, I suggest switching to libopenmpt, a cross-platform module playback library based off of OpenMPT, which is itself based off the open source release of ModPlug Tracker. It's actively maintained, (latest revision is rev 10998 dated November 25th, 2018) and should have better support for playing back modules accurately. The types of modules it supports should be equivalent or greater than libmodplug, a list of supported modules can be found on the features page. For example, libopenmpt handles the problematic module attached to this report flawlessly.
Chris Spiegel has created a working audacious plugin for this already, however his repo does not currently feature a code license. https://github.com/cspiegel/audacious-openmpt You might be able to get into a dialog with him about absorbing it into the audacious-plugins repo. His email listed in the git commit log is cspiegel at gmail.
I've used his plugin for a while and it works great in my experience, and the amplitude seems to be correct, so the modules don't sound so quiet compared to my other music files.
History
#1 Updated by John Lindgren almost 6 years ago
- Target version deleted (
3.10.1) - Affects version deleted (
3.10.1)
#2 Updated by Michael Schwendt almost 6 years ago
My advice: Don't "switch", but introduce a separate input plugin for a new MOD backend lib.
The rationale is simple. Hardly any MOD player lib is perfect. There are many thousands of MOD files. (Side-note: when I use the term "MOD" I don't refer to only the ancient .mod files from the late 80's and early 90's, but also the many derivatives that have been published later.) Typically, authors of new MOD playing libs start with a new set of test files, such as their favorite ones and new problematic ones pointed out in bug reports. A lib would need to be really popular for more users to give it a try and test it with old and new files in their own mod file collections.
Audacious runs fine with multiple MOD input plugins installed. Users may choose to disable individual plugins. No harm is done, if keeping alternative input plugins for some time.
About XMP and its plugin for Audacious: The plugin has been ported to Audacious 3 a long time ago and continues to work fine. I'm not aware of any immediate maintenance requirements. Libxmp is in a fine state and continues to receive fixes for problematic files when they come up. I don't think it supports the .dsm format of your test file. In modplug 0.8.9, some of the samples sound slightly out of tune here.
#3 Updated by Michael Schwendt almost 6 years ago
Interestingly, the "problematic module" attached to this ticket crashes openmpt123.
Going through a dir of testmods, I've found a few that don't play correctly (probably because Soundtracker detection isn't easy and some of the original mods are available as versions converted to Protracker) and one file that isn't recognized. Had files a modplug bug about it in 2011: https://sourceforge.net/p/modplug-xmms/bugs/13/
necros_-_spatial_distortion.dsm
$ openmpt123 necros_-_spatial_distortion.dsm openmpt123 v0.4.0, libopenmpt 0.4.0+r11103.pkg (OpenMPT 1.28.01.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.0@11103 (2018-12-23T13:06:52.605038Z) clean-pkg) Copyright (c) 2013-2018 OpenMPT developers <https://lib.openmpt.org/> /usr/include/c++/8/bits/stl_vector.h:932: std::vector<_Tp, _Alloc>::reference std::vector<_Tp, _Alloc>::operator[](std::vector<_Tp, _Alloc>::size_type) [with _Tp = OpenMPT::ModCommand; _Alloc = std::allocator<OpenMPT::ModCommand>; std::vector<_Tp, _Alloc>::reference = OpenMPT::ModCommand&; std::vector<_Tp, _Alloc>::size_type = long unsigned int]: Assertion '__builtin_expect(__n < this->size(), true)' failed. Aborted (core dumped)
#4 Updated by Jonathan Rubenstein almost 6 years ago
Michael Schwendt wrote:
Interestingly, the "problematic module" attached to this ticket crashes openmpt123.
Going through a dir of testmods, I've found a few that don't play correctly (probably because Soundtracker detection isn't easy and some of the original mods are available as versions converted to Protracker) and one file that isn't recognized. Had files a modplug bug about it in 2011: https://sourceforge.net/p/modplug-xmms/bugs/13/
necros_-_spatial_distortion.dsm
[...]
The problematic file I submitted doesn't crash openmpt123 for me, even using the same version
openmpt123 v0.4.0, libopenmpt 0.4.0+r11103.pkg (OpenMPT 1.28.01.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.4.0@11103 (2018-12-23T13:06:52.605038Z) clean-pkg) Copyright (c) 2013-2018 OpenMPT developers <https://lib.openmpt.org/>
I've tested on a freshly installed and up to date Debian Testing amd64 install in a VM, with only the 'standard' (no graphics) packages and openmpt123. I've attached the result of a
dpkg-query -l
on the VM. It works on the host too, but I made the VM just to be sure it wasn't my specific configuration that resolves the crash.
I think a new lib alongside libmodplug would work fine as well, as Michael suggests.
I believe libopenmpt is a better pick. But regardless, deprecating libmodplug, whether by replacing it completely, or offering an additional plugin on the side, would help with module playback immensely regardless of which one is chosen, since they are still actively maintained.¶
#5 Updated by Michael Schwendt almost 6 years ago
Debian Testing is somewhat behind Fedora because of Red Hat's involvement with GCC.
$ rpm -q gcc-c++ libstdc++ gcc-c++-8.2.1-6.fc29.x86_64 libstdc++-8.2.1-6.fc29.x86_64
It's the only file that crashes openmpt123 so far while parsing the pattern data.
#6 Updated by John Lindgren almost 6 years ago
Chris Spiegel has created a working audacious plugin for this already
I will wait for a request from Chris himself before "absorbing" his plugin into audacious-plugins. There is nothing wrong with him maintaining it out-of-tree if he prefers to do so (and it is probably less work for him that way).
#7 Updated by Jörn Heusipp almost 6 years ago
(I am the libopenmpt maintainer)
necros_-_spatial_distortion.dsm
Interestingly, the "problematic module" attached to this ticket crashes openmpt123.
This is a libopenmpt bug, I added a ticket to our bug tracker at https://bugs.openmpt.org/view.php?id=1191 . We will release a fix ASAP.
#8 Updated by Jörn Heusipp almost 6 years ago
necros_-_spatial_distortion.dsm
Interestingly, the "problematic module" attached to this ticket crashes openmpt123.
This is a libopenmpt bug, I added a ticket to our bug tracker at https://bugs.openmpt.org/view.php?id=1191 . We will release a fix ASAP.
Fixed in libopenmpt 0.4.2: https://lib.openmpt.org/libopenmpt/2019/01/22/security-updates-0.4.2-0.3.15-0.2.11253-beta37-0.2.7561-beta20.5-p13-0.2.7386-beta20.3-p16/
#9 Updated by Chris Spiegel almost 6 years ago
John Lindgren wrote:
Chris Spiegel has created a working audacious plugin for this already
I will wait for a request from Chris himself before "absorbing" his plugin into audacious-plugins. There is nothing wrong with him maintaining it out-of-tree if he prefers to do so (and it is probably less work for him that way).
Hi, I'm the author of this plugin. If you'd like it integrated with audacious-plugins, I'd be happy to move it there. It's 2-clause BSD licensed (I've just added an explicit LICENSE file to clarify this) so should be no issues there. If you're interested, let me know what I can do to help get it moved over.
#10 Updated by Chris Spiegel almost 6 years ago
Chris Spiegel wrote:
John Lindgren wrote:
Chris Spiegel has created a working audacious plugin for this already
I will wait for a request from Chris himself before "absorbing" his plugin into audacious-plugins. There is nothing wrong with him maintaining it out-of-tree if he prefers to do so (and it is probably less work for him that way).
Hi, I'm the author of this plugin. If you'd like it integrated with audacious-plugins, I'd be happy to move it there. It's 2-clause BSD licensed (I've just added an explicit LICENSE file to clarify this) so should be no issues there. If you're interested, let me know what I can do to help get it moved over.
I decided to just take a look and see the level of effort needed to incorporate the plugin into audacious-plugins, and it was very easy. So I've now got a preliminary pull request at https://github.com/audacious-media-player/audacious-plugins/pull/68.
As noted in the pull request, I didn't replace the libmodplug plugin, instead just making it lower priority, so that anybody without access to libopenmpt can still have a tracker plugin.
#11 Updated by John Lindgren almost 6 years ago
- Subject changed from Replace libmodplug with libopenmpt to Set OpenMPT priority above ModPlug
The OpenMPT plugin is now merged but has lower priority than ModPlug for now. As discussed on GitHub, that's to give people a chance to test it out in the next release before dropping it on everyone as the default. I'm leaving this ticket open as a reminder to swap the priorities for the release after next.
#12 Updated by John Lindgren about 4 years ago
- % Done changed from 0 to 100
- Status changed from New to Closed
OpenMPT is now the default in Git master.
#13 Updated by Thomas Lange about 4 years ago
- Target version set to 4.1