Media Player

Mcaster1MediaPlayer.exe is a standalone, lightweight audio player designed for both local files and ICY internet radio streams. It is launched from the command line, from the TagStack Media Library right-click menu, or directly from File Explorer.

Audio Pipeline

The player uses a clean, low-latency pipeline:

  1. FFmpeg AudioDecoder — decodes any FFmpeg-supported audio format (MP3, FLAC, WAV, AAC, OGG, Opus, WMA, AIFF, and more) to raw PCM
  2. Resampler — converts all audio to S16 44100 Hz stereo (the format waveOut expects)
  3. WaveOutPlayer — double-buffered waveOut output; INFINITE-wait blocking ensures no buffer starvation or premature stream-end detection

ICY streams are handled by the IcyStreamReader component, which negotiates Icy-MetaData: 1, reads metadata intervals, and fires metadata-update messages to the UI as track titles change.

Command-Line Usage

Play a local file

Mcaster1MediaPlayer.exe --file "C:\Music\artist - track.mp3"

Play an ICY internet radio stream

Mcaster1MediaPlayer.exe --stream "http://stream.example.com:8000/live"
Mcaster1MediaPlayer.exe --stream "https://dnas.mcaster1.com:9443/mystation"

Play a queue of files

Mcaster1MediaPlayer.exe --playlist "C:\Music\song1.mp3" --playlist "C:\Music\song2.mp3" --playlist "C:\Music\song3.mp3"

Multiple --playlist flags build an ordered play queue. The player advances through the queue automatically when each track ends.

Combined arguments

# Start with a specific file and queue additional tracks:
Mcaster1MediaPlayer.exe --file "C:\Music\opening.mp3" --playlist "C:\Music\track2.mp3" --playlist "C:\Music\track3.mp3"

CLI flag summary: --file plays a single file and clears any existing queue. --stream connects to an ICY stream URL. --playlist (repeatable) appends to the play queue. All paths and URLs must be quoted if they contain spaces.

User Interface

The player window is a light-themed, resizable MFC dialog. All controls use GDI+ owner-draw rendering to maintain the consistent visual style regardless of the Windows system theme.

Album Art Panel

The artwork area displays:

Art loading is asynchronous — the ArtworkLoader component fetches or decodes art in a background thread and posts a message to update the UI when ready.

Track Information

The info area shows Title, Artist, and Album for local files (read from MySQL if available, otherwise from file tags). For ICY streams, it shows the station name and the current now-playing title as it updates in real time.

Transport Controls

All 9 transport controls are owner-draw GDI+ vector buttons — they render crisp at any DPI with the light theme palette:

ButtonIconFunction
Previous|◀Go to the previous track in the queue, or restart the current track if at the beginning
Rewind◄◄Seek backward 10 seconds
Play / Pause▶ / ▮▮Start, pause, or resume playback. Background turns accent-blue when playing.
Fast Forward►►Seek forward 10 seconds
Next▶|Advance to the next track in the queue
LoopToggle loop mode — repeats the current track indefinitely
ShuffleToggle shuffle mode — randomizes the queue playback order
EQEqualizer settings (placeholder — planned for a future release)
FavouriteMark the current track as a favourite (planned)

Progress Bar

The owner-draw progress bar shows elapsed / total time. Click anywhere on the bar to seek to that position. The current time and total duration are displayed as MM:SS / MM:SS. For streams (no known duration) it shows elapsed time only.

Volume Knob

A GDI+ antialiased rotary knob control. The outer arc (gray) shows the full range 0–100%. The inner arc (accent-blue) fills to the current volume level. The knob face is card-gray with a dark needle and an accent-blue hub dot. Interact by:

Volume is applied to the waveOut output directly. The level is not saved between sessions.

Play Queue Panel

When the player has a queue (built from multiple --playlist flags), the queue list is visible at the bottom of the window. It shows each item's title and artist. The currently playing item is highlighted. Double-click any item to jump to it immediately. The queue uses custom-draw to alternate row colors with the light theme.

ICY Stream Metadata Display

When playing an ICY stream, the player reads inline metadata at the intervals specified by the server (icy-metaint). Each metadata update fires a UI refresh showing the new now-playing title. If the server sends ICY 2.2 headers (artwork URL, station verified flag, social links), the player surfaces the artwork from the URL.

Keyboard Shortcuts

KeyAction
SpacePlay / Pause toggle
Left ArrowSeek -10 seconds (Rewind)
Right ArrowSeek +10 seconds (Fast Forward)
Ctrl+LeftPrevious track
Ctrl+RightNext track
EscapeClose the player

Launching from TagStack

From the TagStack Media Library, right-click any track and select Play in Media Player. TagStack builds the command line automatically with the file path and launches Mcaster1MediaPlayer.exe. The player executable must be in the same folder as Mcaster1TagStack.exe.

Supported Formats

The player can decode any format supported by the bundled FFmpeg libraries (avcodec, avformat, avutil, swresample):