Song server: search and download songs, mobile web UI
- Sources: "free" (Creative Commons songs with media from github.com/UltraStar-Deluxe/songs) and "usdb" (usdb.animux.de with an account; audio/video via yt-dlp from the song's #VIDEO hints or YouTube links in the comments, covers from fanart.tv/YouTube) - Aggregated search (all sources in parallel, in-library flag), download queue into <library>/Downloads/<source>/<Artist - Title>, then rescan - Web UI in wwwroot (plain JS, no build): search, downloads with progress, library; phone first, dark mode, installable - Docker image with yt-dlp, ffmpeg and deno; library mounted writable - Tests for matching, USDB parsing and song rewriting Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
efcc63a640
commit
1e65864c8f
19 files changed
+1862
-12
No files matched your search
@@ -8,15 +8,15 @@ hook-based, so upstream can still be merged.
|
||||
1. **Song server** (`VocaluxeSongServer/`, in progress): a central song library on the homelab. The game becomes the
|
||||
frontend and downloads song files on demand. See `VocaluxeSongServer/README.md`.
|
||||
2. Later: serve the guest WebApp ("browse by phone", `WebApp/` + `VocaluxeWeb/`) directly from the server.
|
||||
3. Later: search and download songs that aren't in the library, from common internet sources (possibly UltraSinger
|
||||
to create songs from audio).
|
||||
3. Search and download songs that aren't in the library (started: server web UI with the sources `free` and `usdb`;
|
||||
next: more sources, UltraSinger to create songs from audio).
|
||||
|
||||
## Layout
|
||||
| Folder | What |
|
||||
|---|---|
|
||||
| `Vocaluxe/` | The game. Song server client: `Base/SongServer/` (`CSongServer` sync, `CRemoteSongFileProvider` downloads) |
|
||||
| `VocaluxeLib/` | Shared library. `Songs/CSongFiles.cs` is the hook every song file access goes through |
|
||||
| `VocaluxeSongServer/` | ASP.NET Core server, Docker image `git.disi.dev/projects/vocaluxe-song-server` |
|
||||
| `VocaluxeSongServer/` | ASP.NET Core server, Docker image `git.disi.dev/projects/vocaluxe-song-server`. `Sources/`: song search and downloads (free CC songs from GitHub, USDB + yt-dlp). `wwwroot/`: mobile web UI (plain JS, no build) |
|
||||
| `VocaluxeWeb/`, `WebApp/` | Built-in webserver of the game and the guest WebApp (Vue), upstream |
|
||||
| `Tests/` | NUnit; song server tests in `Tests/SongServer` |
|
||||
|
||||
@@ -32,6 +32,12 @@ hook-based, so upstream can still be merged.
|
||||
- Config: `config.xml` section `SongServer` (`Url`, `ApiKey`). The contracts (`VocaluxeSongServer/Contracts`) are
|
||||
linked into `Vocaluxe.csproj`; the test project references the server with `extern alias songserver`.
|
||||
|
||||
## Song server web UI and sources
|
||||
- The web UI is plain HTML/CSS/JS in `VocaluxeSongServer/wwwroot` (no build step, no external requests except cover
|
||||
images). Check it at phone width: headless Edge has a ~500px minimum window, so render the page in a 390px iframe.
|
||||
- USDB can't be tested without an account (search and text download need a login). Its HTML parsing is covered by
|
||||
`Tests/SongServer/CSongSourcesTest.cs`; if USDB changes its HTML, fix `CUsdbSongSource.ParseList` there.
|
||||
|
||||
## Build and test (Windows)
|
||||
- `dotnet build Vocaluxe/Vocaluxe.csproj -c DebugWin -p:Platform=x64` (the whole solution also builds the native
|
||||
`PitchTracker`, which needs Visual Studio's C++ tools).
|
||||
|
||||
Reference in new issue
Block a user