Skip to content

A simple GUI audio player written in Rust with egui. Inspired by foobar2000.

Notifications You must be signed in to change notification settings

notryanb/music-player

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Music Player

A simple GUI music player inspired by foobar2000 written in Rust using egui. The goal of this project is to learn about making gui/ native apps, audio, databases / text search. It is not meant to be used as a serious audio player.

Goals

  • Basic music player functionality. Play, pause, stop.
  • Create a music library, which is indexed for searching.
  • Parse id3 tags from tracks for use with indexing.
  • Create playlists, which can be saved, opened, edited, reordered
  • Drag n' Drop tracks from the music library into the playlist.
  • Save last state of the app when closing.

Stretch goals

  • See if I can make right-click context menus.
  • Visualizations
  • Stream audio
  • Swappable frontend so I can try other Rust cross platform gui libaries.
  • Scrubbable audio. ie. Keep position in audio and arbitrarily move to any position

Stuff to fix or implement

  • Reference playlists by index or actual reference (not a clone...), so info is not lost when changing playlist context
  • Double clicking track automatically starts to play it.
  • Remove playlists.
  • Un-named playlists get (idx) appended
  • Playlist tab section stacks playlist tabs when they don't fit.
  • Add Next and Previous controls
  • Pause is a toggle
  • Play restarts the track
  • Add volume control slider
  • Implement library
  • Refactor so the items parsed in the library are the primary data type passed around instead of separate library items and tracks.
  • Set currently playing track as app Title
  • Display playlist as a table [Playing, Track #, Artist, Album Title, etc... ]
  • Add player indicators next to the track
  • Improve library build performance and probably offload to a non-ui thread.
  • Add toolbar with File, Properties, Help, etc...
  • Save app state on close (just get it working bare min with a random file).
  • Use Confy for app state load/save
  • Refactor into more sensible responsibilities (think components / widgets / features).
  • Investigate performance regression with a large library (this is due to sorting/grouping the view on every frame)
  • Fix library view performance. Don't need to keep computing the grouping every frame - persist it in app state with a new data structure.
  • Fix all egui deprecation errors... should be just one for using CollapsingState instead of CollapsingHeader
  • Fix Dark mode now that egui has made some changes in 0.18
  • Figure out error handling (anyhow, eyre, thiserror, etc...)
  • Remove tracks from playlist.
  • Reorder items in playlist.
  • Support multiple directories for library
  • Figure out how to use at least one hotkey and key event.
  • Define key events for the application
  • Selected track is highlighted.
  • Playlist plays to end after track is selected.
  • Save playlists.
  • Handle files which can't be decoded correctly into audio.
  • Implement library search.
  • Differentiate between a selected track and the currently playing one.
  • Library display options [ album, artist, year, genre, folder structure, etc...]
  • Library Item hashable?
  • Discovery on how to make the library state smaller when saved (compression, better data structure, maybe save separate from app state, etc...)
  • Surface logs to the user in the UI
  • Stop with all the cloning... seriously. Everything is cloned.

About

A simple GUI audio player written in Rust with egui. Inspired by foobar2000.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages