Added /UPDATE=noui to offer a pure command-line mode for triggering an update which assumes that by running the command you do want to do an update check
Added an option to the dedicated album art window (via gen_classicart.dll) so it's possible to now have the artwork slightly blended with the window background if enabled (some may like this so here's another option to add to the mix!)
Added support for module files (e.g. MOD, XM, UMX & any of the other 56 extensions) to be treated like a playlist if there are any reported sub-songs within them (there's an option to go back to the older style of treating them as one big file if that's preferred but automatic expansion is the default behaviour going forward)
Added a 'Volume' tab to the main Playback preferences page so it's possible to check the internal WACUP volume level & the reported external process volume level from the OS mixer so that the effective playback volume level can be determined (e.g. if the OS mixer volume level is 25% & the internal WACUP volume level is 100% the effective volume level is 25% which would make it sound a lot quieter vs other programs)
Added support for the modify option to be enabled via the add/remove OS preferences (subject to Windows supporting allowing it) which may be helpful in some situations if there's an issue or the user is unclear about what might have been changed (this will not be available for portable installs)
Added an on closing notification message for the plug-ins to hook so it's easier to know what the type of close is (currently normal or self-restart) so the likes of the autoplay plug-in can update their stored states before the full closing process is commenced
Added the ability to revert back to the last library playlist (if one exists) via the right-click menu on the playlist child nodes or from within the root of the library playlists node (this is not currently done within the specific library playlist views for now as a proper undo mode makes more sense to be implemented into them but this will at least help with making use of the backup playlist files)
Added working spectrum analyser & vu meter modes for the classic skin main window visualisation (hadn't gotten around to sorting out everything needed for this with the initial x64 build)
Added ability to either manually or from the current skin to override the taskbar preview & overlay icons with the files needing to go into a 'Taskbar' sub-folder in the WACUP settings folder or root of the skin folder/archive being used
Added using Shift + Spacebar in the main playlist editor to force scroll the currently playing item back into view depending irrespective of the default Spacebar setting (this makes it easier to get close to the old Winamp behaviour whilst embracing some of the WACUP adjustments to the handling based on feedback to try to make things more consistent in their handling vs different Winamp skins & other players)
Added initial WACUP versions of a NSFPlay/NSFPlug based input plug-in (named in_vermas so as not to conflict with existing in_vgm copies for those still preferring that) for NSF/NSFE support & an MSXplug based input plug-in (in_msx) to expand the native playback support for video game based formats as per user requests (more needs to be done to these plug-ins mostly related to format conversion support)
Added support to the listview header skinning to now show the column sorting direction (hadn't gotten around to implementing that in my replacement skinning core) which should also be more legible as it's using the filled up/down unicode arrow character from the font instead of a fixed small image as Winamp's media library implementation was doing which wasn't scaled to fit unlike this new implementation :)
Changed the ATF implementation to reduce the number of calls needed to get to it as well as making it better suited to being called from multiple threads at the same time (this set of changes should help resolve an odd crash that's been seen related to the background Discord now playing update thread)
Changed the shared playlist handling service so that ASX playlists are now supported after getting it implemented using pugixml (this wasn't implemented in the prior x64 builds)
Changed the in_mod plug-in to not sniff for Windows messages & instead handle seeking / detecting the need to stop playback in a non-Windows centric manner (this was based on it showing as a possible issue in a crash report)
Changed the WACUP provided input plug-ins to use a helper method to consolidate the end of file handling in playback threads
Changed the x64 installer to have a type specific license.rtf instead of re-using the one from the standard x86 installer
Changed some of the internal handling when needing to retrieve metadata from the currently playing item if it's not already in the local library database whilst an attempt is then made to add it or another file of the same type into the database which could potentially misbehave due to the multi-threaded nature of what's going on
Changed the CD audio metadata look-up to reduce how many calls are involved to internally get it by avoiding a loop through the shared metadata service which will just come straight back to the plug-in (this is related to a crash seen where it was attempting to process metadata in a manner that doesn't really make sense for how that plug-in works as its 'virtual' metadata as such)
Changed Milkdrop to use an asynchronous message instead of one that can block the main UI thread when going into/out of fullscreen
Changed closing of the Milkdrop window to not force set the main window as this happens anyway & was the cause of a hang on closing
Changed how the win10shell/SMTC handling of WACUP deals with the active program state changing to avoid it preventing it to be restored if minimised
Changed how the media library core deals with destroying the current library view to trigger skinning related clean-up before it's then destroyed which can in some situations avoid a crash as well as stopping enumerating through the known library plug-ins once the ML_MSG_TREE_ONDESTROYVIEW notification has been handled (I should have done this when it was added with the prior build)
Changed where the running time of the process is reported in the crash report to make it easier to diagnose long vs short run issues
Changed the open/explorer folder handling to try to just open the folder that the file(s) are within if the OS api to do the same but also select the items within the explorer view fails (e.g. when running WACUP under WINE due to SHOpenFolderAndSelectItems(..) not currently being implemented)
Changed the soundcloud stream handling to try to form an 'artist - title' title string from the information returned (why it's not pre-formatted like other services I don't know)
Changed the shared metadata handling to attempt to use taglib for SPC files incase they've been tagged with APEv2 tags before reverting back to the normal ID666 metadata tags (this allows for access to replaygain values as some other players are applying to these files)
Changed how the internal callback service works to try to avoid some crashes seen with it especially when there's attempts to access callbacks that have been set as removed
Changed some of the string & filepath conversion methods to use a consolidated implementation where possible to reduce code re-use which makes some of the plug-in dlls smaller & removes some OS dependencies
Changed how the Streaming Url plug-in works so it minimises doing anything on initial playback & validation of the streams to be played to avoid it blocking the main UI thread which can trigger the crash reporter due to it seeming like things have hung when they've not (e.g. due to a slow internet connection &/or yt-dlp taking a long time to complete processing of the url it's been given to parse)
Changed the final stage of setup to attempt to clean-up the existing crash reports folder instead of potentially allowing it to grow out of control as has been the issue for some setups where stability has been an issue
Changed the format information for module files to make it more obvious what the subsong is instead of just reporting that there were subsongs present
Changed the volume changing status message in the classic skin songticker to now report the effective volume level when taking into account the process volume level as reported by the OS volume mixer
Changed the handling of non-unicode dialogs (as used by many old 3rd party plug-ins) to hopefully resolve the issue of some showing garbled characters instead of the expected titlebar text (this is a weird compatibility issue with WACUP being a native unicode program & other things going on that cause the older ANSI style methods to misbehave causing the titlebar issue)
Changed how the hooking of OS apis used by the plug-ins is done to reduce a large amount of the duplicate processing that goes on when trying to find & then hook the function exports (it also makes things a bit cleaner to follow in my code :) )
Changed how some of the early stages of initialisation are done to avoid a loading related failure when using legacy mode due to a weirdness with how the original winamp process is loading vs dll loading
Changed a load of internal & inter-dll dependencies to consolidate some of the handling, etc (this is mostly to make things for me potentially easier to deal with going forward without some of the Windows centric aspects)
Changed how the Streaming Source plug-in handles title updates to try & better ensure its metadata retrieval won't block the main UI thread (i.e. causing WACUP to hang / crash) as well as insertion into the stream is better aligned to song changes
Changed how the playback history & local library playcount is managed to do it's best to avoid saving out the changes to the database file from the main ui thread or during the immediate playback event to avoid issues with it blocking the ui for longer than would be liked which can then trigger the OS unresponsive handling when it's not really crashed (aka making it more asynchronous in nature whilst hopefully not causing new issues)
Changed how the nde database files are handled when saving them to reduce the time taken to save them (e.g. going from 290ms to 180ms for a local library database with 100K items on my dev machine, YMMV) which with the changes to avoid issues with multi-threaded saves of these files should better minimise issues especially if it's triggered against the main UI thread (where long slow running actions is bad)
Changed the current shuffle table & position within it to be saved out if periodic configuration saving is enabled which should better help avoid unexpected reversions in playback if there's a crash / unexpected power failure & this hadn't been saved (it will still by default only save the shuffle table & it's position on normal closing but this may help e.g. for streaming / unstable machine setups)
Changed the installer to clean-up the settings folder of incomplete database file updates (due to crashes) which for some setups may have grown to an excessive level & may be introducing other issues
Changed the main playlist handling so it will now save out an updated copy if a batch of title updates completes to avoid some issues seen if there's a crash before it's fully saved vs some library a loading related issues seen
Changed the handling of adding a playlist via internal methods to try & pick a random playlist item to start with if shuffle is enabled instead of defaulting to the first item (this is a safety behaviour that it will still fallback to so that it will be able to start playback as long as there's something in the playlist) which may better match with user expectations of playback behaviour if shuffle is enabled
Changed the soxr library to use a shared copy of pffft from the WACUP core just to make things easier to manage & reduce some otherwise unwanted code duplication with recent changes for the classic skin visualisation handling
Changed the Streaming Source DSP to try not to do anything intentionally against the main ui thread which should avoid it causing ui blocks on slow actions (e.g. some title updates)
Changed the handling of the IPC_GETRATING/IPC_SETRATING with the Win7Shell & global hotkey plug-ins to avoid them blocking the main ui which can be an issue if trying to set the rating on media that takes a relatively long time to complete (this is to help avoid it causing crashes)
Changed the end of file handling if there's a critical core handling issue to better try to avoid things getting stuck in an unresponsive state
Changed the OS timer handling to use the preferred disabled exception handling behaviour which is at odds with the default OS behaviour of trying to help out (go figure MSDN documentation & all of that)
Changed how the playlist / song change works so that if there's a selection in the playlist it will no longer force the new item to be played to be force scrolled back into view which was done to mimick Winamp's behaviour of forced scrolling into view but that can be really annoying having it do that
Changed the history plug-in to now use a background queue to avoid it's attempt to record the playback event (start or stopping) from blocking the main ui thread if the history db saving is in progress (this better matches the handling used with the replacement local library plug-in to help it avoid any slow / long running actions from getting in the way & blocking processing on the main ui thread)
Fixed the classic spectrum analyzer visualisation window jumping back to the primary monitor if it was set to be run on a different monitor (aka just remove code to fix things)
Fixed the internet radio view getting into an endless loop that eventually causes crash reporter to kick in due to a 64-bit specific issue with the original 32-bit codebase
Fixed the probable cause of the WASAPI output plug-in crashing if the playback device it was trying to use suddenly disappears whilst the plug-in is being used for playback
Fixed an excessive number of IPC_CB_MISC_TITLE notifications being sent especially when the activated state of WACUP is changing which reduces regenerating ATF titles & a few other things
Fixed the Streaming Source plug-in description string not being correctly formed as a unicode string
Fixed a crash with the CD playback plug-in due to an incorrect parameter handling during a metadata sniffing request
Fixed the in_mod plug-in hanging on starting to play a file if the configured output plug-in fails to initialise
Fixed the probable cause of the WASAPI output plug-in skipping over files due to incorrectly destroying some internal information about the playback device to be used when there's no reason to do that
Fixed the probable cause of the Win7Shell plug-in failing on some setups when it's trying to register it's jumplist to the OS
Fixed the current library view not being sized correctly if WACUP is started minimised & then later restoring it all into view
Fixed the rewind multimedia key not working as expected (e.g. when using a Corsair keyboard with the control knob that can be used to trigger fast-foward / rewind actions)
Fixed the simple artwork view mode in the classic album art window incorrectly blending the actual artwork slightly with the background when it's not meant to be blended
Fixed the lyrics & album art windows seeming to flicker or show the not found artwork before the expected artwork is loaded or only show the not found artwork even if there's known to be artwork to display
Fixed the edit columns menu not being accessible on the single pane / results filter in the local library views when using WINE
Fixed the desktop & startmenu shortcut handling not correctly distinguishing between 32-bit & 64-bit builds (this will not keep any existing 64-bit shortcut links from the prior 2 beta builds & will instead create new 64-bit specific ones so some manual clean-up may be required - this saves maintaining logic that isn't needed for all future 64-bit builds)
fixed some values in the crash report log being clipped to 32-bit values when the 64-bit value should be being output for crashes from this build (oops)
Fixed the cause of some of the random (or persistent for some) cases of crashes when either refreshing or leaving one of the local library views due to an unexpected corruption of the view itemcache
Fixed the elevation process not working correctly which would manifest in a crash within the calling process (e.g. when trying to remove a plug-in or enable the agent mode)
Fixed a visual issue with the plug-in item nearest to the item that was just removed when uninstalling a plug-in via the preferences due to an incorrect handling of the focused state vs the custom drawing
Fixed the last.fm preferences page for helping to install the plug-in being enabled as 32-bit plug-ins cannot be used in the 64-bit build
Fixed NSF/NSFE playlist entries that relate to sub-songs not being correctly reported as valid items (e.g. via the missing files features in the main playlist) due to not correctly detecting the file extension
Fixed the podcast view showing the wrong colour on initial loading for where the information area is going to go before the browser control has been loaded
Fixed a handling issue that could cause an attempt to incorrectly access an input plug-in if the check to find a valid input plug-in for playback / metadata look-up fail in weird ways or use the wrong one
Fixed the probable cause for the WACUP installation folder being opened instead of the WACUP instance being run after installation due to an odd timing quirk related to the de-evelation handling being used
Fixed the installer not clearly differentiating between the 32-bit & 64-bit builds in the add/remove OS preferences
Fixed some crash issues due to invalid string values (from other issues that have since been resolved) causing a crash to be triggered
Fixed the parent window of a skinned menu not being unsubclassed once the menu has closed which helps reduce some processing on messages that isn't needed unless the menu is actively being displayed
Fixed the streaming source plug-in not using an appropriate internal buffer size vs the output plug-in & it's configured buffering which could cause audio loss in the stream due to it discarding what has been passed to it before it's been able to encode it (e.g. this was most noticeable with NotSoDirect & short files where the audio starts immediately & around half a second of audio wouldn't be heard)
Fixed the library window button not being repositioned correctly when the font is changed
Fixed the line for the WACUP site on the about dialog page not being sized correctly when running under WINE due to an incorrect call of LM_GETIDEALSIZE
Fixed sorting in the local library view not working correctly due to it not correctly accouting for some size differences with the 64-bit data structures
Fixed the about splash panel not working for all WINE setups due to weirdness with the handling of dpi settings with it
Fixed an approx. 6 year old bug from my initial work to make a WACUP build of the nde database implementation which didn't work well with multi-threaded database saves that could cause WACUP to either lock-up on saving or potentially corrupt the database being saved out (this was found when trying to determine the cause of saving history & local library playback updates to both of the database files around the same time)
Fixed the backup of the nde database files after a successful save has occurred not being correctly handled
Fixed the history playback position not always being stored if WACUP is playing when it's closed due to a number of factors screwing around with the timing & handling of the history db updates (async is hard!)
Fixed the reported issues against the reimplemented command-line support so it should behave as expected as well as removing any handling that isn't appropriate for the x64 build coming from the shared codebase & the x86 assumptions
Fixed the TTA encoder selection not always being maintained & appearing to select the wrong encoder when performing the conversion because the desired encoder isn't what was saved to be used
Fixed the file conversion process not correctly copying the metadata over to the new file due to a logic issue as well as expanding how much of the metadata is attempted to be copied by this
Fixed some issues with the about window which could cause it to crash in some instances (this affected the x64 build more than the x86 build)
Fixed a temp file related to internal bitmap resource extraction not always being removed if there was an issue with the extraction process
Fixed the newly added ML_MSG_TREE_ONDESTROYVIEW message not always being sent when WACUP is closing which could prevent some library view changes from being saved as expected
Fixed the missing album information vs overall album total in the local media library album filter not being correct (this should hopefully resolve this on/off issue with this replacement plug-in)
Fixed the base skin menu item not being re-added into the menu if the skins folder is empty or exists but no valid skins could be found (late night coding sucks at time in creating bugs like this)
Fixed some quirks with the safe mode where some of the native WACUP plug-ins were not being correctly enabled as I'd not migrated everything over to the newer style of handling I'm now using for it
Fixed the intro play fade timeout preferences option not being correctly restored between state changes
Fixed the currently playing item not being correctly updated in the podcast & downloads views when the sorting within those views is changed when something is already playing (regression from some of the asynchronous related changed implemented a few beta builds back)
Fixed some handling issues with the IPC_UPDATEDIALOGBOXPARENT & IPC_SETDIALOGBOXPARENT api calls related to gen_ff (modern skin engine) & how the WACUP core attempts to isolate it from doing things on the main ui thread to try & avoid unresponsive hangs that can lead to crashes
Fixed a regression with the setup handling which would cause re-running the installer after a few builds ago to not save the selected skin or to re-show the skin selection dialog when not expected
Fixed the lines oscilloscope option not being correctly restored when re-opening the preferences page
Fixed the sorting of the items in the current podcast feed going awry when a channel refresh is in progress
Fixed in_mod not send audio to the active DSP if it's enabled (seems I inadvertently disabled this whilst debugging an issue & only recently noticed it, oops!)
Fixed the main playlist editor scrollbar area handling when using some modern skins not reacting as expected due to the reported information for the image elements not matching to what is used for the drawing handling (e.g. it'd only react to clicking on roughly the right side of things instead of the whole area which works when using the thumb dimensions that all modern style skins should be providing)
Fixed the handling of a number of plug-in configuration menus when the skinned preferences option is enabled which was causing them to be incorrectly drawn due to mis-handling negative/very large menu ids
Fixed loading an url/file via the autoplay plug-in not working as due to a fat fingered typo it was overwriting the value on loading when it was meant to have been reading it
Fixed a regression preventing the currently selected preference tree item being in view when the preferences window is first opened
Fixed a regression preventing the unlocking of access to files once they've started plug-in due to a mis-understanding over a timer api call
Fixed some quirks with the configuration of the listview header sorting due to a parameter mis-match in an api call (oops) & some states not being correctly setup
Fixed the probable cause for some setups (first reported on WINE but also seen on Windows 7) to either crash or not complete the creation of the selected media library view when changing it due to an issue with the clean-up of the accelerators (i.e. keyboard shortcuts) related to the preview local library view
Fixed the probable cause of the random failures seen when trying to switch quickly between media library views when the internet radio view has also been accessed which due to the large size of it's view cache was sometimes trying to do too much at the same time & causing itself to hang &/or crash
Fixed a regression with the podcast download view handling when loading the list of downloads & trying to fill in the length information if not already stored causing the duration column to not appear to be sorted correctly (this was due to the information not being correctly updated so that the sorting action was treating the files correctly as having no size despite the visual inconsistency observed)
Removed the gui edit part of the add / edit smart view dialog as it's not working reliably & I'm not happy with it anyway so for now it's just manually editing the smartview query on that dialog
Removed the legacy winamp.m3u handling from this build as it's a compatibility aspect that only really relates to the x86 build (anything being updated to target the x64 build should be using the m3u8 version of the main playlist)
Removed the legacy version history tab on the about dialog as it's only there for the 32-bit build to show Winamp's whatsnew.txt file which isn't something that applies to this 64-bit build
Removed sending the IPC_PLAYING_FILE notification as everything under x64 is only going to need IPC_PLAYING_FILEW
Updated cacert.pem to latest (29 Mar 2022)
Updated libcurl (libcurl.dll) to 7.82.0 (5 Mar 2022)
Updated libflac to 1.3.4 (20 Feb 2022)
Updated libjpeg-turbo (image.w5s) to 2.1.3 (25 Feb 2022)
Updated libnghttp2 (libcurl.dll) to 1.47.0 (23 Feb 2022)
Updated libopenmpt (in_mod.dll) to 0.6.2.17108 (13 Mar 2022)
Updated libsndfile (libsndfile.dll) to 1.1.0 (27 Mar 2022)
Updated minizip-ng (zlib.dll) to 3.0.5 (5 Mar 2022)
Updated Monkey's Audio (in_ape.dll) to 7.52 (22 Mar 2022)
Updated OpenSSL (libcurl.dll) to 1.1.1n (15 Mar 2022)
Updated Patreon list (2 Apr 2022)
Updated unrar (unrar.dll) to 6.1.6 (3 Mar 2022)
Updated vgmstream (in_vgmstream.dll) to the latest Git commit from 1 Apr 2022
Updated zlib-ng (zlib.dll) to 2.1.0-devel (31 Mar 2022)