RE-MOCT v1.0.0-rc1-win
remoct.exe. All required DLLs are bundled;
no separate MSYS2 install is needed to run it. Requires Windows 10 or later (x64).
Building from source is still fully supported — see Build.
Introduction
RE-MOCT (Music On Console Terminal) is a keyboard-driven terminal music player for Windows, inspired by MOC. It runs in a standard console window with a two-pane layout — file browser on the left, playlist on the right — and is designed for continuous, uninterrupted playback with minimal resource overhead.
Key design goals: zero UI stutter (all heavy I/O off the main thread), no silent data races (every shared state is explicitly protected), and no volatile CD or hardware paths leaking into persistent config.
Supported Formats
Playlist files: .m3u .m3u8 .pls .xspf
Interface Layout
┌─ RE-MOCT ─────────────────────────────────────────────────────────────────┐ │ ► Artist - Title [REPEAT ALL] [SHUFFLE] [CD] Album (Year) v1.0 │ ├─ File Browser ───────────────────┬─ Playlist ─────────────────────────────┤ │ [Drives] │ Playlist [14] 39m 40s │ │ [Recent] │ ► Green Day - Burnout 2:08 │ │ [FAVs] │ Green Day - Having a Blast 2:44 │ │ [Bookmarks] │ Green Day - Chump 3:59 │ │ C:\ │ ... │ │ D:\ │ │ │ ▶ G:\ (CD) │ Right pane cycles between: │ │ CD Track 01 │ Playlist · EQ · Visualizer │ │ CD Track 02 │ Track Info · Lyrics · Queue │ │ CD Track 03 │ Help · About · Bookmarks │ ├─ Progress ───────────────────────┴────────────────────────────────────────┤ │ ────────────────────────────────────────── 0:00 / 0:00 1411 kbps CD │ ├─ Commands ────────────────────────────────────────────────────────────────┤ │ SPC:pause n/p:next/prev [/]:seek -/+:vol Tab:focus Enter:play │ └───────────────────────────────────────────────────────────────────────────┘
Tab switches keyboard focus between the file browser and playlist. The active pane is highlighted. The right pane content changes based on context — press e for EQ, v for visualizer, i for track info, L for lyrics, Q for queue, ? for help, A for about.
Playback
Next track is pre-decoded into a second buffer while the current track is still playing. Transition is seamless with no gap between tracks.
Configurable crossfade duration. End of current track fades out while next track fades in simultaneously. Queue overrides crossfade correctly.
Reads ReplayGain tags from files and applies volume normalization. Toggle with f. Not available during CD playback.
Playback speed adjustable from 50% to 200% in 2% steps via { / }. Pitch-corrected.
Left/right stereo balance via < / >. Reset to centre with `.
Automatic BPM analysis runs in a background thread on track load. Displayed in track info pane once complete.
Cycle through 15 / 30 / 45 / 60 / 90 minute auto-stop timers with Z. Timer shown in title bar.
Repeat cycles: off → one → all via r. Shuffle randomises playback order via z. Both persist across sessions.
Playlist
The playlist is the right-hand pane in focus. Tracks are deduped on add. The playlist is restored on next launch (CD tracks are excluded — they are volatile).
l or the goto bar appends to any existing tracks and jumps the cursor to the first newly added entry. If nothing is playing, it autoplays immediately.File Browser
The left pane. Navigate with arrow keys or j/k. The browser always shows three virtual entries at the top:
Navigation
G:\), directories, and playlist files (.m3u, .pls, etc.). Pressing Enter on a playlist file in the goto bar loads and autoplays it.Play Queue
The queue overrides normal playlist order. Queue entries play before the next playlist track, in FIFO order. When the queue empties, playback returns to the playlist from where it left off.
Favourites (FAVs)
A curated list of up to 50 starred audio files. Stored in config as fav= entries. FIFO overflow: adding a 51st entry drops the oldest. CD tracks and directories are never stored.
fs::exists() for each entry. Files on unplugged USB drives or deleted paths are shown in a dim/greyed colour and silently skipped on Enter — no crash, no error dialog.CD Audio (CDDA)
RE-MOCT supports Red Book CD audio via Win32 IOCTL on Windows. Inserting a CD and selecting its drive from [Drives] loads the track list directly into the playlist.
Raw sector reads via IOCTL_CDROM_READ_RAW. Audio decoded in a dedicated reader thread into a lock-free ring buffer. Audio callback consumes from ring — no mutex in realtime path.
Non-blocking media check polls every ~2 seconds. On eject, all CD entries are removed from playlist and queue, MusicBrainz state is cleared, and playback stops cleanly.
Ctrl+R fetches metadata via DiscID (SHA-1 + custom Base64 from TOC). Ctrl+F opens a manual search modal — enter artist and album, get a ranked results list from MusicBrainz, with Discogs as a fallback when MusicBrainz has no match (Discogs results are marked [D]). Both sources load full track titles. Rate-limited to 1 req/sec.
CD paths (G:CD Track 01) never enter recent tracks, play stats, config playlists, or bookmarks. All state is purged on eject or application exit.
e tag editor silently ignores them). The info pane omits "Times Played" for CD tracks. Crossfade and EQ both work in CD mode.MusicBrainz (Ctrl+R)
When a disc is loaded, Ctrl+R computes the MusicBrainz DiscID from the TOC and queries the database. On success, track titles and artist update in the playlist immediately and the title bar shows album name and year. If the disc is not found, an error message appears in the command bar for ~5 seconds.
Manual Search (Ctrl+F)
Ctrl+F opens a search modal at any time — no disc required. Type an artist and album name, press Enter or Tab to search. RE-MOCT queries MusicBrainz first; if no results are found it falls back to Discogs automatically. Navigate results with Up/Down, press Enter to load metadata. Press Escape to close without changes.
[D] in the list. Selecting one fetches that release's full detail from Discogs, so track titles load directly — the same as a MusicBrainz pick. Non-standard track positions (e.g. A1, 1-2) are renumbered to line up with the disc, and section/heading rows that carry no audio are skipped.CD Ripping
Press Ctrl+Y in CD mode to open the rip dialog. RE-MOCT rips to FLAC level 5 and MP3 V0 VBR simultaneously. Output goes to %USERPROFILE%\Music\re-moct\Artist - Album (Year)\. Multi-disc releases nest each disc in its own Disc N subfolder under the album folder; single-disc albums write straight into the album folder.
Verifies each track against the AccurateRip database using CRCv2. Applies drive read offset correction and auto-detects disc pressing offset via frame-450 CRC scan. On mismatch, a second pass is triggered after a cache-flush seek.
Computes a disc-wide CRC32 (CTDB) that is offset-immune — no drive offset table required. Falls back gracefully when AccurateRip has no entry for the disc.
Best-effort offline rip with no network verification. Useful for obscure pressings not in any database. ReplayGain and cover art still applied.
FLAC and MP3 files are tagged with artist, album, title, year, track number, ReplayGain (track + album), AccurateRip result, and embedded cover art. Art comes from the Cover Art Archive first; if that has nothing, RE-MOCT falls back to iTunes, then Deezer, matched by artist and album. No API keys are required.
mul_by=1 starts at the 150-sector lead-in before each track's nominal LBA. The 150-sector preamble is physically read from disc because it contains real data (not silence) that affects the checksum. Drive offset is applied as a combined sample shift split into whole-sector LBA advance plus sub-sector skip.Equalizer
10-band parametric EQ using peaking biquad filters. Works for both file playback and CD audio. Press e to open the EQ pane.
Bands: 60 Hz · 170 Hz · 310 Hz · 600 Hz · 1 kHz · 3 kHz · 6 kHz · 12 kHz · 14 kHz · 16 kHz
Visualizer
Press v to open the visualizer in the right pane. Renders a frequency spectrum using block characters. Updates in real time from the audio callback output.
Lyrics
Press L to toggle the lyrics pane. RE-MOCT looks for a .lrc file with the same base name as the playing track (e.g. track.mp3 → track.lrc). LRC files with timestamps scroll automatically as the track plays.
Tag Editor
Press i to open the track info pane, then e to enter edit mode. Five fields are editable: Title, Artist, Album, Genre, and Year. Works for MP3, FLAC, and all TagLib-supported formats.
s. CD tracks cannot be edited. Files with no existing tags show empty editable fields.Key Bindings
Configuration
Config is saved automatically on exit to %APPDATA%\remoct\remoct.conf (or the current directory fallback). It is a plain text key=value file.
vol=15 repeat=all shuffle=0 crossfade=3.0 eq_enabled=1 eq_gains=0,2,1,0,0,-1,0,1,0,0 last_dir=C:\Users\Music track=C:\Music\Albums\Foo Fighters\track01.flac track=C:\Music\Albums\Foo Fighters\track02.flac recent=C:\Music\track.mp3 fav=C:\Music\favourites\song.flac bookmark=C:\Music\Albums stat=C:\Music\track.mp3|7|1718123456
Notable entries
Build
Most users can skip this section and grab the prebuilt v1.0.0-RC1 zip from the Releases page. To build from source, you need MSYS2 with the UCRT64 toolchain. Dependencies installed via pacman:
pacman -S mingw-w64-ucrt-x86_64-gcc pacman -S mingw-w64-ucrt-x86_64-cmake pacman -S mingw-w64-ucrt-x86_64-ninja pacman -S mingw-w64-ucrt-x86_64-ncurses pacman -S mingw-w64-ucrt-x86_64-taglib pacman -S mingw-w64-ucrt-x86_64-flac pacman -S mingw-w64-ucrt-x86_64-lame pacman -S mingw-w64-ucrt-x86_64-libebur128
Place json.hpp (nlohmann/json v3.11.3) in lib/. Then:
cd /e/code/digi rm -rf build && mkdir build && cd build cmake .. -G Ninja ninja
Binary output: build/bin/remoct.exe. For distribution, place its runtime DLLs from C:\msys64\ucrt64\bin\ alongside the executable: libgcc_s_seh-1, libstdc++-6, libwinpthread-1, libFLAC, libogg-0, libmp3lame-0, libebur128, libncursesw6, libtag-2, and zlib1. (Running ntldd -R build/bin/remoct.exe in the UCRT64 shell lists exactly what the binary links.)
RE-MOCT v1.0.0-rc1-win · C++20 · Built with ncurses, miniaudio, TagLib · github.com/RadMageIRL/re-moct