Extended Module Player Library (libXMP) plugin for XMPlay

Started by bauxite69,

bauxite69

Hi everyone !


First try, first plugin  ;D

I've decided to create a native plugin for XMPlay (the best module player in the world  8)).
This plugin supports the Extended Module Player Library (libXMP) from https://github.com/libxmp/libxmp written by Claudio Matsuoka, Hipolito Carraro Jr., Mirko Buffoni and libXMP developers.

Download (OneDrive) the latest version of xmp-libXMP.dll, libxmp.dll, in_xmp.dll and xmp.exe

Changelog : See xmp-libxmp.txt


Ian @ un4seen

Moar plugins! :)

Quote from: bauxite69@Ian: How can i tell to XMPlay to restart a song or set position ? I tried with XMPFUNC_MISC->DDE but with no luck.  Maybe i used the wrong syntax. ? 

Do you mean when looping? If so, you signify the end by delivering less data than requested in your Process function, and then XMPlay will call your SetPosition function to go back to the start. If you include XMPIN_FLAG_LOOP in the plugin's flags, then the XMPIN_POS_LOOP or XMPIN_POS_AUTOLOOP value will be used in the SetPosition function to request looping or auto-looping. In the auto-looping case, the function should only loop when a loop has been detected, and otherwise return -1. If the time of the loop start position is known, that should be returned, otherwise -2 can be returned to let the time run on.

saga


manx


Seeing the looping API being discussed here: xmp-openmpt appears to have requirements that the current xmplay plugin API can not support.
I'm not sure if this also applies to libxmp as well, so I decided to not hijeck this thread and use the xmp-openmpt thread instead. See
http://www.un4seen.com/forum/?topic=15448.msg112431#msg112431.

bauxite69

Quote from: Ian @ un4seenMoar plugins! :)

Do you mean when looping? If so, you signify the end by delivering less data than requested in your Process function, and then XMPlay will call your SetPosition function to go back to the start. If you include XMPIN_FLAG_LOOP in the plugin's flags, then the XMPIN_POS_LOOP or XMPIN_POS_AUTOLOOP value will be used in the SetPosition function to request looping or auto-looping. In the auto-looping case, the function should only loop when a loop has been detected, and otherwise return -1. If the time of the loop start position is known, that should be returned, otherwise -2 can be returned to let the time run on.

yep was for looping

Thanks !


But how can i use DDE ? For example : 297 MOD - Interpolation

Ian @ un4seen

Are you trying to query XMPlay's MOD interpolation setting? If so, I'm afraid that isn't possible via DDE. If your plugin has interpolation settings, it could provide its own config options for that (via its Config function), which it can store in its own XMPLAY.INI section (via the XMPFUNC_REGISTRY functions). A little demonstration of implementing config options can be found in the FLANGE example included in the plugin SDK.

bauxite69

Quote from: Ian @ un4seenAre you trying to query XMPlay's MOD interpolation setting? If so, I'm afraid that isn't possible via DDE. If your plugin has interpolation settings, it could provide its own config options for that (via its Config function), which it can store in its own XMPLAY.INI section (via the XMPFUNC_REGISTRY functions). A little demonstration of implementing config options can be found in the FLANGE example included in the plugin SDK.

Everything works fine with the plugin, interpolation and the setting in XMPLAY.INI.

I'm just curious how i can send DDE command through the plugin ?

Ian @ un4seen

OK. You need to prefix the command number with "key" when passing it to the DDE function. For example...

xmpfmisc->DDE("key297"); // "MOD - Interpolation" command

Note the command numbers are shortcut IDs, so plugin shortcuts/commands can also be accessed this way.

bauxite69

Quote from: Ian @ un4seenOK. You need to prefix the command number with "key" when passing it to the DDE function. For example...

xmpfmisc->DDE("key297"); // "MOD - Interpolation" command

Note the command numbers are shortcut IDs, so plugin shortcuts/commands can also be accessed this way.

Thank you

saga

Meh... if possible, you should disable support for Adlib formats. xmp's Adlib format support seems to be pretty bad, judging on a few HSC tunes it decided to play. There are already better plugins to handle Adlib formats such as in_adplug.

bauxite69

Quote from: sagaMeh... if possible, you should disable support for Adlib formats. xmp's Adlib format support seems to be pretty bad, judging on a few HSC tunes it decided to play. There are already better plugins to handle Adlib formats such as in_adplug.

Done.

xmp-libxmp v0.3 changes :

Adlib Formats AMD, HSC and RAD disabled.

Update to LIBXMP 4.3.1

saga

Thanks a lot!
Are you going to release the source of your plugin sometime?

deus-ex

Hi bauxite69,

nice one, congratulations on your first plugin.  :)

Are you going to add an dialog allowing to en-/disable each of the supported formats separately? Because Xmp-LibXMP is in competition with the plugin Xmp-OpenMPT by saga as both plugins cover a quite similar set of module formats. Currently your plugin grabs every format it supports for playback, disregarding any other installed input plugin.

Btw, I added a little documentation to the distribution of your plugin. I hope it finds your approval: Xmp-LibXMP (eXtended Module Player) v0.3


