/harmonoid

A ๐ŸŽต music app, that can download music for free & has no ads.

Primary LanguageDartGNU General Public License v3.0GPL-3.0

Discord Gitter GitHub release (latest by date)

A ๐ŸŽต music app, that can download music for free & has no advertisements!

The app is meant to be used in such a way, that you download your favorite music offline & listen it whenever without internet connection.

๐Ÿ’พ Android users can download pre-compiled APK here: Download (Changelog: v0.0.2+2-pre-release)
Please consider โญ starring the repository if you are enjoying the app & show YOUR SUPPORT.
NOTE: You might see a dialog "Your phone and personal data are more vulnerable to attack by unknown apps." when installing this app. But let me tell you that, this app is safe as app will not ask for any of your device permissions at all (not even storage) & you are seeing the code in this repository. Still, it is your choice.

๐Ÿ’Ž The Experience You Always Wanted

Browse Offline Download Music Listen Offline
browse_offline download_music search_modes

UI In Motion

These GIFs are only 25 FPS ๐Ÿ˜ฃ. Please wait for the GIFs to load, if they appear choppy to you.

โœ… Features

Beautiful looking, yet full of unique features.

  • ๐Ÿ’พ Free Music Download

    • You download the music of your choice for free and listen offline.
  • โœจ Stunning User Interface

    • The app has every element on screen beautifully animated, & very strictly follows material.io guidelines.
  • ๐Ÿ’ Ads Free Forever

    • No advertisements! This app is powered completely by YOUR LOVE.
  • ๐Ÿ”’ Safe To Use

    • The app does not ask for any of your device permissions at all. (Not even storage).

๐Ÿ‘Œ Currently Added

  • ๐Ÿ” Album & track search.
  • ๐Ÿ’พ Track downloads for offline playback. (generally a track will take under 30 10 seconds to be downloaded. 20 5 seconds, if you have good connection.)
  • ๐Ÿงท Saving track & album metadata offline.
  • โฏ Background play & media notification.
  • ๐Ÿ“ƒ Adding whole album to playlist, when playing a track from it.
  • โŽ Deleting downloaded tracks.
  • ๐Ÿ“ Simultaneously downloading tracks of an album.
  • ๐Ÿ“ƒ Playlist Support (very basic at the moment, will improve in future).
  • ๐ŸŽต Now Playing (will improve in future) & About Screens
  • ๐ŸŒˆ Accent Colors
  • ๐Ÿ˜Ž Dark Mode

๐ŸŽ‰ Help With Translations

You can help me by providing translations for the app in your language & see the app running in your native language.

For that purpose, you can checkout this file on the repository, you can translate this, even if you have little to no knowledge of Dart.

Translation Credits
Language Provider
Russian @raitonoberu
Slovenian @mytja
Portuguese @bdlukaa
Hindi @alexmercerind
German @MickLesk

Thankyou!

๐Ÿ“– Inner Workings

The code that this app uses for the majority of work like saving, deleting, playing music & managing history etc. is here in the repository.

Apart from above, the app uses Python 3 based back-end for serving to the user requests. You can see it here in this repository. It is managed by @raitonoberu & me.

โ” FAQ

For pre-release v0.0.3

  • How do I download music?

    • Go to the 'Collection' tab, and tap on the search bar. Then, enter a keyword to search & select the mode (i.e Album, Artist or Track) in which you want to search. You'll be greeted with the music close to your keyword in a moment. Tap on your preferred result, it's album will show up to you. Now, tap on the tracks you want to save offline.
  • How do I play my saved music?

    • Go to the 'Collection' tab (or the starting screen of the app), and tap (or should I say, spin) the refresh button to see your latest music. Now, play whatever you want.
  • How do I control media playback?

    • 'Now Playing' tab of the app is for this job. You can do the basic job from the app notification itself.
  • How do I delete a saved track?

    • In your 'Collection' tab, open the album to which that track belongs. Long press that track (which you want to delete) and tap 'YES' for deleting confirmation.
  • How do I delete a saved album?

    • In your 'Collection' tab, open the album that you wanna delete. Press the bin button in the top right corner.
  • Why is the first search on app generally slower & delayed?

    • This is because of the fact that our backend goes to sleep, if no users are online. So it takes time for it, to warm up again on your first request.
  • My favorite music is incorrectly downloaded. What is wrong with it?

    • Open issue, providing the name of album & track.
  • I'm seeing the error 'We all have bad days' when downloading my music. What is wrong?

    • This will most likely happen when something is wrong on our side (like dependencies of server are not up to date or our server's IP got blocked with 429 responses due to high amount of requests etc). You can open issue, if you see this over a long period of time, generally I'll fix this quickly.

๐Ÿ“ฆ Dependencies

Package Maintainer
animations flutter
http flutter
path flutter
path_provider flutter
just_audio ryanheise
audio_service ryanheise
url_launcher flutter

๐Ÿ”ง Starting Development

This application is powered by Flutter, which uses Dart as its programming language.

The only reason to choose Flutter for this app was because, it seemed promising & has great pre-defined widgets and styles. It was a great moment for me to learn it, as it is growing (becoming popular) at a very fast rate.

Assuming that you have already installed Flutter SDK on your device.

You can start the app in following way:

  • Clone the repository and enter it
    • git clone https://github.com/alexmercerind/harmonoid.git && cd harmonoid
  • Get the dependencies
    • flutter packages get
  • Run the application on your device
    • flutter run
    • This will run the application in the debug mode. To get the optimal performance, use any of the additional paramters --release or --profile.

For building a performant APK, you can write following in your terminal:

Don't forget to setup your keystore.

flutter build apk

You can use additional parameter --split-per-abi to reduce APK size by building separate APKs for each architecture.