Desktop-App
Local Music Player
Ein Musikplayer für Windows 10 und 11, der Musik vom PC und von FTP-Servern wie einem NAS, einem Heimserver oder einem Webhosting abspielt. Dunkler Windows-11-Look, FTP-Browser in der Seitenleiste, Playlist in der Mitte und Player unten.
Was ist das?
Local Music Player ist eine Desktop-App, geschrieben in C# als .NET-10-WPF-App. Sie spielt lokale Dateien und Musik von einem FTP-Server in einer gemeinsamen Playlist – ohne vorher etwas zu kopieren.
Die App ist eine einzige Datei, LocalMusicPlayer.exe, mit etwa 25 MB. Sie braucht die .NET 10 Desktop Runtime und merkt sich alles zwischen den Sitzungen: Playlist, aktuellen Song, Server, Lautstärke, Shuffle/Repeat, Equalizer, Fenstergröße und Breite der Seitenleiste.
- Plattform
- Windows 10 / 11
- Eine .exe-Datei
- ≈ 25 MB
- Desktop Runtime
- .NET 10
- Equalizer
- 10 Bänder
- Lokale Musik und FTP/FTPS-Server in derselben Playlist
- 10-Band-Equalizer mit 15 Presets
- Medientasten und das Windows-Medien-Pop-up mit Cover
- Dunkler Windows-11-Look, in WPF eingebaut
Lokale Musik
Füge Dateien, ganze Ordner mit Unterordnern oder .m3u/.m3u8-Playlists hinzu – oder zieh sie einfach ins Fenster. Mit „Öffnen mit…“ oder über die Kommandozeile geöffnete Dateien werden hinzugefügt und starten.
Gespielt wird, was Windows dekodieren kann: MP3, AAC/M4A, FLAC, WAV, WMA und ALAC. Titel, Interpret, Album, Länge und Cover werden im Hintergrund aus den Tags gelesen, sodass die Playlist nie auf große Ordner wartet.
- Dateien, Ordner (mit Unterordnern) und .m3u/.m3u8-Playlists
- Drag & Drop und „Öffnen mit…“ aus dem Explorer
- Tags und Cover werden im Hintergrund gelesen
- Ogg/Opus über die kostenlosen Web Media Extensions von Microsoft
FTP-Server
Speichere beliebig viele Server mit normalem FTP, explizitem FTPS oder implizitem FTPS. Selbstsignierte Zertifikate und anonymer Login lassen sich pro Server erlauben, und „Verbindung testen“ prüft die Einstellungen vor dem Speichern.
Durchsuche die Ordner auf dem Server und spiele einen Song per Doppelklick, oder füge ausgewählte Songs, einen Ordner oder einen ganzen Ordnerbaum hinzu. Songs werden vor dem Abspielen in einen lokalen Cache geladen, und während ein Song läuft, lädt der nächste im Hintergrund – so gibt es keine Pause zwischen den Titeln.
- FTP, explizites FTPS und implizites FTPS
- Passwörter mit deinem Windows-Konto verschlüsselt (DPAPI)
- Der nächste Song lädt im Hintergrund – keine Lücke zwischen Titeln
- Cache auf 2 GB begrenzt; am längsten ungenutzte Dateien zuerst entfernt
Wiedergabe und Playlist
Play/Pause, weiter/zurück, Spulen, Lautstärke und Stumm. Shuffle vermeidet kürzlich gehörte Songs, und „Zurück“ geht im Shuffle-Modus durch das, was du wirklich gehört hast. Repeat: aus, alle oder einer.
Lässt sich ein Song nicht abspielen – fehlende Datei, nicht unterstütztes Format oder fehlgeschlagener Download –, wird er mit dem Grund in der Playlist markiert und der Player springt weiter. Nach wiederholten Fehlern gibt er auf, statt endlos zu kreisen.
| Taste | Aktion |
|---|---|
| Leertaste | Play / Pause |
| Strg+Links / Strg+Rechts | Zurück / weiter |
| Strg+Hoch / Strg+Runter | Lautstärke |
| S / R / M / E | Shuffle / Repeat / Stumm / Equalizer |
| Strg+F | Playlist durchsuchen |
| Enter / Entf | Ausgewählten Song spielen / entfernen |
| Rücktaste (FTP-Liste) | Übergeordneter Ordner |
- Suche nach Titel, Interpret, Album oder Dateiname
- Sortieren mit Alt+Hoch/Runter, Entfernen mit Entf, Dateispeicherort per Rechtsklick
- Lokale Songs als .m3u8-Playlist speichern
- Zeigt Anzahl Songs, Gesamtlänge und wie viele von FTP kommen
Equalizer
10 Bänder von 31 Hz bis 16 kHz, je ±12 dB, plus Preamp und Links/Rechts-Balance. Es gibt 15 Presets – darunter Bass boost, Loudness, Vocal, Rock und Small speakers – und Custom, sobald du selbst einen Regler bewegst.
Änderungen wirken sofort während der Wiedergabe, und ein Limiter verhindert, dass starke Anhebungen knacken.
- 10 Bänder, 31 Hz – 16 kHz, ±12 dB
- Preamp und Balance
- 15 Presets plus Custom
- Limiter gegen Verzerrung
Wie der Ton zu den Lautsprechern kommt
Der Ton läuft durch eine einzige Kette, egal ob die Datei lokal liegt oder von FTP geladen wurde:
Audiodatei (lokal oder aus dem FTP-Cache)
→ Media-Foundation-Decoder (NAudio)
→ Preamp → 10 EQ-Filter pro Kanal → Lautstärke → Balance → Limiter
→ Lautsprecher
Der Equalizer ist von Hand geschrieben: zehn Standardfilter pro Kanal, der übliche Baustein für Audio-Equalizer. Ein bewegter Regler schickt neue Einstellungen an den Audio-Thread, der sie beim nächsten Audioblock übernimmt – ohne Klicks oder Aussetzer. Lautstärkeänderungen werden genauso geglättet.
Medientasten und ein Wechsel der Audio-Engine
Die Medientasten funktionieren auch, wenn die App im Hintergrund läuft, und das Windows-Medien-Pop-up zeigt Titel und Cover. NAudio verbindet sich nicht selbst mit den Windows-Mediensteuerungen, darum hält die App einen versteckten, stummen Windows-Mediaplayer nur dafür bereit – und teilt ihm Titel, Interpret, Cover und Wiedergabestatus mit.
Die erste Version spielte über die Windows-eigene Medien-Engine, die Medientasten und Pop-up gratis mitbrachte. Als der Equalizer dazukam, zeigte sich, dass diese Engine nur einen einfachen 4-Band-EQ bietet. Die Wiedergabe wurde deshalb auf NAudio umgestellt, die Medientasten blieben über den versteckten Player erhalten.
Aufbau des Codes
Der Code ist in Fenster, Services und Modelle aufgeteilt:
| Datei | Was sie macht |
|---|---|
| MainWindow.xaml/.cs | Hauptfenster: Playlist, Wiedergabelogik, Shuffle und Repeat, FTP-Browser |
| FtpProfileWindow | Server hinzufügen/bearbeiten mit Verbindungstest |
| EqualizerWindow | Equalizer-Fenster |
| Services/AudioEngine.cs | Wiedergabe, Spulen und Medientasten |
| Services/EqualizerSampleProvider.cs | Die Klangverarbeitungskette |
| Services/FtpService.cs | Durchsuchen, Downloads und Cache |
| Services/AudioFiles.cs, MetadataReader.cs, SettingsStore.cs | Dateiscan und Playlists, Tags, gespeicherte Einstellungen |
| Models/ | Songs, Server, Equalizer und App-Einstellungen |
Einstellungen liegen in %AppData%\LocalMusicPlayer\settings.json, der FTP-Cache in %LocalAppData%\LocalMusicPlayer\Cache.