Commit Graph
3680 Commits
Author SHA1 Message Date
Florian Ostertag 4d3265e90b chore(translations): dynamic resource for partymodes in transifex (#919)
Updated filter types and source file expressions for translation.
2026-10-18 09:07:17 +02:00
McSchneidarandFlorian Ostertag d61f90e6fc Add rule roulette party mode (#916)
A new party mode for 2 to 12 players that only needs 2 microphones. Players sing duels against each other, and before every duel a wheel decides the rule for this round. Every player sings equally often, and the player with the most points wins.

- 20 rules: from short songs, medleys, double packs, duets and free song choice to rules that change what counts (golden notes, line bonus, target score, fewer points win, teamwork) or how many points there are (double points, all or nothing, point steal, lead counts, underdog bonus, jokers)
- The rules on the wheel are drawn randomly for each game, or chosen manually: every rule can be set to always, random or never
- Every rule on the wheel comes up once before any rule comes up again; rules already used are dimmed
- Rules that need special songs are only used if the song selection has enough of them
- The wheel spins with a running light that slows down, and the winner is celebrated at the end

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 08:30:04 +02:00
McSchneidarandFlorian Ostertag 3bdf22c870 New party mode: Partner Swap (#915)
* Add partner swap party mode

A new party mode for 3 to 12 players that only needs 2 microphones. Everyone plays for themselves, but always sings together with a partner. Both singers get the score of the pair, and the partners change every round.

- In each round every player sings once, with a partner they haven't sung with yet; with an odd number of players someone takes a break, in turns
- Ranking by the average score per song, so breaks are no disadvantage
- Optional harmony bonus of 500 points when both singers are no more than 500 points apart
- Duet songs are sung with both voices; duets can be mixed in, used exclusively or left out
- Up to 3 jokers per player to skip a song
- The best pair is shown all the time, and the winner and the best pair of the night are celebrated at the end

* Rename the harmony bonus points constant to avoid shadowing

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 08:20:24 +02:00
McSchneidarandFlorian Ostertag 3810f75e04 New party mode: Team Survival (#914)
* Add team survival party mode

A new party mode for two teams that only needs 2 microphones. In every duel one player of each team sings against one of the other team. Whoever loses a duel loses a heart, players without hearts are out, and the team whose players are all out loses.

- Every player sings once per round before anyone sings again, the duels are drawn randomly
- Teams of different sizes are possible, in the smaller team some players sing a second time per round
- Hearts can be the same for everyone or set per player, to balance uneven teams or strong and weak singers
- Up to 3 jokers per player to skip a song
- On a tie, the duel is sung again
- A lost heart is animated, and the winning team is celebrated at the end

* Trigger CI rebuild

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 07:49:44 +02:00
McSchneidarandFlorian Ostertag 5e449c7b01 Improve tic-tac-toe party mode (#912)
- A won field pops up and fades into the color of the winning team
- At the end, the winning line pulses while all other fields are dimmed
- The jokers are labeled ("New song", "Replay a field"), so it's clear what they do
- Darker panels behind the team areas and more room between the board and the title
- Long player names no longer reach into the board

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-18 06:18:20 +02:00
McSchneidarandFlorian Ostertag b4c29e1b55 Improve challenge party mode (#911)
- Instead of a number of rounds, you now choose how many songs each player sings
- New option to remember sung songs, so a new challenge doesn't repeat songs from the previous ones
- Up to 16 players
- The number of jokers and the joker refill setting are kept instead of being reset every time
- The overview shows each player's avatar, the top three in gold, silver and bronze and highlights the leader
- The winner of each round is highlighted in the round list
- The winner is celebrated at the end with avatar, a pulsing gold name and stars

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-17 21:18:49 +02:00
McSchneidar aac5253862 Redesign Party Mode Selection Screen and Main Screen (#917)
* Redesign party mode selection

- All party modes are shown at a glance as tiles with an icon and their name, sorted by their name
- The tiles look and behave like the theme buttons, the details of the selected mode (description, target audience, players, teams, microphones, author and version) are shown below
- Modes that need more microphones than configured are dimmed and can't be started
- Select with the arrow keys or the mouse, the arrow keys also reach the Start and Back buttons, a click on a tile starts it
- More than six modes are split into pages
- Icons for Challenge and Tic-Tac-Toe and a general icon for modes without their own
- Fixes the number of players shown for modes with a fixed number of players

* Highlight Sing and Party in the main menu

- Sing and Party are shown as two large buttons side by side above the other buttons
- Statistics, Profiles, Options and Exit stay in one row at the bottom
- Without a profile the missing profile warning takes the place of Sing and Party, because both are locked then, and looks like the other warnings
2026-10-17 20:58:37 +02:00
McSchneidar e665e31f4a Improved animations (#907)
* Smoother countdown and new menu and in-game animations

- Countdown digits pop in and fade out each second, with a ring of dots showing the remaining part of the second
- Medley countdown uses a smoothed timer and no longer stutters
- Rating popups scale in from below and drift upwards while fading out
- Player scores pulse briefly at the end of a line
- Pause menu fades and scales in and out
- Buttons and select slides pulse briefly when they get selected
- Shared easing functions and a draw transform for animations

* Retrigger CI
2026-10-17 12:39:18 +02:00
McSchneidarandFlorian Ostertag 602417e773 Add statistics screens (#910)
* Add statistics screens

- New statistics dashboard with four tiles: overview, recently sung, best list per difficulty and players
- Each tile opens a detail screen with longer lists, filters (left/right) and scrolling
- Detail lists show ranks for places 1-3, avatars, bars and alternating row backgrounds
- Players can be ranked by most songs or by best average
- Overview details: most sung songs, genres, languages and songs never sung
- Navigation help at the bottom of both screens
- New Statistics button in the main menu
- English and German texts

* Address code analysis findings in statistics screens

* Retrigger CI

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-17 05:17:36 +02:00
McSchneidarandFlorian Ostertag d03224f29b Audio mode for each playlist entry (#909)
- Playlist entries get a second select slide for the audio mode (normal, instrumental, vocals, karaoke)
- The slide is only shown if the song has an instrumental file, otherwise normal is used
- The audio mode is saved in the playlist file and used for each round
- Sing, score and highscore screens use the audio mode of the current round
- Song options select the audio mode by mode instead of position
- ScreenSong theme version 15

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-17 04:46:28 +02:00
McSchneidar 61b2677f16 Redesign highscore screen (#908)
- Places 1-3 are shown on a podium with profile avatars and a crown for the winner
- Players without an avatar get a placeholder silhouette (new skin texture NoAvatar)
- Places 4-10 are listed below with a score bar for each entry
- The podium only appears once there is at least one highscore
- New entries are shown in gold with a slight pulse and gold sparkles
2026-10-17 04:23:07 +02:00
McSchneidarandFlorian Ostertag e69f62809a Improve gamepad input handling (#901)
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-16 07:54:44 +02:00
McSchneidarandFlorian Ostertag 611591be1d Fix overlapping EHeaderFlags values (#902)
Instrumental (5) and Vocals (6) overlapped with Title|MP3 and
Artist|MP3 in the [Flags] enum. A song file with #INSTRUMENTAL or
#VOCALS therefore passed the mandatory-tag checks even when #TITLE,
#ARTIST or #MP3 were missing, leaving Audio empty.

Give each flag its own bit (Instrumental = 64, Vocals = 128).

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-16 07:33:40 +02:00
McSchneidarandFlorian Ostertag 8f916aaf65 Allow the last entry to be picked in random song/category selection (#903)
Random.Next(min, max) excludes max, so Next(0, Count - 1) never returned
the last index. The last song or category in the list was only picked
once it was the only one left, so it always came last.

Use Next(0, Count) instead.

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-16 06:40:24 +02:00
McSchneidarandFlorian Ostertag df412b6d33 Two small fixes (#904)
* Fix index check in CSelectSlide.RenameValue

The check used && instead of ||. An index cannot be negative and out
of range at the same time, so the check never returned early and an
invalid index caused an ArgumentOutOfRangeException.

* Allow textures to be disposed more than once

CTextureBase.Dispose threw ObjectDisposedException on a second call.
Dispose must be safe to call multiple times, otherwise freeing a
texture twice crashes the game.

Return early instead. CD3DTexture and COGLTexture also check
IsDisposed first, so a second call does not free the GPU texture
again. This matters for OpenGL, where the texture name may already
belong to another texture.

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-10-16 05:53:10 +02:00
McSchneidar 2a6be1b3fe Speed up cover loading and keep the cover DB up to date (#905)
* Recreate cover DB on version mismatch instead of throwing

CCoverDB.Init threw NotImplementedException whenever the stored
version was older than CSettings.DatabaseCoverVersion, so any future
schema change would crash the game on start.

The cover DB is only a cache. On any version mismatch, drop all
tables and create an empty DB with the current layout instead.
Covers are rebuilt on the next load.

* Add indexes to cover DB and guard against duplicate entries

Cover.Path and CoverData.CoverId had no index, so every cover lookup
scanned the whole table. With thousands of songs this makes loading
quadratic. Add unique indexes on both columns.

Use INSERT OR IGNORE plus last_insert_rowid() when storing a cover.
This prepares for loading covers outside the lock, where two threads
may store the same cover concurrently.

Bump DatabaseCoverVersion to 2 so existing cover DBs are recreated
with the indexes.

* Decode and resize covers outside of the cover DB lock

The comment in GetCover claimed the lock was released before loading
the bitmap, but the whole method ran inside lock(_Mutex). All cover
tasks started by CSongs._LoadCovers therefore decoded and resized
one after another, and the remaining thread pool threads just waited.

Split GetCover into three steps:
- _ReadCachedCover: DB lookup (locked)
- decoding and resizing (not locked, runs in parallel)
- _StoreCover: DB insert (locked)

The duplicated resize code moves into _FitToMaxSize.

If the DB connection has been closed in the meantime, GetCover now
still returns true, because the texture has already been created.
Before, it returned false, and the caller generated a second cover
while the first texture was still queued.

* Store resized covers and detect changed cover files

The cover DB stored the original cover file. Every later load still
had to decode the full-size image (often 1000-3000 px) and scale it
down to CoverSize, so the cache only saved reading the file from disk.

- Store the cover already scaled to CoverSize: JPEG (quality 90), or
  PNG if the original has transparency. Covers that are already small
  enough are stored unchanged to avoid recompressing them.
- Entries were only keyed by path, so a replaced cover file with the
  same name was never picked up. Also store file size, last write
  time and CoverSize, and drop outdated entries on lookup.
- _FitToMaxSize throws if Resize fails instead of passing null on.
2026-10-16 05:22:44 +02:00
McSchneidar d48426b04d Fixes for progress bar and applause sounds (#906)
* Control score sounds from UpdateGame instead of the thread pool

_PlayProgressBarSound started a Task that waited for the progress bar
duration and then closed whatever stream was stored in
_ProgressBarSoundStream. When switching rounds on the score screen
before that time had passed, an old task closed the progress bar
sound of the new round too early and played the applause of the
previous round, while the applause of the new round never played.

Remember when the progress bar sound was started and check it in
UpdateGame on the main thread instead. Starting a new progress bar
sound and leaving the screen now also stop a running applause.

* Sync progress bar sound with the score bar animation

The sound duration was computed from the points (10,000 points =
5 seconds), while the bar animation duration depends on the bar size
in the theme and only starts when the bar is first drawn. Both only
matched approximately and drifted apart with other themes.

Add CProgressBar.AnimatesMovement and CProgressBar.IsAnimating. The
score screen now stops the progress bar sound and starts the applause
as soon as no visible score bar is animating anymore. If the theme
has no movement animation, the previous duration is used.

* Make stream id allocation in CPlaybackBase thread-safe

Load assigned stream ids with _NextId++ outside of the lock. Load is
also called from other threads, so two streams could get the same id
and a later Close or Play could hit the wrong stream.

Use Interlocked.Increment instead. Ids still start at 0.

* Do not play the progress bar sound for 0 points

With 0 points the score bars do not move, so the progress bar sound
started and stopped again right away, which could be heard as a short
click. Do not start it at all if the highest score is 0.
2026-10-16 05:21:34 +02:00
transifex-integration[bot] d5e5f3fbeb Updates for project Vocaluxe and language fi (#900)
* Translate Output/Languages/en.xml in fi

100% translated source file: 'Output/Languages/en.xml'
on 'fi'.

* Translate Output/Languages/en.xml in fi

100% translated source file: 'Output/Languages/en.xml'
on 'fi'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-12 09:50:05 +02:00
McSchneidar 0ffe58fbe6 Improve Direct3D texture upload performance for large textures (#899)
* Improve performance

* Improve performance

* Improve performance
2026-10-12 09:21:30 +02:00
McSchneidar e7fc959def Fix possible crashes and glitches when playing song previews (#898)
* Add AutoplayPending

* Add locks

* Add Base Update

* Add Base Update

* Add locks
2026-10-06 05:20:14 +02:00
transifex-integration[bot] 52bdf3950e Translate Vocaluxe/Website/locales/en.json in fi (#897)
100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'fi'.

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-10-04 13:39:55 +02:00
transifex-integration[bot]andFlorian Ostertag f5583a75a1 Updates for project Vocaluxe and language cs (#886)
* Translate Output/Languages/en.xml in cs

97% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'cs'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in cs

100% translated source file: 'Output/Languages/en.xml'
on 'cs'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-08-24 23:53:44 +02:00
friedPotat0andFlorian Ostertag c1476b1eb2 Fix crash and wrong device names in the DirectSound record backend (#890)
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-08-24 21:22:04 +02:00
McSchneidar 3a9ea3f67b Use BackgroundMusicVolume (#892) 2026-08-24 20:19:52 +02:00
McSchneidarandFlorian Ostertag ba5a361d42 Improvements to CoverDB and cover loading (#893)
* Cover handling improvement

* Cover handling improvement

* Cover handling improvement

* Remove CoverDB flag (not need anymore)

* Remove CoverDB flag (not needed anymore)

* Cover handling improvement

* Cover handling improvement

---------

Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-08-24 19:28:33 +02:00
McSchneidar b822281e04 Fix: Default profiles are not recognized (#894)
* Change 'ID' to 'Id'

* Change 'ID' to 'Id'

* Change 'ID' to 'Id'
2026-08-24 19:07:09 +02:00
Quentin Bray 1bba340cf8 Better handle multiple tags respecting US format (#878)
* Better handle multiple tags respecting US format

Based on unversioned, V1 & V2 of US formats : https://github.com/UltraStar-Deluxe/format
Should address #623
Creator now takes multiple values
Maintain backward compatibility

* Update file path properties to match US formats
2026-06-23 21:04:59 +02:00
Quentin Bray cae67eb4ab Remove ReloadSongMethod (#879)
Seems to not be usefull since song is cloned is others game mode
Improve performance by stop reloading TXT file
Didn't see any difference with and without instead of just song load perfs imrpovement
Maybe that I miss a point ?
2026-06-22 20:41:53 +02:00
Quentin Bray 6ffa63b923 Apply R# clean-up for reliability (#877)
* Apply R# clean-up for reliability

- Migrate to NUnit4 Assert.That
- Update dependencise versions
- Fix LangVersion to 9.0 (until net core migration)
- Reformat code
- Apply 'var' style (easier for refactoring)
- Remove redundant parentheses
- Add braces on every condition blocks (1 line)
- Uses new null checking patterns
- Uses AutoProperties when possible
- Uses string scalar type instead of class
- Clean usings
- Add .orig files in git ignore
- Rename some properties to respect defined conventions and US format definition
	- ID -> Id
	- BPM -> Bpm
	- Finish -> End

* Update R# settings according to the clean-up made
2026-06-22 19:52:06 +02:00
transifex-integration[bot]andFlorian Ostertag b9b0f7c8df Updates for project Vocaluxe and language fi (#850)
* Translate Output/Languages/en.xml in fi

99% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'fi'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in fi

96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'fi'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in fi

100% translated source file: 'Output/Languages/en.xml'
on 'fi'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
Co-authored-by: Florian Ostertag <flokuep@users.noreply.github.com>
2026-05-29 08:24:30 +02:00
transifex-integration[bot] d65bc38f6e Updates for project Vocaluxe and language sv (#852)
* Translate Output/Languages/en.xml in sv

94% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'sv'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in sv

92% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'sv'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in sv

100% translated source file: 'Output/Languages/en.xml'
on 'sv'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-05-29 07:56:33 +02:00
Edi316 718f284c82 Small improvement to List View (#873)
* Improve ListView

* Improve ListView
2026-05-07 19:32:01 +02:00
transifex-integration[bot] e3064c63a1 Updates for project Vocaluxe and language de (#872)
* Translate Vocaluxe/Website/locales/en.json in de

100% translated source file: 'Vocaluxe/Website/locales/en.json'
on 'de'.

* Translate Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-05-04 06:14:19 +02:00
McSchneidar 48ffe4ccd5 Add check for VC++ 2015–2022 Redistributable (#871)
* Add check for VC++ 2015-2022

* Remove Windows Vista

* Remove Windows Vista

* Add check for VC++ 2015-2022

* Add check for VC++ 2015-2022
2026-05-02 06:17:00 +02:00
transifex-integration[bot] 09031fe79b Updates for project Vocaluxe and language es (#869)
* Translate Output/Languages/en.xml in es

96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'es'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in es

100% translated source file: 'Output/Languages/en.xml'
on 'es'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-04-27 06:31:18 +02:00
transifex-integration[bot] 53839df8a5 Updates for project Vocaluxe and language fr (#867)
* Translate Output/Languages/en.xml in fr

96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'fr'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-04-27 06:31:04 +02:00
transifex-integration[bot] 677362642a Updates for project Vocaluxe and language de (#868)
* Translate Output/Languages/en.xml in de

96% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'de'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in de

100% translated source file: 'Output/Languages/en.xml'
on 'de'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-04-27 06:30:51 +02:00
Edi316 5af73e8c00 Expand Options Screen (#856)
* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Screen Version 4

* Screen Version 1

* Create Screen

* Create Screen

* Create Screen

* Add Graphics Screen

* Add Graphics

* Add Graphics

* Add Graphics

* Add Graphics

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Remove Graphics Options (new screen)

* Create Screen

* Add Graphics

* Add OptionsGraphics Screen

* Remove Graphics Options (new screen)

* Add OptionsServer

* Add creenOptionsServer

* Add ScreenOptionsServer

* Create Screen

* Add Server options

* Add Server options

* Add Screen

* Version 1

* Add Server Options

* Add Server Options

* Add Server Options

* Add Screen

* Add Screen

* Add Screen

* Add Server Options

* Add Screen

* Remove Graphics Options (new screen)

* Add Screen

* Add Screen

* Add Server Options

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Screen

* Add Server options

* Add SongFolder

* Add Song Folder

* Update Options

* Add Song Folder

* Remove Song Folder & Server Buttons

* Remove Song Folder & Server Buttons

* Version 6

* Remove Song Folder & Server Buttons

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Add Song Folder

* Version 4

* Remove Song Folder & Server Buttons

* Add Song Folder

* Add Song Folder

* Create Screen

* Create Screen

* Create Screen
2026-04-26 20:50:43 +02:00
Edi316 76d26239bd Grid overview for profile screen (#858)
* Add Profile Grid

* Add Profile Grid

* Add Profile Grid

* Add Profile Grid

* Version 4

* Add Profile Grid

* Add Profile Grid

* Add Profile Grid

* Fix Out of Bounds Index & Player Selector Cursor

* Add Profile Grid

* Fix Out of Bounds Index & Player Selector Cursor
2026-04-26 20:50:15 +02:00
Edi316 9dac6d9b19 Add Duet Voice Name (#864) 2026-04-26 20:49:52 +02:00
Edi316 038c5165e1 Fix missing player profiles in Challenge Mode (#865)
* Fix Missing Profiles

* Fix Missing Profiles
2026-04-26 20:49:00 +02:00
Edi316 9c06e0f069 Improved gamepad controls (#866)
* Improve Gamepad Controls

* Improve Gamepad Controls

* Improve Gamepad Controls
2026-04-26 20:48:08 +02:00
McSchneidar 7cbc41fe4b Improve Song loading (#862)
* Improve Song Loading

* Improve Song Loading
2026-04-09 09:40:30 +02:00
McSchneidar 0b6bc14563 Fix PortAudio stream cleanup on shutdown and restart (#860)
* Crash Fix

* Crash Fix

* Crash Fix

* Crash Fix
2026-04-08 08:13:42 +02:00
Edi316 3bc71b8241 Countdown for low gap songs (#861) 2026-04-08 08:12:34 +02:00
Edi316 6deb5acbc8 Remember selected position for each folder/tab (#859)
* Remember Last Tab Position

* Remember Last Tab Position

* Remember Last Tab Position

* Remember Last Tab Position

* Remember Last Tab Position
2026-04-02 10:26:23 +02:00
Edi316 80274d1a04 Add Windows 11 to Readme (#857)
* Add Windows 11

* Add Windows 11
2026-03-28 16:33:10 +01:00
Edi316 8caeedd5d6 Reposition CategoryText (#854) 2026-03-26 09:48:54 +01:00
McSchneidar fd3e945aeb Stop CurPlayer when song is not found (#855) 2026-03-26 09:48:16 +01:00
transifex-integration[bot] ba3f362519 Updates for project Vocaluxe and language fr (#853)
* Translate Output/Languages/en.xml in fr

99% of minimum 90% translated source file: 'Output/Languages/en.xml'
on 'fr'.

Sync of partially translated files: 
untranslated content is included with an empty translation 
or source language content depending on file format

* Translate Output/Languages/en.xml in fr

100% translated source file: 'Output/Languages/en.xml'
on 'fr'.

---------

Co-authored-by: transifex-integration[bot] <43880903+transifex-integration[bot]@users.noreply.github.com>
2026-03-23 20:10:33 +01:00