MusicPlayer icon indicating copy to clipboard operation
MusicPlayer copied to clipboard

Music player submodule for LyricsX

MusicPlayer

Github CI Status codebeat badge

Music player submodule for LyricsX.

Unified API for music players.

Supported Players

macOS

  • [x] Apple Music (iTunes)
  • [x] Spotify
  • [x] Vox
  • [x] Audirvana
  • [x] Swinsian

iOS

  • [x] Music
  • [ ] Spotify (see #5)

Linux

Read me before using MPRIS
dependencies
  • playerctl (could be installed by package manager)

A running GMainLoop is required to automatically update the player and playback status for MPRIS. If not, you can run one by:

GRunLoop.main.run()

or in other threads:

Thread.detachNewThread { 
    GRunLoop.main.run() 
}

Universal

  • SystemMedia: System-wide Now Playing
    • [x] macOS
    • [x] iOS (jailbroken device only) (test needed)
    • [ ] Windows (via SMTC)
  • [ ] Spotify (Web API)

Helper:

  • [x] Agent: Delegate events to another player.
  • [x] Now Playing: Automatically choose a playing player from given players.
  • [x] MPRIS Now Playing: Just like Now Playing, but automatically find available MPRIS players.
  • [x] Virtual: A virtual player that allows you to manipulate its state.
  • [ ] Remote: Sync player state from other devices.

Usage

Quick Start

let player = MusicPlayers.Scriptable(name: .appleMusic)!
let track = player.currentTrack.title
if player.playbackState.isPlaying {
    player.skipToNextItem()
}

License

MusicPlayer is part of LyricsX and licensed under MPL 2.0. See the LICENSE file.