Add support for music (#1059)

## Description
Adds support for music playback

### Features
- Adds a "Now Playing" page which is accessible from the nav drawer
while music is playing
- Manage the playback queue, add/remove/re-order songs
- Supports synced & non-synced lyrics
- Scroll through lyrics
- Click on line for synced lyrics to seek to that position

### User interface
- Customize what's shown on the "Now Playing" page
- Show album cover art, backdrops, and lyrics
- Show a basic bar visualizer
- Search for albums, artists, & songs
- Links between albums, artists, playlists, & music videos when metadata
is available
- Throughout the app, see which song is playing and which ones are in
the queue

Note: lyrics are synced by line. `10.11` added support for syncing by
word, but Wholphin still supports `10.10`

### Related issues
Closes #2 
Closes #267 

### Testing
Emulator & shield testing

## Screenshots
<details><summary>Click to see screenshots</summary>
<p>

### Album grid
![music_album_grid
Large](https://github.com/user-attachments/assets/4573ad32-0cd7-49db-94db-de37ceb6f641)

### Artist page
![music_artist
Large](https://github.com/user-attachments/assets/fdf3b7b9-5c40-434d-867d-7d56e0b3430e)

### Album details
![music_album_details
Large](https://github.com/user-attachments/assets/494d1a76-9581-4a07-a8ee-5c0957f542e0)

### Album is playing/queued
![music_album_queued
Large](https://github.com/user-attachments/assets/55c72cd2-10a9-411d-8bae-b232150db506)

### Now playing page
![now_playing
Large](https://github.com/user-attachments/assets/b773b1bc-71fd-4789-8509-cebfc0d0ffe5)

### Now playing queue
![now_playing_queue
Large](https://github.com/user-attachments/assets/db244462-e33d-452a-93dc-dd2123a4862d)

</p>
</details> 

## AI or LLM usage
None

## Try it out

See instructions at
https://github.com/damontecres/Wholphin/releases/tag/develop-music
This commit is contained in:
Ray 2026-03-24 13:42:18 -04:00 committed by GitHub
parent 8a37d63d09
commit f2570d4ab0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
46 changed files with 6342 additions and 436 deletions

View file

@ -504,6 +504,14 @@
<string name="send_media_info_log_to_server">Send media info log to server</string>
<string name="no_limit">No limit</string>
<string name="max_days_next_up">Max days in Next Up</string>
<string name="albums">Albums</string>
<string name="artists">Artists</string>
<string name="songs">Songs</string>
<string name="go_to_artist">Go to artist</string>
<string name="now_playing">Now playing</string>
<string name="instant_mix">Instant mix</string>
<string name="go_to_album">Go to album</string>
<string name="add_to_queue">Add to queue</string>
<string name="add_row">Add row</string>
<string name="genres_in">Genres in %1$s</string>
@ -707,6 +715,8 @@
<item>@string/photos</item>
</string-array>
<string name="search_for">Search %s</string>
<string name="actor">Actor</string>
<string name="composer">Composer</string>
<string name="writer">Writer</string>
@ -719,7 +729,22 @@
<string name="mixer">Mixer</string>
<string name="creator">Creator</string>
<string name="artist">Artist</string>
<string name="search_for">Search %s</string>
<string name="album_artist">Album artist</string>
<string name="album">Album</string>
<string name="popular_songs">Popular songs</string>
<string name="play_next">Play next</string>
<string name="music_videos">Music videos</string>
<string name="lyrics">Lyrics</string>
<string name="hide_lyrics">Hide lyrics</string>
<string name="show_lyrics">Show lyrics</string>
<string name="song_has_lyrics">Song has lyrics</string>
<string name="remove_from_queue">Remove from queue</string>
<string name="show_album_cover">Show album cover</string>
<string name="show_visualizer">Show visualizer</string>
<string name="show_backdrop">Show backdrop</string>
<string name="play_as_type">Play as?</string>
<string name="visualizer_rationale">Visualizing the currently playing audio requires permission to record audio.</string>
<string name="continue_string">Continue</string>
<string name="select_all">Select all</string>
</resources>