Friday, January 24, 2014

MP3 Player with Lyrics

Note: feel free to skip my ramblings and go directly to download page.

Background

Due to my recent interest to hear Japanese songs - particularly those associated with certain anime - I've been wanting to have an application with features:
  • Play mp3 (obviously)
  • Show lyrics
  • It should be modal (always on top even when out of focus)
  • It should be semi transparent, enabling me to do other activities
  • (optional) It can be used to create lyrics.
Finally I've decided to make one myself.
There is a chance that I've just re-invented the wheel - for I'm sure what I want is not something unique - but I don't want the trouble &/ risk of trying out free/share-wares that may suit my wants.

Development History

I used Windows SDK 7.1 for my first try, but after some times decided to switch to Qt 4.8 instead.
Presently (as music player) the SDK version is better than the Qt version but I won't be sharing it.
Reason: It requires .Net Framework 4.0 to run. Framework installation causes BSOD for my best Windows 7.0 laptop and some searches reveal this symptom is quite common.

Creating Lyrics

Lyrics creation is only possible when there is only one item in the track list and there is currently no lyrics available for it.

The steps to create a lyrics

  1. Open a song.
  2. Show Subtitle Creation section.
  3. Fill in the text box(es) with lyrics. Tick on the checkbox and fill in the text box below it if secondary / tertiary lyrics is/are available.
  4. Play the song.
  5. Hit [Start] to grab a line into the lyrics box - don't worry too much if you're always clicking it a bit late.
  6. Hit [Stop] to indicate that line has been uttered completely.
  7. Repeat step 5 & 6 until the end. You might want to pause somewhere in the middle to take a breather.
  8. Hit [Save Lyrics] to save your lyrics.
For your 1st lyrics, it's recommended to:
  1. Save after only 2-3 lines.
  2. Close and re-load the song (apologize for the inconvenience).
  3. Play it and observe whether the lyrics appear too late.
  4. If so, consider adjusting the setting before starting another lyrics creation.

Before we begin lyrics creation, there are some things to note

  1. It's recommended to adjust app's width to max by dragging on app's corner.
    The application picks the lyrics line by line, as shown in the text boxes. This means that word-wrap may break a line, causing Japan-Romaji-Translation lyrics to be out of synch.
  2. If a line is still wrapped despite above, consider editing it. Revising a line later is easier than out-of-synch lyrics.
  3. Remove empty lines between verses.

Technical consideration for above

Qt practitioners recommend block over line capturing. When I copy-pasted UNICODE text (one with Japanese / other characters) a block would be a line, disregarding word-wraps. However, if I copy-pasted ASCII text (translated lyrics) a block is the entire lyrics. An easy work-around is to inject a UNICODE character somewhere beforehand; yet I can't expect all users to follow this step.
Application won't automatically remove empty lines. Some empty lines maybe necessary if some parts (in the middle) don't have proper translation.

Application Settings



Currently there are only 2 settings available.
The first is to set opacity level with value ranging between 50 and 100. Value of 50 means 50% transparency while 100 means no transparancy at all. I personally feel 70 is the best, but because I don't want to force my own flavor, I initialize the value at 100 (solid view).
The second is to set time adjustment for lyrics creation with current value ranging between -600ms and 0ms. The minimum value is for people with slow reflect while the maximum is for one with precognition / has the entire song already imprinted in one's brain.

Current Limitations, Known Bugs and Other Shortcomings

Phonon (Qt's default wrapper for media playback)

  • Can't play some MP3. The SDK version can play those songs after manually applying a certain filter.
  • Dragging the progress slider forward/backward would mess-up the timing. The SDK version doesn't have this problem.
  • Timing for certain MP3 is off - up to 3x of actual timing. I didn't bother to show timing for the SDK version, so no comparison on this one.

Usability

  • No feature to delete a song from track list.
  • No feature to re-order the track list.
  • No feature to drag-n-drop into the track list.
  • Open dialog always start from the top (rather than the last opened folder).
  • Objects (table, text box, etc) dimension can't be adjusted individually.

Annoyance

  • Unconditionally creates LogFile.log that may grow quite big.

Future Enhancements (in no particular order)

Settings

  • Save settings into a config file.
  • Font for lyrics box should be configurable.
  • Debug level should be configurable.

Player Codec

  • May drop Phonon for direct access to Windows' driver or switch to FFMPeg.

Usability

1 comment:

  1. PATCH TIPS - TiNITIAN STRIKE PICKS AT POTTO MARTINÁ
    A tip on a small one that could help you determine if titanium watch the titanium mountain bikes TIP TIP titanium color TIP TIPS for you titanium coating are worth titanium curling iron it. POKER TIPS - TiNITIAN STRIKE PICKS AT POTTO MARTINÁ.

    ReplyDelete