Skip to content
Shiny .NET v4 is here with BLE Windows Support, Improved GPS, & More! Check It Out

Music Releases

Feature
ILyricsProvider interface — fetch lyrics for any music track via dependency injection
Feature
LyricsResult record — contains PlainLyrics (plain text) and SyncedLyrics (synchronized LRC format with timestamps)
Feature
LrcLibLyricsProvider — default cross-platform lyrics provider using the free LRCLIB service, with AOT-compatible source-generated JSON serialization
Feature
GetAlbumArtPathAsync(trackId) on IMediaLibrary — retrieve album artwork as a file path for use as an image source
Feature
Volume property on IMusicPlayer — get/set playback volume from 0.0 (silent) to 1.0 (full), with automatic clamping
Feature Android
Android lyrics via LRCLIB — matches tracks by artist, title, and duration
Feature Android
Android album art via MediaStore content URI
Feature Android
Android volume control via MediaPlayer.SetVolume
Feature iOS
iOS lyrics via LRCLIB (default) and MPMediaItem.Lyrics (native, via IMediaLibrary cast)
Feature iOS
iOS album art via MPMediaItem.Artwork — exported as cached JPEG (600x600, 85% quality)
Feature iOS
iOS volume control via AVPlayer.Volume
Feature
GetPlaylistsAsync() on IMediaLibrary — returns all playlists from the device music library with song counts, sorted alphabetically
Feature
GetPlaylistTracksAsync(playlistId) on IMediaLibrary — returns all tracks in a playlist, in playlist order
Feature
PlaylistInfo record — contains playlist Id, Name, and SongCount
Feature Android
Android playlist querying via MediaStore.Audio.Playlists and MediaStore.Audio.Playlists.Members
Feature iOS
iOS playlist querying via MPMediaQuery.PlaylistsQuery and MPMediaPlaylist
Feature
MusicFilter class — combine Genre, Year, Decade, and SearchQuery criteria with AND logic to filter tracks
Feature
GetTracksAsync(MusicFilter) on IMediaLibrary — query tracks matching any combination of filter criteria
Feature
GetYearsAsync() on IMediaLibrary — returns distinct release years with track counts, with optional MusicFilter parameter
Feature
GetDecadesAsync() on IMediaLibrary — returns distinct decades (e.g., 1990s) with track counts, with optional MusicFilter parameter
Feature
GroupedCount<T> record — generic type pairing a grouped value with its track count, used by all grouping methods
Feature
Year property on MusicMetadata — the release year of the track (nullable)
Feature
GetGenresAsync now accepts an optional MusicFilter and returns GroupedCount<string> with track counts
Feature
Cross-dimensional browsing — get genres by decade, decades by genre, years by genre, etc.
Feature Android
Year metadata read from MediaStore.Audio.Media.YEAR
Feature iOS
Year metadata extracted from MPMediaItem.ReleaseDate
Feature
GetGenresAsync() on IMediaLibrary — returns all distinct genre names from the user’s music library, sorted alphabetically
Feature Android
Android genre querying via MediaStore.Audio.Genres
Feature iOS
iOS genre querying via MPMediaQuery.GenresQuery
Feature
Permission management — request and check music library access using platform-native APIs
Feature
Music metadata querying — retrieve all tracks or search by title, artist, or album
Feature
Audio playback — play, pause, resume, and stop music files with state change and completion events
Feature
File copying — copy music files to app-local storage (where DRM permits)
Feature
Dependency injection — AddShinyMusic() extension method for IServiceCollection registration
Feature
HasStreamingSubscriptionAsync() — check for active Apple Music subscription capability on iOS
Feature
StoreId property on MusicMetadata — Apple Music catalog ID enabling streaming playback of subscription content
Feature Android
Android implementation using MediaStore.Audio.Media and Android.Media.MediaPlayer
Feature iOS
iOS implementation using MPMediaQuery and AVAudioPlayer
Feature iOS
Streaming playback of Apple Music subscription tracks via MPMusicPlayerController.SystemMusicPlayer using StoreId
Feature iOS
DRM-aware — ContentUri is empty for Apple Music subscription tracks that cannot be copied, but streaming playback is available via StoreId
Feature iOS
IsExplicit property on MusicMetadata — reports whether a track is marked as explicit content via MPMediaItem.IsExplicitItem