Repository navigation
Releases
v0.9.5.0
What's new
- LotRO
.abcnotation support (experimental) — drop.abcfiles intomusic/and Serenade plays them. Multi-tune/multi-voice files each become their own library entry. - Pie UI theme integration — when the optional Pie UI addon is installed, Serenade tints its windows to match Pie's active palette. Toggle in Options (on by default); looks unchanged if Pie isn't present.
- Relicensed to LGPLv3 — so Serenade can be distributed alongside the Nexus platform without a licensing conflict.
Both new features are pending live in-game verification.
v0.9.4.2
v0.9.4.1
- Fixed unreliable chat announce — now checks whether the GW2 chatbox is already focused before sending Enter, preventing double-Enter failures
- Added unload safety: in-flight chat sends abort cleanly when the addon is unloaded
- Added chat channel selector in Options: post Now Playing to Currently Active Channel, Say, Party, Squad, Map, or Guild 1–6
- Channel choice persists across sessions
v0.9.4.0
What's new
- Drum Kit support — drum songs start instantly with no octave reset delay or inter-song gap
- Fixed instrument filter tabs — tabs in the song library and downloader now correctly filter the song list
- Code reorganisation — source split into
src/player/,src/parsers/, andsrc/ui/subdirectories
Installation
Download Serenade.dll and copy it into <GW2>/addons/.
v0.9.3.2
Playback Timing Fix
Addresses an issue where music could occasionally lag behind then speed up to catch up.
Fixes
- Playback thread priority — The thread that sends keypresses to play music now runs at
THREAD_PRIORITY_ABOVE_NORMAL, preventing the OS scheduler from starving it when GW2 is under heavy CPU load. - 1ms timer resolution —
timeBeginPeriod(1)is now called at addon load, reducing WindowsSleep()granularity from the default ~15ms to ~1ms. This makes the playback thread's timing loops significantly more accurate. Properly cleaned up withtimeEndPeriod(1)at unload.
Music Library
- 53 new songs added to the downloadable library, including Africa (Toto), Stairway To Heaven (Led Zeppelin), Don't Stop Me Now (Queen), Sweet Home Alabama (Lynyrd Skynyrd), Take On Me (a-ha), and many more.
v0.9.3.1
Performance Fix: Reduce ImGui Text Input Lag
Nexus addons share the same ImGui context and render sequentially in the same frame. Expensive per-frame computation causes keystrokes to arrive between frames and get dropped, resulting in laggy text input fields.
Changes
- Cached song durations —
Song::GetTotalDurationSeconds()previously iterated every note event (potentially thousands) on every call. It was called per visible row per frame in both the library and playlist tables, plus in sort comparisons. Now uses a lazymutablecache computed once on first access. - Cached instrument counts & artist lists — The library and download panes previously rebuilt
std::map/std::setof instrument counts and artist names by iterating all songs every frame with string copies. Now cached and only recomputed when library content changes or the instrument tab changes. - Cached filtered & sorted lists — Filter/sort operations (O(N) string lowercasing + O(N log N) sort) previously ran every frame. Now use dirty-flag tracking: the filtered+sorted index list only rebuilds when filter text, artist selection, instrument tab, sort column/direction, or library size actually changes.
Result
On a steady-state frame with no user interaction, the render path now does zero data iteration — just ImGui widget drawing from cached vectors. All recomputation only triggers on actual user input.
v0.9.3.0
What's New
- GW2-Themed UI — dark slate and warm gold accent theme matching Alter Ego and the game aesthetic
- Weighted Shuffle — shuffle now avoids recently played songs, prioritising unplayed tracks
- Song Filters — instrument tabs, artist dropdown, and text search in both the song library and downloader
- Chat Announcements — optionally announce the current song in game chat (configurable format with placeholders)
- Auto-scroll Playlist — playlist smoothly scrolls to the current track on song change (pauses while mouse is hovering)
- Time-based Seek Bar — progress bar and timer now reflect actual elapsed time instead of event count
- Library Artist Filter — artist dropdown added to the song library pane, matching the downloader UI
v0.9.2.1
v0.9.2.0
Critical Bugfix
Fixed: Octave switching direction was reversed when playing AHK files
The AHK parser had Numpad9 mapped to Octave Up and Numpad0 mapped to Octave Down — the opposite of GW2's actual behavior. This caused all octave switches to go the wrong direction during playback, resulting in melody notes playing in the low octave and accompaniment in the high octave.
Changes
- Fixed swapped Numpad0/Numpad9 octave direction in SongParser.cpp
- Version bumped to 0.9.2.0