Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Capture3 Capture2 Capture # Amp

Classic desktop audio player — .NET 8 + WPF + NAudio.

Amp is a compact skinnable Windows player inspired by classic Winamp/VLC-era desktop controls. It supports local playback, tag/codec display, playlist persistence, M3U import/export, shuffle/repeat, volume, a small VU visualization, and a 10-band equalizer.

Prerequisites

Quick start

dotnet build
dotnet run --project src\Amp.App

On first launch, the playlist is seeded from samples/test.mp3 when that file is present. If the sample is missing, Amp starts with an empty playlist and still builds normally.

Later runs restore from %AppData%\Amp\profile.json.

Features

  • Playback: play, pause, resume, stop, previous, next, seek.
  • Supported local file types: .mp3, .wav, .aif, .aiff.
  • ID3/basic metadata display: artist/title/album/year/genre where available.
  • Codec summaries: container/codec, bitrate, sample rate, channel layout, bit depth, duration where available.
  • Explicit playlist import/export: .m3u and .m3u8.
  • Automatic profile restore: playlist paths, current track, active skin, volume, EQ, shuffle, repeat.
  • Missing-file safe playlists: missing restored/imported entries remain visible as (not found).
  • Playback modes: shuffle, repeat all, repeat one.
  • Audio controls: volume slider and 10-band equalizer.
  • Small stereo VU visualization.
  • Runtime-switchable skins:
    • Compact Dark
    • Classic Radio
    • White Y2K

Controls

Control Action
▶ / ⏸ Play, pause, or resume
Stop
◀◀ / ▶▶ Previous / next track
Seek slider Drag or click to seek within the current track
Volume slider Adjust output volume
EQ sliders Adjust 31 Hz through 16 kHz gains (-12 dB to +12 dB)
Reset EQ Restore all EQ bands to 0 dB
Shuffle Toggle random next-track selection
Repeat Cycle Off → All → One
Add files / Add folder Add supported audio files
Open playlist Replace the current playlist from .m3u/.m3u8
Save playlist Export the current playlist to .m3u8/.m3u
Double-click row Play that track
Drag audio files/folders onto window Add supported audio files to playlist
Skin dropdown Switch skins live

Playlist files

Amp has two kinds of playlist persistence:

  1. Automatic profile restore at %AppData%\Amp\profile.json.
  2. User playlist files through Open/Save playlist (.m3u/.m3u8).

M3U import ignores comments and #EXTINF lines, resolves relative paths from the playlist file directory, and preserves missing entries so moved/deleted files are visible instead of silently discarded.

M3U export writes #EXTM3U, optional #EXTINF duration/display lines, and relative paths when tracks are under the playlist file directory.

Profile persistence

Saved to %AppData%\Amp\profile.json:

  • Playlist file paths (in order)
  • Current track index
  • Active skin
  • Volume
  • Equalizer gains
  • Shuffle enabled
  • Repeat mode

Updated on playlist/skin/playback-mode changes and on exit.

Missing files

If a saved/imported file was moved or deleted, it stays in the playlist and shows as name.ext (not found). Play/next skip unavailable tracks where possible; selecting a missing track shows File not found. without crashing.

Publish a simple Windows exe

Use the helper script from PowerShell:

.\scripts\publish-windows.ps1

Default output:

artifacts\publish\win-x64\Amp.App.exe

Equivalent raw command:

dotnet publish src\Amp.App\Amp.App.csproj `
  --configuration Release `
  --runtime win-x64 `
  --self-contained true `
  --output artifacts\publish\win-x64 `
  -p:PublishSingleFile=true `
  -p:IncludeNativeLibrariesForSelfExtract=true

The publish output includes the skins\ folder next to the executable.

Environment variables

Variable Purpose
AMP_LOG_DIR Override log output directory (default: logs/ under repo root when running from source)
AMP_SKINS_DIR Load skins from a custom folder instead of skins/ next to the executable
$env:AMP_LOG_DIR = "D:\temp\amp-logs"
$env:AMP_SKINS_DIR = "D:\my-skins"
dotnet run --project src\Amp.App

Debug logging

Every run writes timestamped logs to stdout and logs/amp_<timestamp>.log:

2026-06-27T12:05:07.490Z DEBUG [PlaybackService] open ok path=...\song.mp3 durationSec=59.7 sampleRate=44100 channels=2 bits=16 volume=1.00

Startup failures and unhandled UI exceptions are logged with exception details.

Tests

dotnet test tests\Amp.Core.Tests
dotnet run --project tests\Amp.Smoke

The core tests cover playlist behavior, missing-file restore, M3U import/export, metadata display fallbacks, player shuffle/repeat logic, seek behavior, and playback settings. The smoke test uses src/Amp.App/samples/test.mp3 when present; it exits successfully with a skip message if the sample is missing.

Project layout

Path Purpose
src/Amp.Core Playback, playlist, metadata, player orchestration, logging
src/Amp.App WPF UI, skins, profile persistence
src/Amp.App/samples/ Optional test.mp3 (first-run seed + smoke test)
src/Amp.App/skins/ Theme packs (see skins/README.md)
tests/Amp.Core.Tests Unit tests
tests/Amp.Smoke Headless smoke test
scripts/ Publish helpers
logs/ Session logs (gitignored)

Skins

Default skin: Compact Dark. Use the dropdown to switch to Classic Radio, White Y2K, or other installed skins.

Skin authoring: src/Amp.App/skins/README.md

About

WPF MP3 player

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages