Crate apple_music

Crate apple_music 

Source
Expand description

§Apple Music

A Rust Library to fully control local MacOS Apple Music player. crates.io maintenance-status docs.rs This crate provides a convenient way of controlling a MacOS Apple Music player, fully through Rust code. The logic behind this crate relies on Apple’s scripting APIs through osascript CLI and JavaScript scripts.

§Installation

apple-music is available directly on crates.io:

cargo add apple-music

§How-to

Import the library in your project:

use apple-music::AppleMusic;

The library entry point is AppleMusic. From there, you can:

  • Get the application’s data - AppleMusic::get_application_data(); -> ApplicationData
  • Get the current track - AppleMusic::get_current_track(); -> Track
    • Track can then be used directly:
      • Favorite / dislike Track - track.set_favorited(true); or track.set_disliked(true);
      • Download Track - track.download()
      • Reveal Track in Player - track.reveal_in_player()
  • Get the current playlist - AppleMusic::get_current_playlist(); -> Playlist
    • Playlist can then be used directly:
      • Search for a track in a playlist - playlist.search_for_tracks(track_name) -> Vec<Track>
      • Reveal Playlist in player - playlist.reveal_in_player()
      • Download Playlist - playlist.download() To control the player, you can do it directly using AppleMusic:
  • Set the volume - AppleMusic::set_sound_volume(50);
  • Change track - AppleMusic::next_track();
  • Play specific Track - AppleMusic::play_track(Track);
  • Pause - AppleMusic::pause();
  • Quit the application - AppleMusic::quit(); That is just a part of the available API, without even mentioning the data you have access to. For more info and an exhaustive list of what’s available, please check out the documentation!

§Example

let playlist = &AppleMusic::get_playlist_by_id(1234).unwrap();
AppleMusic::play_playlist(playlist); //! Apple Music player starts playing provided Playlist.
AppleMusic::set_shuffle(true); //! Shuffle is now enabled on currently playing Playlist.
let track = playlist.fetch_playlist_tracks().unwrap()[5];
AppleMusic::play_track(track); //! Apple Music player starts playing provided Track.
let current_track = AppleMusic::get_current_track().unwrap();
println!("{}", current_track.name()); //! "An awesome song!"
println!("{}", current_track.artwork_url()); //! Prints the direct url for the Artwork of the Track.
current_track.set_favorited(true); //! Track is now favorited!
AppleMusic::next_track(); //! Goes to next track.
let current_track = AppleMusic::get_current_track().unwrap();
current_track.reveal_in_player(); //! Track is revealed and selected on Apple Music player.
current_track.set_disliked(true); //! Track is now disliked!
AppleMusic::set_sound_volume(15); //! Sets Player volume to 15.
playlist.download(); //! Playlist is being downloaded on Apple Music player.
AppleMusic::quit(); //! Quit Apple Music application on Mac.

§Limitations

§Platforms

This crate only works on MacOs, and has only been tested with macOS 13.4.1 and Apple Music 1.3.5. I would be more than happy provide support for other version of MacOs / Apple Music, do not hesitate to open an issue if you are facing failures!

§Next Steps

Before v1.0:

  • Finish to add remaining classes & methods:
    • ADD()
    • EXPORT()
    • REFRESH()
    • Ensure the whole API is covered by this crate

Structs§

AirplayDevice
Information about devices connected via AirPlay.
AppleMusic
Strict entry point of the module containing the whole logic.
ApplicationData
Contains data related to the Apple Music player, as well as a list of user’s Playlists.
Artwork
Data for a given Artwork.
Encoder
Information about a given Encoder.
EqPreset
Information about a given Equalizer Preset.
Playlist
Provides data related to a specific playlist as well as a list of Tracks (if fetched).
Track
Provides data related to a specific Track as well as its artworks.
Visual
Information about a given Visual.

Enums§

AirplayDeviceKind
Type of Airplay Device (AppleTV, Bluetooth, Computer …).
CloudStatus
iCloud status for Track.
Error
Kind
Type of Rating: User-made or Computed.
MediaKind
Type of Media: Song, MusicVideo or Unknown.
PlayerState
Current State of Player.
PlaylistClass
Type of Playlist (User, Subscription, Folder…).
ShuffleMode
Type of Shuffle (Songs, Albums, Groupings).
SongRepeat
Type of Song Repeat (Off, One, All).
SongRepeatMode
Currently playing Repeat mode
SpecialKind
Kind of Special Playlist (Genius, Library, Purchases…).
TrackKind
Type of Track: From an URL, a File, or Shared.