RE-MOCTv1.0.0 Features Modes Install Documentation GitHub

RE-MOCT v1.0.0

music on console terminal — player · CD ripper · radio client

C++20
ncurses
miniaudio
TagLib
Windows + Linux
Plugin ABI
CD Track 02 [F:] [REPEAT ALL] [SHUFFLE] [CD] [New Miserable Experience (1992)] [EQ] RE-MOCT v1.0.0
Playlist [12]  46m 8s
Gin Blossoms – Hey Jealousy 3:56
Gin Blossoms – Mrs. Rita 4:25
Gin Blossoms – Until I Fall Away 3:52
[#############################---------]  0:28 / 3:56  1411 kbps  44.1 kHz  stereo  CD  vol:15
SPC:pause  n/p:next/prev  [/]:seek  -/+:vol  Tab:focus  Enter:play  ?:help  ^Q:quit

A keyboard-driven terminal music player, CD ripper, and internet-radio client for Windows and Linux, inspired by MOC. Two-pane layout, no mouse, no stutter. All heavy I/O stays off the main thread, every shared state is explicitly protected, and no volatile CD or hardware path ever leaks into persistent config.

Download v1.0.0 Read the docs Source on GitHub

Windows (MSYS2 UCRT64) · Linux (Debian Trixie) · MIT-style build from source

Two Faces, One Binary

Classic mode is a faithful MOC homage. Ctrl+T is the remix. That toggle is the whole thesis.

Default

Classic mode

Minimal, monochrome, exactly the console player you remember. Governed by theme.conf. Nothing moves that doesn't have to.

Ctrl + T

Awesome mode

A comet progress bar, a sub-cell block visualizer, breathing animations, and 18 named truecolor palettes cycled with F8. The 256-color visuals shine on a Linux terminal.

DOS Chiba Arrakis Mauveine Niflheim Nyarlathotep Zero Cool Tiamat LCARS Mustafar Tux Synergy Tortuga Firelink Tyrian Lothlorien Camelot Matrix

What It Does

Gapless & crossfade

Next track pre-decodes into a second buffer while the current one plays. Seamless transitions, configurable crossfade, and the queue overrides crossfade correctly.

AccurateRip CD ripping

Rip to FLAC, MP3, AAC, or WAV with per-track AccurateRip v1/v2 verification, drive offset correction, and CUETools DB cross-check.

Internet radio

ICY, HLS, and iHeart with live now-playing metadata. Station search via radio-browser.info. Shipped as a loadable plugin.

Equalizer

Multi-band EQ with presets, adjusted live from the right pane. Press e.

Visualizer

Sub-cell block spectrum rendered straight into the terminal grid. Press v.

Lyrics & tags

Synced .lrc lyrics scroll with playback. Built-in tag editor writes through TagLib.

Cover art

Embedded art or fetched from Cover Art Archive, iTunes, and Deezer. Rendered in-terminal.

Scrobbling & Discord

Last.fm and ListenBrainz scrobbling, plus Discord Rich Presence over named-pipe IPC.

ReplayGain

Reads ReplayGain tags and normalizes volume. Toggle with f.

Speed & balance

Pitch-corrected playback from 50% to 200%. Stereo balance with < / >.

BPM detection

Background BPM analysis on track load, surfaced in the track info pane.

Sleep timer

15 / 30 / 45 / 60 / 90 minute auto-stop, cycled with Z, shown in the title bar.

Formats

.mp3 .flac .ogg .opus .wav .aiff .aif .m4a .wma .mp4

Playlists: .m3u .m3u8 .pls .xspf

Rip Verification

Every ripped track is checksummed and matched against the AccurateRip database. The 150-sector preamble offset is honoured as a physical property of the disc, and the disc ID is normalized relative to the first track's LBA — so pressings with non-standard pregaps verify correctly instead of silently missing.

Track  Status        Conf   CRC (v2)
─────  ────────────  ────  ─────────
  01   AccurateRip    200   8b4a1c7e
  02   AccurateRip    200   d3f09a12
  03   AccurateRip    200   6e21bb4f
  ...
 12/12 verified                     
Rips are cross-checked against CUETools DB as a second opinion, and metadata is pulled from MusicBrainz and Discogs.

Plugin Architecture

Every platform-specific capability sits behind a seam with a Windows and a Linux implementation — HTTP, IPC, notifications, CD access, plugin loading. The core is portable; the platform difference is resolved by CMake at build time, never by branching in the code.

The streaming source is a real loadable plugin (remoct_stream.so / remoct_stream.dll) driven through a frozen C ABI, with HTTP injected across a host-services table. A radio fix ships as a rebuilt plugin with no host rebuild. A deterministic test asserts the loaded plugin produces byte-identical audio to the compiled-in reference — so "swap the plugin" never means "hope it still matches."

Get It

Grab a build from GitHub Releases, or build from source. Single-header dependencies (miniaudio, nlohmann/json) and the vendored MD5 are checked in — no separate download step.

git clone https://github.com/RadMageIRL/re-moct
cd re-moct
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure

Output lands in build/bin/remoct (or remoct.exe), with the streaming plugin beside it in build/bin/plugins/. Full per-platform instructions — including the Debian non-free enablement for FDK-AAC — are in BUILD.md.

First keys to know

Tab
Switch focus between browser and playlist
Space
Pause / resume
Ctrl+T
Toggle Classic / Awesome mode
F8
Cycle Awesome-mode theme
?
Full key bindings
Ctrl+Q
Quit

Everything else is in the documentation.