Home Artists Posts Import Register
Patreon importer is back online! Tell your friends ✅

Content

For those of you not in the Discord server I thought it might be nice to get an idea of what's been going on since the last beta / preview build was made available almost 3 months ago (that time has flown by) & also to be a small perk with being a WACUP patron until the next build eventually appears.

The #7236 build is fair to say has been the most popular WACUP preview build so far & I'm thankful that the issues with the prior site hosting didn't happen with that build. The new hosting seems to be doing what I want in that I've not had an complaints or detected outages & it's doing as it's meant to albeit being noticeably faster based on the comments at the time of the migration.

With the site migration out of the way & the initial triaging of issues that had arisen from the preview build, I went down the rabbit hole with a few of the reported issues that have led me to finally drop the use of the Winamp 5.666 media library core plug-in (gen_ml.dll) & instead use an all WACUP provided implementation as part of the WACUP core (there's an easy option on the Media Library preferences page to enable or disable the whole media library feature).

-

But why not do it as a plug-in you might be asking? It did start out as a plug-in but as the aim of WACUP is to provide Winamp 5.666 compatibility, having the ability to always support the Winamp Media Library plug-ins (with the handy on/off switch) just makes things more consistent within the source code along with sharing more common code between the handling of all of the plug-in types.

That makes for smaller code size overall & a few 10's of kilobytes is negligible on the size increase on the WACUP core dll vs the overhead that doing it as a plug-in would be. It also makes things simpler to ensure how & when the media library plug-ins are loaded to help minimise the impact on loading times that they can cause (especially a cause with the local library plug-in depending on the size of the local library database to load).

There's going to be some aspects that are incomplete at least for the first beta build with this change (e.g. no skinned menus & missing icons in the navigation list & a few other places) but that's not critical vs testing the new core is working correctly.

-

After getting the media library core handling swapped over & slew of related changes which I'm hoping will make WACUP faster to load compared to the current build & definitely so compared to Winamp 5.666 (that thing is very clunky feeling to load when I do have to use it for comparison testing), I moved on to taking over the remaining classic skin drawing of the main & equaliser windows.

Up to now, the classic skin handling has been a mismatch of the Winamp core doing something aspects whilst other parts have been done by the WACUP core. This mismatch had become an issue with some things not being drawn due to the calls to the Winamp core not being run or the replacement handling not being able to be complete in how it works (e.g. the workaround that was needed to avoid triggering the playback buttons on the main window when toggling its windowshaded mode).

This has been slow going as there's a few aspects (mostly related to the equaliser core - see below) that still require some interaction with the Winamp core & whilst my x86 assembly patching isn't the best, I've hopefully got something that will work without crashing.

Replacing the equaliser core is something that I've got to come back to & I've still to pick a solution so for now using the Winamp core for it is still going to be a thing for a while.

Back to the skinning, the importance of taking over this from the Winamp core means once the replacement implementation has been confirmed as good, I can start to make subsequent changes that'll allow for leveraging alpha transparency in png files for the classic skin elements which I know is late to the party but for those who might still be interested it might make for some interesting post-Winamp era classic skins. For example the edges of the main window will be able to have smooth corners with blending compared to the fake transparency that classic skins currently support & which are hard-cut edges.

There's also the scope to offer higher window scaling though whether it's as customisable compared to the Winamp3/ modern skins I don't know as the initial testing of upscaling a classic skin main window often doesn't look nice if not done at a whole multiplier (e.g. 2x, 3x, 4x) due to a lot being designed for the pixel art aesthetic.

-

The final main aspect of what's been done is going through & removing any of the live patching that I've been doing where I can be certain that it's no longer needed. This has been a bit tedious & from a user view point probably doesn't make much sense as it's all under the hood stuff but it helps to have gone through this & done the clean-up / removal.

By doing so I've been able to confirm that either the Winamp core is no longer running certain actions (e.g. related to the main playlist) or that some are still being called but with the other work done I can basically turn them into non-functioning (NOP) method calls (e.g. some of the skin initialisation methods) that don't need to be duplicated with the handling I'm now doing.

There's still annoyingly for me around a third of the live patches still in place but fewer is always a good thing since I'm itching to get to the point of dropping the Winamp core completely.

For reference, I count the Winamp core as anything that's directly provided by the original winamp.exe from 5.666 (named winamp.original in the WACUP installation folder) & the tricky aspects are going to be equaliser (mostly from needing to find a good quality solution) & some of the Wasabi related configuration / services (these weren't documented in their Winamp 5.x versions so need to be reverse engineered to determine the interface).

Once the Winamp core is gone, not only will be back to a more normal program setup with just 1 exe running (unlike the 2 at the moment), I'll then be a position to start dealing with the command-line & file association / shell handling which hasn't been worth trying to patch it & then have to contend with removing it & implementing it natively when it can just be implemented once (hopefully with it working :) ).

-

After all of that waffling, if you've made it this far, lets see if the Patreon post will mangle the interim changelog for what will become v1.1.0 beta which reveals a few more things that have been worked on including some hopefully welcome additions.

  • Added an initial input plug-in for playing local Opus audio files (streaming support will follow later once the base plug-in including it's handling of metadata editing has been confirmed as working ok)
  • Added 4 input plug-ins to the installer which add support for DS Sound Format (in_2sf.dll), Game Boy Advance Sound Format (in_gsf.dll), DS Nitro Composer Sound Format (in_ncsf.dll) & SNES Sound Format (in_snsf.dll) which increases the out of the box support for video game related format (these are modified from https://github.com/CyberBotX/in_xsf/ to improve WACUP the integration & resolve some issues)
  • Added reporting of the overall initial loading time (more might be happening after this time) & the time for the main aspects of the core to load into the load profiling output (some might find it useful 
  • if your WACUP install seems to take an unreasonable amount of time as a means of confirming if that is the case)
  • Added options onto the equaliser window 'auto' button right-click menu & the appropriate equaliser under modern skins to control additional equaliser preset handling to auto-select based on the reported genre of the playing item (this is the merging of the old 'Auto EQ' plug-in into the WACUP core to make things a bit quicker & more seemless with this feature that many had wanted over the years)
  • Added the helper IPC_TOGGLE_MUTE & IPC_IS_MUTED api for plug-ins to use to be able to toggle the current playback volume between muted & the previous level (if the user hasn't changed it since the api was called) & to check if the muted state is currently set (please note that this does not relate to the self managed mute option that modern skins offer)
  • Changed the classic skin main & equaliser windows to now be drawn & handled just by the WACUP core instead of letting the Winamp core do it - this is a MASSIVE change & there's likely to be some minor issues with things maybe not reacting like Winamp did though it's also allowed for refining some actions (e.g. easier access to the known equaliser presets via the menus instead of going into a dialog)
  • Changed some of the metadata handling to avoid some more non-metadata specific values being queried from the taglib based handling (seen in a waveform seeker crash when the 'type' was being queried)
  • Changed how some of the internal main playlist title sanitisation is done in response to a crash report seen within that handling
  • Changed how the reading in of the configuration is done to hopefully work around an odd runtime handling issue seen in some crash reports which prevents WACUP from being able to complete its loading
  • Changed libvorbis.dll to export some more methods that are needed by the recent updates below (the downside of trying to size optimise dlls at times)
  • Changed the handling of plug-in unloading to try to deal with some odd crashes seen when trying to determine the validity of the plug-in information (e.g. related to stacked plug-ins)
  • Changed the media library plug-ins to be able to directly indicate they want their preferences to be placed under the 'media library' node so the media library core doesn't need to figure it out (that behaviour is still maintained for compatibility with older media library plug-ins)
  • Changed ml_wire.dll to now be named as ml_podcast.dll since this makes more sense when browsing the plug-ins & because I no longer need to maintain compatibility with the legacy media library core plug-in
  • Changed the Waveform Seeker plug-in to not process any files supported by the newly added in_xsf plug-ins (see top) due to it triggering thread-safety issues within the plug-ins (not ideal but it's better than it crashing until something can hopefully be done to the upstream copies of the plug-ins to fully resolve this issue)
  • Changed the media library plug-ins provided with WACUP to use a newer revision of the media library plug-in interface (this won't prevent older media library plug-ins from being used & like has been done with other plug-ins under WACUP offers better integration for the native WACUP plug-ins)
  • Changed the media library plug-ins to use more shared code for a small saving whilst changing them to use some direct library api calls instead of the slower SendMessage(..) based calls
  • Changed how the export menu on the library button & window menu (if using a modern skin) are handled to better ensure they update if there's changes with the library views available (this also removes the plug-in trying to pre-populate on loading for a small performance improvement on loading)
  • Changed how the album art plug-in works to use a simple cache to help minimise its overall impact on WACUP's load time as well as reducing how often it re-queries metadata
  • Changed the references to use of the spacebar in the milkdrop window to better reflect that shift+spacebar is the preferred soft-cut to next preset action from trying to better ensure that spacebar works uniformly for toggling the playback state)
  • Changed how the Win7shell plug-in & related DWM (desktop window manager) methods are handled when attempting to use WACUP on some esoteric setups where the DWM methods needed aren't available
  • Changed how the main playlist editor drawing is handled to minimise the chances with some modern skins on loading / change from another skin (e.g. Big Bento) for it to show the items using the classic base skin colour with a fallback system font (this also offers a small reduction on loading times but the main thing is to avoid the jarring mixed look whilst the skin engine is still doing it's initial loading)
  • Changed how playlist entries are handled when read to minimise associated drive activity (especially when using HDDs over SSDs) & to avoid offline UNC based paths triggering validity checks to help resolve reported issues with excessively long initial loading times (e.g. a 1200 entry test playlist went from 33ms to 6ms be loaded on my development machine - 6ms is how long a 300 entry playlist before the changes would take for comparison - the change also meant a 4.6s wait with a playlist containing an UNC path went away)
  • Changed how the library bookmark & podcast download views work to reduce their impact on initial loading time if they were the last view prior to closing (is more work that needs to be done for the other library plug-ins)
  • Changed how the classic skin oscilloscope is handled to have it better fill the available area it's drawn into whilst making it less likely to appear as top heavy when using the solid drawing mode
  • Changed some of the handling around the Alt+3 File Info dialog to better deal with edits failing to be saved (e.g. if it cannot be applied on the currently playing file)
  • Changed some of the handling around trying to update the metadata of the currently playing file (still more to do but this should help with some of the reported issues)
  • Changed the plug-in profiling support to release its log file where possible once loading has finished
  • Changed the skinned preferences handling to prevent trying to override the winamp.ini setting to manually enable it when running WACUP on WINE
  • Changed the write ratings option to be disabled if the replacement local library plug-in is being used (still need to sort out a better shared handling for this so it's not reliant on a local library plug-in though it will still remain as a default option when re-implemented - we can all thank a certain singer user for that)
  • Changed how the splash screen on start-up action is handled so it will now be cancelled just after it's loaded instead of waiting for a generic time (also from testing, the splash screen seems to add around 10% to the initial loading time so keep that in mind if you want WACUP to load as fast as possible)
  • Changed how the oscilloscope data is rendered in the main window visualisation & related plug-in api calls so it should now be oriented in the correct way compared to other software
  • Changed how Milkdrop deals with running on a monitor in portrait mode to now by default attempt to fill the monitor instead of only filling half of it (this can be manually done via the 'dualhead' options) 
  • Changed how the library playlists root & child playlist views (if enabled) are managed to reduce the delay / impact of them upon the initial load time of WACUP if they're the last view being restored
  • Fixed importing some files into the replacement local library database causing a crash due to an issue with processing some of the associated artwork information for the file
  • Fixed the probable cause of the Waveform Wrapper plug-in sometimes causing a crash when attempting to process the redirected 'isourfile' check by in_mp3
  • Fixed the probable cause of the WINE detection check in the crash reporter causing the crash reporter to crash (this change based on a recent crash report seen showing this weirdness)
  • Fixed the GetLanguageIdentifier(..) localisation stub to return a hard-coded 'en-US' response to resolve a modern skin compatibility issue
  • Fixed some font handling related issues with the Big Clock plug-in such as when it's already in double-size mode or if the font selection dialog is cancelled which would reset the font back to generic one until restarting WACUP
  • Fixed a random issue that could affect some setups causing them to hard-crash early on during loading
  • Fixed the main notification area icon tooltip text not updating as expected if it's been set to show the currently playing position
  • Fixed the main context menu on the classic skin video window frame not being correctly initialised (e.g. skins sub-menus not being populated)
  • Fixed a GDI object leak when triggering a classic skin refresh
  • Fixed some crashes related to loading of the Alt+3 File Info dialog & the mis-handling of the raw metadata dumping tab (e.g. doing so when a background ml_local library scan is active or if no information can be provided which could cause a cyclic querying & eventual crash)
  • Fixed the classic skin main window song ticker jumping oddly / showing a blank space at times (this was something I'd patched out but had managed to mess up some of the calculations due to using the wrong font which skewed things - was worse the longer the song title to be shown got)
  • Fixed the main window playback position not showing for the first second or so when playback is started under a classic skin (this was an issue caused by some of the live patching I'd been doing previously)
  • Fixed some of the Winamp core configuration options not being correctly read in & applied from a WACUP handling (e.g. the option to disable window snapping)
  • Fixed video playback output 'stopping' (it still happens but can't be seen) when moving the video window from the initial monitor that playback was started on to another one (was due to mis-understanding of an api parameter whilst trying to resolve a different issue)
  • Fixed (completely I hope) a flickering that can be seen when resizing the classic skin video window whilst a video is playing (was an odd directx vs normal window weirdness)
  • Fixed Not So Yasapi not allowing in_mp3 (Winamp's main stream handling plug-in) to play most streams given to it with it showing an error about not being able to save streams
  • Fixed the saving of M3U8 / M3U / PLS playlists to correctly handle titles with line breaks in to not break the subsequent reading of the playlist (this was found from an internet radio station which had line breaks as part of it's station name)
  • Fixed the equaliser window tooltip appearing being behind the equaliser window at times
  • Fixed the equaliser auto loading mode not working for some time due to the Winamp core method not being called (no longer an issue as it's all done natively by WACUP now)
  • Fixed the IPC_REGISTER_LOWORD_COMMAND handling so it will return the pre-incremented number which helps fix a conflict found with the batch allocation (e.g. toggle an option & something else also reacts)
  • Fixed the podcast downloads window sometimes not updating the status of the currently downloading items due to a timing issue with the view initialisation
  • Fixed the handling of some of the core windows when using a classic skin not being saved / restored in an expected manner when the monitor those windows were on are deemed to be to the left of the main monitor position (aka not handling negative window positions correctly)
  • Fixed the scrollbar handling when using the replacement media library core not reacting correctly if the window showing the scrollbar was to the left of the main monitor position (see above)
  • Fixed the library history plug-in not always updating the playback state if the option to wait is unchecked or the internal timer manages to fire before the reported playback position is valid
  • Fixed the current playback time position in the classic skin playlist editor window (bottom right) not using the xx:xx style of time formatting when not using the skinned font for improved consistency
  • Fixed clicking the current playback time position in the classic skin playlist editor window (bottom right) not toggling the time elapsed / remaining mode as Winamp does
  • Fixed the classic skin window docking not working correctly when video support is disabled (either by de-selecting video support during installation or by later disabling the appropriate input plug-ins)
  • Fixed the video menu items incorrectly showing in the main right-click & modern skin windows menu when there's no applicable video support enabled in the current WACUP instance
  • Fixed the classic skin main window songticker & all other parts of the playlist editor window to use the appropriate defined font from the skin or via the the custom font selection on the Playlist preferences page (this may not be ideal for some of the fonts that can be specified vs the available area to be drawn into but it should make things a bit more consistent with the look of the classic skin where it's used - this also marks a deviation away from Winamp which only used Arial for the selection / playback state in the bottom right-corner of the playlist editor window)
  • Fixed the vertical divider on the library playlists root view not always being positioned correctly on the first loading of the view
  • Fixed selecting no playlist in the library playlists root view not being remembered the next time the library playlists view is loaded
  • Fixed changing the long time formatting option on the General preferences page not live updating the classic skin playlist editor window selection area immediately to match
  • Removed the use of the Winamp 5.666 media library core plug-in (gen_ml.dll) to now be an all WACUP provided implementation as part of the WACUP core (there's an easy option on the Media Library preferences page to enable or disable the whole media library feature) though there will be some issues / missing features with this for the interim (mostly due to a lack of skinned menus) but now is the time to use it :)
  • Updated cacert.pem to latest (13 Apr 2021)
  • Updated libcurl (libcurl.dll) to 7.77.0 (26 May 2021)
  • Updated libexpat (xml.w5s) to 2.4.1 (23 May 2021)
  • Updated libjpeg-turbo (image.w5s) to 2.1.0 (23 Apr 2021)
  • Updated in_xsf to the latest Git commit from 21 Mar 2021
  • Updated libopenmpt (in_mod.dll) to 0.5.9.15019 (16 May 2021)
  • Updated libsidplayfp (in_sidious.dll) to 2.1.2 (19 Apr 2021)
  • Updated lzma (lzma.dll) to 21.02 (6 May 2021)
  • Updated minizip-ng (zlib.dll) to 3.0.2 (10 May 2021)
  • Updated mpg123 (mpg123.dll) to 1.27.2 (8 May 2021)
  • Updated Monkey's Audio (in_ape.dll) to 6.29 (25 May 2021)
  • Updated OpenSSL (libcurl.dll) to 1.1.1k (25 Mar 2021)
  • Updated Patreon list (23 May 2021)
  • Updated rapidjson to the current github commit (25 Mar 2021)
  • Updated unrar (unrar.dll) to 6.0.5 (7 Apr 2021)
  • Updated vorbis-tools (in_vorbis.dll) to 1.4.7 (21 Jan 2021)
  • Updated vgmstream (in_vgmstream.dll) to the latest Git commit from 25 May 2021
  • Updated zlib-ng (zlib.dll) to 2.0.3 (13 May 2021)

-

So I think that's it for this update & hopefully it's understood why things have been quiet on seeing a new beta / preview build. I also appreciate that if what I've been doing works correctly then at least visually it shouldn't be obviously different compared to the current build apart from any intended classic skin related drawing fixes.

This is always an issue I see with the perception of WACUP when I'm gradually re-making Winamp whilst using aspects of Winamp which definitely causes the line to blur on what's doing what which was something I always tried to achieve back when I was just known for making Winamp plug-ins :) It's also why I want to drop the need for the Winamp core so it is clearer to describe WACUP as a standalone Winamp 5.666 compatible player.

Final thing, thank you for supporting WACUP. It is very much appreciated even if I don't directly say it to everyone who has taken the time to become a patron & allow me to keep working on WACUP.

-dro

Comments

ricola

thanks for the info man!