Desktop-app

Local Music Player

En musikafspiller til Windows 10 og 11, der spiller musik fra din pc og fra FTP-servere som en NAS, en hjemmeserver eller et webhotel. Mørkt Windows 11-look, FTP-browser i siden, playlisten i midten og afspilleren i bunden.

← Tilbage til projekter Kontakt om desktop-apps

Hvad er det?

Local Music Player er en desktop-app skrevet i C# som en .NET 10 WPF-app. Den spiller både lokale filer og musik, der ligger på en FTP-server, i én fælles playliste – uden at du først skal kopiere noget over.

Appen er én fil, LocalMusicPlayer.exe, på omkring 25 MB. Den kræver .NET 10 Desktop Runtime og husker alt mellem sessioner: playlisten, den aktuelle sang, servere, lydstyrke, shuffle/repeat, equalizer, vinduesstørrelse og sidebarens bredde.

Platform
Windows 10 / 11
Én .exe-fil
≈ 25 MB
Desktop Runtime
.NET 10
Equalizer
10 bånd
  • Lokal musik og FTP/FTPS-servere i samme playliste
  • 10-bånds equalizer med 15 presets
  • Mediataster og Windows’ medie-pop-up med cover
  • Mørkt Windows 11-look bygget ind i WPF

Lokal musik

Tilføj filer, hele mapper med undermapper eller .m3u/.m3u8-playlister – eller træk dem bare ind i vinduet. Filer, der åbnes med “Åbn med…” eller sendes med på kommandolinjen, bliver tilføjet og begynder at spille.

Hovedvinduet: FTP-servere i sidebaren, playlisten med titel, kunstner, album, længde og kilde i midten og afspilleren med cover, knapper, tidslinje, equalizer og lydstyrke i bunden.

Appen spiller de formater, Windows selv kan afkode: MP3, AAC/M4A, FLAC, WAV, WMA og ALAC. Titel, kunstner, album, længde og cover læses fra filernes tags i baggrunden, så playlisten ikke venter på store mapper.

  • Filer, mapper (med undermapper) og .m3u/.m3u8-playlister
  • Træk-og-slip og “Åbn med…” fra Stifinder
  • Tags og cover læses i baggrunden
  • Ogg/Opus via Microsofts gratis Web Media Extensions

FTP-servere

Du kan gemme alle de servere, du vil, med almindelig FTP, explicit FTPS eller implicit FTPS. Selvsignerede certifikater og anonymt login kan slås til pr. server, og “Test forbindelse” tjekker indstillingerne, før du gemmer.

Tilføj en server med host, port, login, krypteringstype, valg om selvsignerede certifikater og startmappe. “Test connection” prøver forbindelsen, før den gemmes.

Gennemse mapperne på serveren og dobbeltklik på en sang for at spille den, eller tilføj valgte sange, en mappe eller et helt mappetræ. Sange hentes til en lokal cache, før de spilles, og mens én sang spiller, hentes den næste i baggrunden – så der ikke er pause mellem numrene.

  • FTP, explicit FTPS og implicit FTPS
  • Adgangskoder krypteret med din Windows-konto (DPAPI)
  • Næste sang hentes i baggrunden – ingen pause mellem numre
  • Cache på maks. 2 GB; de længst ubrugte filer ryger først

Afspilning og playliste

Play/pause, næste/forrige, spol, lydstyrke og lyd fra. Shuffle undgår sange, du har hørt for nylig, og “Forrige” i shuffle går tilbage gennem det, du faktisk har hørt. Repeat kan være fra, alle eller én.

Kan en sang ikke spilles – en fil mangler, formatet understøttes ikke, eller en download fejler – markeres den i playlisten med årsagen, og afspilleren springer videre. Efter gentagne fejl giver den op i stedet for at køre i ring.

Tastaturgenveje
TastHandling
MellemrumPlay / pause
Ctrl+Venstre / Ctrl+HøjreForrige / næste
Ctrl+Op / Ctrl+NedLydstyrke
S / R / M / EShuffle / repeat / lyd fra / equalizer
Ctrl+FSøg i playlisten
Enter / DeleteSpil / fjern den valgte sang
Backspace (FTP-listen)Op til forældremappen
  • Søg på titel, kunstner, album eller filnavn
  • Flyt med Alt+Op/Ned, fjern med Delete, åbn filens placering med højreklik
  • Gem de lokale sange som .m3u8-playliste
  • Viser antal sange, samlet længde og hvor mange der kommer fra FTP

Equalizer

10 bånd fra 31 Hz til 16 kHz, hver ±12 dB, plus preamp og venstre/højre-balance. Der er 15 presets – blandt andet Bass boost, Loudness, Vocal, Rock og Small speakers – og Custom, så snart du selv flytter en slider.

Equalizeren med presettet Bass boost: preamp til venstre, 10 bånd fra 31 Hz til 16 kHz og balance nederst. Dobbeltklik på en slider nulstiller den.

Ændringer høres med det samme, mens musikken spiller, og en limiter forhindrer, at kraftige boosts knaser.

  • 10 bånd, 31 Hz – 16 kHz, ±12 dB
  • Preamp og balance
  • 15 presets plus Custom
  • Limiter mod forvrængning

Sådan kommer lyden ud af højttalerne

Lyden går gennem én kæde, uanset om filen ligger lokalt eller er hentet fra FTP:

lydfil (lokal eller hentet fra FTP til cachen)
  → Media Foundation-dekoder (NAudio)
  → preamp → 10 EQ-filtre pr. kanal → lydstyrke → balance → limiter
  → højttalere

Equalizeren er skrevet i hånden: ti standardfiltre pr. kanal, den almindelige byggesten i lyd-equalizere. Når du flytter en slider, sendes de nye indstillinger til lydtråden, som tager dem i brug ved næste bid lyd – så der kommer ingen klik eller hak. Lydstyrkeændringer udglattes på samme måde.

Mediataster og et skift af lydmotor

Mediatasterne virker, også når appen ligger i baggrunden, og Windows’ medie-pop-up viser nummer og cover. NAudio forbinder ikke selv til Windows’ mediekontroller, så appen holder en skjult, lydløs Windows-medieafspiller kørende alene for at få dem – og fortæller den titel, kunstner, cover og om der spilles.

Første version spillede gennem Windows’ egen mediemotor, som gav mediataster og pop-up gratis. Da equalizeren kom på listen, viste det sig, at den motor kun har en simpel 4-bånds equalizer. Afspilningen blev derfor flyttet til NAudio, mens mediatasterne blev bevaret via den skjulte afspiller.

Kodens opbygning

Koden er delt i vinduer, services og modeller:

FilHvad den gør
MainWindow.xaml/.csHovedvinduet: playliste, afspilningslogik, shuffle og repeat, FTP-browser
FtpProfileWindowDialog til at tilføje/redigere servere, med forbindelsestest
EqualizerWindowEqualizer-vinduet
Services/AudioEngine.csAfspilning, spoling og mediataster
Services/EqualizerSampleProvider.csLydbehandlingskæden
Services/FtpService.csGennemse servere, downloads og cachen
Services/AudioFiles.cs, MetadataReader.cs, SettingsStore.csFilscanning og playlister, tags, gemte indstillinger
Models/Sange, servere, equalizer og app-indstillinger

Indstillinger gemmes i %AppData%\LocalMusicPlayer\settings.json, og FTP-cachen ligger i %LocalAppData%\LocalMusicPlayer\Cache.