Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Maolan Player

A simple desktop audio player built on maolan-engine and [maolan-widgets](iced 0.14 widgets). It plays through the same engine and audio backends as the Maolan DAW, with a playlist and basic transport controls.

Features

  • Playlist with add-files / add-folder (recursive) import, removal, and click-to-select; persisted to ~/.config/maolan-player/playlist.json.
  • Transport: play, pause, stop, previous song, next song. "Previous"/"next" switch songs rather than seeking. Playback auto-advances at the end of a song.
  • Audio settings screen (gear button): audio backend, output device, and buffer size — the same audio_setup widget as the Maolan editor's start screen. Settings persist to ~/.config/maolan-player/settings.json.
  • Decode via maolan-engine: WAV/PCM, FLAC, MP3, Ogg FLAC (OxideAV) with a Symphonia fallback (Ogg Vorbis, AAC, ALAC, MP4/M4A).

Building and running

Requires a Rust toolchain (edition 2024). Debug builds work but the engine is heavy — release is recommended for actual listening:

cargo build --release
cargo run --release

The audio device is chosen with this precedence:

  1. First command-line argument, e.g. maolan-player /dev/dsp5
  2. The MAOLAN_PLAYER_DEVICE environment variable
  3. Saved settings from the settings screen
  4. Per-OS default:
    • FreeBSD: OSS device for the hw.snd.default_unit sysctl (e.g. /dev/dsp5); falls back to /dev/dsp
    • Linux: ALSA default
    • Windows: WASAPI default
    • macOS: CoreAudio default output device
    • JACK is available on Unix via any of the overrides above (jack)

Controls

Button Action
File-plus Add audio files (multi-select dialog)
Folder Add a folder recursively
Skip-back Previous song in the playlist
Play / Pause / Square Play / pause / stop
Skip-forward Next song in the playlist
Trash Remove selected song from the playlist
Gear Audio settings (backend, device, buffer size)

Known issues

  • On FreeBSD OSS, large buffer sizes (periods above ~1024 frames) can play back slower than realtime with some device setups (observed with virtual_oss): the playhead crawls and audio drops out. The default picks a small period; if you raise the buffer in settings and hit this, lower it again. The engine-side root cause is not yet fixed.
  • Double-click-to-play is not implemented; select a row and press play.
  • Applying new audio settings restarts the engine client in place (the engine only tears down its hardware worker cleanly for JACK).

Repository layout

  • src/main.rs — iced application entry, per-OS default device, tokio executor
  • src/app.rs — engine client wiring, transport state, UI update/view
  • src/playlist.rs — playlist model, recursive folder import, persistence
  • src/settings.rs — backend/device model, discovery, settings persistence
  • src/buffer.rs — buffer-size ladders per backend
  • examples/playback_repro.rs — headless playback check (engine open + play + transport sampling)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages