![]() |
![]() |
As of now, the project contains OVER 10K LINES OF CODE.
Recently, it is migrated to use Provider for its state management. At few, places StatefulWidget
s are still present.
The project supports sorting of music based on media metadata tags & native playback directly from file explorer etc. The whole user interface strictly follows the material design guidelines.
Checkout project structure to get started.
The plan of project is to bring the best, cross platform music experience for all users.
-
Powerful music collection generation
- Music automatically gets arranged into albums, artists & tracks.
-
Time synced lyrics
- Get time synced lyrics for all your saved music.
- See lyrics of currently playing song directly in your notifications.
-
Play local music
- Play music saved on your device either from the collection in the app or using file browser.
-
Beautiful user interface
- Every element on screen beautifully animated & very strictly follows material.io guidelines.
-
Ads free forever
- No advertisements! No profits associated with the project.
-
Playlists
- Make own playlists & play your favorite music on the go.
-
Freedom
- Share music from the app to other devices with a single tap.
-
Personalization
- Change accent color & theme of the app.
-
Download music
- A personal dedicated server is required for downloading music. [NOT INCLUDED IN APP]
Developer
Collaborators
Translators
Language | Provider |
---|---|
Russian | @raitonoberu |
Slovenian | @mytja |
Portuguese | @bdlukaa |
Hindi | @alexmercerind |
German | @MickLesk |
Dutch | @kebabinjeneus |
Swedish | Max Haureus |
French | @gaetan1903 |
You can see the app running in your own language by providing me translations.
For that purpose, you can add your changes to this file on the repository. You can translate this, even if you have little to no knowledge of Dart.
The app is available on Google Play, your positive rating will be appreciated.
The majority of the logical & core code of this app is here in the repository.
Thanks to following people & organizations for their indirect contribution.
Glad you're interested in contributing to the project, here is the project structure for guiding you to this codebase.
Labels marked with *
have scope for improvement in future.
harmonoid/lib
β
β main.dart [Everyone knows this.]
β
ββββcore [Internal application logic.]
β collection.dart [For sorting, discovering, handling, updating, refreshing etc. of music.]
β fileintent.dart [For dealing with intents to open audio files.]
β configuration.dart [For saving application configuration.]* (Can be improved.)
β discover.dart [For interacting with server.]
β download.dart [For fetching content.]
β mediatype.dart [Various media structures used within application.]
β playback.dart [For playback using assets_audio_player or dart_vlc.]* (Yet to be done for desktop.)
β
ββββinterface [Application user interface.]
β β
β ββββcollection [Widgets & screens related to music collection.]
β β
β ββββsettings [Widgets & screens related to application settings.]
β β
β ββββdiscover [Widgets & screens related to music discovery.]* (Yet to be migrated to Provider.)
β
β nowplaying.dart [Now playing widgets & screen.]
β harmonoid.dart [Root Widget of application.]
β home.dart [Child of Harmonoid widget, contains tabs for different screens.]
β exception.dart [A minimal MaterialApp to replace Harmonoid in case of any exception.]
β changenotifiers.dart [General ChangeNotifiers for state management.]
β
ββββutils
β methods.dart [General utility methods used across the application.]
β widgets.dart [Various Widgets that bring application to life.]
β
ββββconstants [General globalization related classes.]* (Can be improved.)
language.dart
strings.dart
GNU General Public License v3