Giter Club home page Giter Club logo

quicklyric's Introduction

QuickLyric

alt text

QuickLyric is an android app that instantly fetches your lyrics for you. Its main perks is that it's very fast, features Material Design as well as a search engine, a Karaoke mode, the downloading of all your lyrics on your device & some handy settings. While most lyrics app require you to type the name of the song you're searching for or annoy you with tedious notifications every time the song has changed, QuickLyric automatically detects what song is playing on your device and instantly delivers the lyrics to you.

QuickLyric is written in Java and runs on phones and tablets equipped with Android 4.0 or higher. The build system relies on Gradle and Android Studio is therefore recommended.

FAQ:

Can I fork this project, put it on the Google Play Store and put my ads on it?

Unless you meet all the criteria, the short answer is "No and I will get your fork taken down".

A longer answer is here.

How can I integrate QuickLyric into my music player?

If you want to add a button that says "show lyrics in QuickLyric" (or something like that) in your app, you can find some instructions in the Wiki.

Download

Dowload from Google Play

Download from F-Droid

or on the original F-Droid page.

Note: The F-Droid page is currently not up to date, they still have a build from 2 years ago. The Google Play version contains some teeny tiny portions of code that are not public (monetization, handling copyrighted content, etc.)

Features

  • Lyrics - Shows the lyrics of the song you are listening to at the moment. The Refresh button allows your to update the lyrics when the next song has started playing. In the action bar, you can to download the lyrics on your device (for offline usage), search and share the URL with a friend. If you're lucky, the Karaoke mode might be available for that song.
  • Saved Lyrics - Each lyrics can be stored on your device.
  • Search - Search for Lyrics on Genius.
  • Batch Download - Download the lyrics for all your music in a few minutes.
  • Material Design
  • System Integration - Access the lyrics you want after you've identified a song with Shazam or Soundhound via the share button.
  • NFC - Share lyrics with your friends via Android Beam.
  • More than 15 languages supported - Including German, Greek, Spanish, French, Italian, Japanese, Dutch, Polish, Russian, Turkish and English.

Build

  • Make sure you have the latest version of Gradle installed. You should have at least the version that is used in Quicklyric/build.gradle. There is no gradle wrapper on this repo.
  • Download the sources
  • Edit the different API keys in the com.geecko.QuickLyric.Keys file.
  • Input your signature keystore, login and passwords into the QuickLyric/build.gradle file
  • cd to the root of the project and execute "$ gradle build"

Translations

What QuickLyric needs most right now is translations! If you're bilingual you can submit translations over at Crowdin (no need to register, just use your GitHub/Google/Facebook/Twitter account).

Every translator may request 1 free beer if they stop by Brussels. ;)

Open Source Contributors

If you want to expand the lyrics catalog, check out the wiki.

Don't be afraid to contribute! I welcome all forks & pull requests but please, if you want to fork QL, immediately update com.geecko.quicklyric.Keys with your own keys (Spotify, Genius, ..).

Credits

Credits are listed in the app in the about section

Screenshots

Static Sync Search Saved Settings

quicklyric's People

Contributors

algmyr avatar farmerbb avatar geecko86 avatar geekywoman35 avatar naofum avatar prashantkhurana avatar shaunidiot avatar svenoaks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quicklyric's Issues

Fix sticky notifications

Right now the only way to remove them is to switch to normal notifications and swipe them.

It should go away as soon as the user switches to "disabled" or even before.

dark mode

the app lacks a true dark mode, which (in my opinion) reads better, and saves battery om AMOLED devices.

too sensitive regarding track names

If we play an mp3 file, and it's called "Blah_Blah" or "05. Blah Blah" it won't find it, even though if we manually search for "Blah Blah" it finds it. At minimum QuickLyric should strip leading numbers (typically in filenames when ripping tracks). If possible it should replace numbers/symbols with wildcards so it is not so sensitive regarding track names.

Issues with action bar

When I select text, action bar become white and empty, see screenshot:
Upload images
In Lyrics saved tab, action bar color is weird and seems miss delete button, see screenshot:
Upload images

These issues happen with the dark theme too.
I'm on latest CM11 nightly (Android Kitkat 4.4.4)

typo in german translation

Hi there,

just a small typo report:
in QuickLyric/src/main/res/values-de/strings.xml on line 20 it must be "gespeichert" instead of "gespeichter" and "Songtext" should be written with a capital "S".

It is not really an issue, but i didn't know where else to report.

Greetings ds187 and keep up the good work

Add more instructions

Many users don't understand the following:

  • The music should be tagged properly
  • The search feature is not representative of the whole catalog
  • They should go to the settings and enable additional providers if they need to

Support Android Wear

The idea would be to:

  1. Add a new action to the notification (only for wearables) to download the lyrics
  2. Replace the notification with a new one which contains the lyrics in a "Big View" and that only appears on the wearable.

Handle loss of connection

A minute ago my home router was disconnected from my ISP. My phone was still connected to the wifi and thought it was online but it was not, causing QL to refresh endlessly.

Problem: Being connected to the wi-fi doesn't mean we're connected to the internet

Fix 2 crashes

1

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.geecko.QuickLyric/com.geecko.QuickLyric.MainActivity}: android.view.InflateException: Binary XML file line #19: Error inflating class android.widget.ListView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2372)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access$600(ActivityThread.java:162)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5400)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:837)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class android.widget.ListView
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:807)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:736)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:749)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:830)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:736)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:240)
at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
at com.geecko.QuickLyric.MainActivity.onCreate(MainActivity.java:128)
at android.app.Activity.performCreate(Activity.java:5122)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1084)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2336)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
... 28 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: length=504; index=104202258
at android.content.res.TypedArray.getResourceId(TypedArray.java:581)
at android.widget.ListView.(ListView.java:187)
at android.widget.ListView.(ListView.java:172)
... 31 more

2

java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
at com.geecko.QuickLyric.tasks.PresenceChecker.doInBackground(PresenceChecker.java:34)
at com.geecko.QuickLyric.tasks.PresenceChecker.doInBackground(PresenceChecker.java:27)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more

AZLyrics is broken

No idea why..

I'm getting an EOFException. It works fine when I try with a browser. Need to investigate.

Improve lyrics catalog

Some lyrics can't be found. This thread will list songs that QuickLyric couldn't find.

  • Please double TRIPLE check that you couldn't find a song before reporting such issues with the catalog.
  • Please, don't report that "this Madonna song couldn't be found". Work on the assumption that if the music is mainstream, it's in the catalog and you're probably doing something worng. Again, triple check before you report such an issue.
  1. This issue thread should be used to report certain patterns. For instance, if you've noticed that QuickLyric hasn't been successful in finding lyrics for, say, Metal songs or J-POP or Opera (etc.), you can report that QuickLyric needs to improve support for Metal/J-POP/Opera.
  2. If you did find a pattern, you can report it here. Ideally you would also indicate a good source (typically a website or an app) that is very good with that specific genre. For instance:

"QuickLyric doesn't work very well with Metal Lyrics, I suggest you have a look at metal-archives.com".

Is a perfect insight.

Night mode

Give the option to toggle it manually and the option to have it automatically activate and deactivate at certain times.

Notification Access

Could you implement notification access (or something dimilsr) in KitKat to identify the current song?

Implement batch/automatic downloading

Automatic download:
QuickLyric would automatically save all lyrics it downloads on the device.

Batch download:
QuickLyric would go through all the audio files on the device and try to save lyrics for each song. Possible Google Play Music API integration.

Add Transitions

At this point, Ripples and transitions are only supported on Lollipop.
I suggest waiting to see if that changes. In any case, transitions will need to be implemented at some point.

Examples:

  • A transition between the search button and the search bar
  • The refresh icon could take the whole screen and then go back to being a FAB
  • Clicking a search result, etc.

Revamp DownloadTask

  1. AsyncTask are designed for small operations (a few seconds at most). The download process isn't that.

  2. Not just for LyricsViewFragment. Implement custom callbacks so that we do other stuff with the downloaded lyrics.

  3. Multi-Threading. AFAIK, AsyncTask only has a threadpool of 1 thread

  4. Easily add new providers.

Allow app name to be translated

Please allow app name to be localized as well. app_name string is available for translation, but still, "QuickLyric" string appears uchanged in Android app list.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.