@Ian:
I think this plugin is a worthy candidate to be added to the XMPlay plugins section.

bauxite69

Quote from: deus-exHi bauxite69,

nice one, congratulations on your first plugin.  :)

Are you going to add an dialog allowing to en-/disable each of the supported formats separately? Because Xmp-LibXMP is in competition with the plugin Xmp-OpenMPT by saga as both plugins cover a quite similar set of module formats. Currently your plugin grabs every format it supports for playback, disregarding any other installed input plugin.

Btw, I added a little documentation to the distribution of your plugin. I hope it finds your approval: Xmp-LibXMP (eXtended Module Player) v0.3


No problem with the documention, go ahead !

I'll add the updated documentation to the next release.

I'll try to add a dialog to en-/disable each of the supported formats...

Do you need in_xmp.dll and libxmp.dll updated to LIBXMP 4.3.1 (now run on Windows XP) ?


deus-ex

Quote from: bauxite69I'll try to add a dialog to en-/disable each of the supported formats...

That's nice to hear. In case you run in any obstacles I'm sure you have at least two very competent programmers following this thread who are surely willing to lend a helping hand (or a snippet of source code example).  :)


Quote from: bauxite69Do you need in_xmp.dll and libxmp.dll updated to LIBXMP 4.3.1 (now run on Windows XP) ?

I wasn't going to bother you about this after you released a native XMPlay plugin version. Then again there are sure a lot of Winamp die-hards out there, so if it's not to much to ask for I'd be more than happy to upload an update of the Winamp edition of your plugin.

EDIT: grammar

bauxite69

Quote from: deus-exI wasn't going to bother about this you after you released a native XMPlay plugin version. Then again there are sure a lot of Winamp die-hards out there, so if it's not to much to ask for I'd be more than happy to upload an update of the Winamp edition of your plugin.

in_xmp and libxmp 4.3.1


deus-ex

Thanks, the updated plugin is online now.

Say, you wouldn't happen to have an update of xmp.exe as well? You used to provide it together with the Winamp plugin, and I used to make it available as an alternative download. Latest version online is v4.0.8. ::)

bauxite69

Quote from: deus-exThanks, the updated plugin is online now.

Say, you wouldn't happen to have an update of xmp.exe as well? You used to provide it together with the Winamp plugin, and I used to make it available as an alternative download. Latest version online is v4.0.8. ::)

xmp.exe 4.0.9


bauxite69

Quote from: deus-ex
Quote from: bauxite69I'll try to add a dialog to en-/disable each of the supported formats...

That's nice to hear. In case you run in any obstacles I'm sure you have at least two very competent programmers following this thread who are surely willing to lend a helping hand (or a snippet of source code example).  :)


I managed to add a dialog and now you can en-/disable each of the supported formats.

v0.4, 2014-11-17
 · Re-enabled Adlib formats .AMD, .HSC and .RAD
 · Added dialog in plugin configuration to en-/disable each of the supported formats


bauxite69


v0.7, 2014-11-24
 · Added support for subsongs


@Ian: xmp-libxmp works fine with subsongs so far, but i need your help. I can't figure out how to build subsongs tags. Do i need to create a new array ? I've tried a few ideas, but this leads to a crash. Meanwhile, GetFileInfo will receive XMPIN_INFO_NOSUBTAGS.


 

Ian @ un4seen

The tags should be delivered as a series of null-terminated strings containing tag names and values, ending with a double-null. The GetTags function should only give the tags of the current subsong. GetFileInfo gives the tags for all subsongs, and when when not using the XMPIN_INFO_NOSUBTAGS option, each subsong's tag block should follow the other. For example, the tags for 2 subsongs could look like this: "FileType\0type\0Title\0title1\0\0FileType\0type\0Title\0title2\0\0" (where "\0" = null). The memory for the tag block should be allocated with the XMPFUNC_MISC Alloc/ReAlloc functions.

bauxite69

Quote from: Ian @ un4seenThe tags should be delivered as a series of null-terminated strings containing tag names and values, ending with a double-null. The GetTags function should only give the tags of the current subsong. GetFileInfo gives the tags for all subsongs, and when when not using the XMPIN_INFO_NOSUBTAGS option, each subsong's tag block should follow the other. For example, the tags for 2 subsongs could look like this: "FileType\0type\0Title\0title1\0\0FileType\0type\0Title\0title2\0\0" (where "\0" = null). The memory for the tag block should be allocated with the XMPFUNC_MISC Alloc/ReAlloc functions.

Thanks !

Now we have xmp-libxmp fully supporting subsongs. :)

bauxite69

Quote from: sagaThanks a lot!
Are you going to release the source of your plugin sometime?

In the next release, i'll include the sources.

bauxite69

Quote from: deus-exThanks, the updated plugin is online now.

Say, you wouldn't happen to have an update of xmp.exe as well? You used to provide it together with the Winamp plugin, and I used to make it available as an alternative download. Latest version online is v4.0.8. ::)

in.xmp.dll 4.0.0
libxmp.dll 4.3.2
xmp.exe 4.0.10

From now on, in_xmp.dll will display the version of libxmp.dll loaded.