Skip to content

all3f0r1/oneamp

Repository files navigation

OneAmp

It really whips the penguin's ass.

A Winamp-faithful audio player for Linux, written in Rust. No Wine, no compatibility shim — a real native binary that loads your old .wsz skins and plays your music.


Why "One"?

One ring to rule them all — minus the world-domination subtext. One audio player, doing the music side of a Linux desktop properly. Linux (Debian-family) first. Other platforms later, if anyone asks.

What it's trying to be

A Winamp, native on Linux. No Wine, no Bottles, no glue around a Win32 binary — just an ELF that opens an MP3, plays it, and looks like the player you remember. And while we're rebuilding a 25-year-old player from scratch in 2026, we may as well do it in Rust, so the next 25 years are someone else's problem.

Why this exists at all

I grew up on Windows. Liked it, mostly because I didn't know any better. Windows 10 was fine — not as good as 7, but fine. Then 11 happened: a cascade of unanswerable whys. Then Microsoft announced Windows 12 with bright, mandatory, always-on AI snooping baked in. That was the line.

The Linux transition was almost painless. One exception: I tried every audio player I could find — Audacious, Clementine, Strawberry, Rhythmbox, Lollypop, DeaDBeeF, QMMP, you name it — and not a single one made me happy. And as a young boomer, I'd never really left Winamp anyway.

So: build the thing.

What's in the box

  • Audio engine — Symphonia decoding (MP3, FLAC, OGG, WAV), rodio output, gapless transitions between same-format tracks (preloaded decoder swapped into the live audio stream — no device rebuild, no audible silence).
  • 10-band equalizer — RBJ biquads, real-time, ±20 dB range, pixel-perfect skinned EQ window with spline preview and built-in presets.
  • Playlist — drag-drop files and folders, M3U save/load, double-click to play, native-skinned frame, resizable.
  • Native .wsz skins — drop any classic Winamp skin onto OneAmp via Alt+S. A bundled default skin ships embedded in the binary, so first launch is never naked egui.
  • Visualizer — spectrum analyzer (1024-point Hann-windowed FFT) and oscilloscope (256-sample mono waveform), both painted in the skin's authentic viscolor palette. Click the visualization area to cycle Spectrum → Oscilloscope → Off.
  • Custom chrome — no OS title bar fighting the skin. Pixel-perfect drag, double-click to shade, the whole bit.
  • Distribution — every tag produces a tarball, a .deb, and an AppImage.

What's coming

OneDrop — sister project, also Rust, same energy. Nothing on Linux comes close to Milkdrop, and Milkdrop in 2026 is still one of the best music visualizers ever shipped. So we're rewriting it natively. When OneDrop is ready it lands behind a feature gate inside OneAmp's visualization window. That's the plan.

What this is not

A media library. A CD ripper. An iPod sync tool. A podcast manager. A streaming client. A "smart" anything. A 17-tab Swiss-army-app.

It's a music player. It plays music. It looks good doing it.

Install

Grab the artefact that fits your distro from the latest release:

Format How
.deb (Debian/Ubuntu/Mint/…) sudo apt install ./oneamp-vX.Y.Z-linux-x86_64.deb
AppImage (anything else) chmod +x OneAmp-vX.Y.Z-x86_64.AppImage && ./OneAmp-vX.Y.Z-x86_64.AppImage
Tarball tar xzf and run ./oneamp

Build from source

sudo apt install build-essential pkg-config libasound2-dev \
                 libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
                 libxkbcommon-dev

git clone https://github.com/all3f0r1/oneamp
cd oneamp
cargo build --release -p oneamp-desktop
./target/release/oneamp

Hotkeys

Authentic Winamp where possible.

Key Action
Space Play / pause
S Stop
N Next track
P Previous track
L / Ctrl+O Open file
V Toggle shuffle
R Cycle repeat (off → all → one)
Alt+E Toggle playlist window
Alt+G Toggle equalizer window
Alt+M Window shade
Alt+S Load .wsz skin

Architecture

Three threads talking through mpsc channels:

  1. GUI (egui + wgpu) — input, skin rendering, UI state.
  2. Audio (symphonia + rodio) — decoding, EQ, output. Also emits FFT bins for the visualizer.
  3. Visualization — consumes the FFT bins, paints. Will host OneDrop later.

Workspace layout:

  • oneamp-core — audio engine + WSZ skin loader, no GUI deps.
  • oneamp-desktop — egui app, window coordination, skin renderer.
  • oneamp-cli — minimal CLI player, mostly for smoke-testing the engine.

Status

Pixel-perfect WSZ rendering: done. Distribution pipeline: done. Next big rock: OneDrop integration. The roadmap lives at docs/plans/2026-04-29-roadmap.md, the WSZ implementation log at docs/plans/2026-05-01-wsz-format-implementation.md, and the per-version detail in CHANGELOG.md.

License

MIT or Apache-2.0, your pick. See LICENSE.

Credits

  • The original Winamp team — it really whipped the llama's ass.
  • The Strider, Fyre/SacRat, and Skinz crews for keeping the WSZ format documented decades after the fact.
  • The Rust audio crowd — Symphonia, rodio, cpal, fundsp, egui — without whom this would still be a daydream on a sticky note.

About

A Winamp-like audio player for Linux written in Rust

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors