HOW-TO:Create LRC karaoke lyrics files

This guide explains how to create text lyrics in LRC format to use with karaoke files. LRC lyrics format is text-based, and therefore renders with much better quality on high-definition equipment comparing to CD-G, which is restricted to a window 300x216 pixels. Being text-based, it also allows easy modification of content, including text and timings - something nearly impossible with CD-G. Its size is also much smaller, and typically is 3-10Kb comparing to average 1.5Mb CD-G. It is a specially formatted separate file with the same file name as the music file, and .lrc extension.

Unfortunately creating lyrics is a manual process. Once you mastered it the process is easy and fun. But first couple of lyrics might take a while, so be prepared. This is also time-consuming process - a single song needs to be listened to at least twice (usually more than that), and this means that you should plan to spend at least 10 minutes per song even when you're mastered it. For your first songs you might spend 3-4 hours per song, which is normal as you're getting used to the tools.

This guide covers making lyrics under Linux using free software. I have checked several programs available on Windows, which were available at least in shareware form, but so far found nothing really useful. The closest to follow this guide would probably be MiniLyrics, but I found it inconvinient for creating lyrics, and I personally would not pay $19.99 for a program which does not fit my purposes. I also checked VividLyrics (which didn't work at all for me as it did not want load MP3 audio), and MediaCommander. MediaCommander is actually very good software, but it has a single drawback which makes it impossible to make any lyrics with it - there is no keyboard hotkey (at least I didn't find it, nor it is mentioned in the guide) to set the time for current syllable and move to the next one. Instead the author asks you to click the mouse on the appropriate time value, which is VERY hard when you need to set up time twice a second. If this issue is fixed, MediaCommander would definitely be worth looking.

Prerequizites:

 * Installed Linux with X Windows.
 * Installed Python and python-qt4 and python-qt3 packages. The names might differ depending on what distro you're using.
 * Working Amarok 1.4 for KDE3. You do not necessary have to run KDE3 (I personally run KDE4), nor you must install KDE, but you'll have to install all necessary packages for Amarok to work. Those will include kdelibs3. Do not use Amarok 2 from KDE4.
 * Installed lrcShow-II script for Amarok. To do this, open Amarok, go to menu "Tools", enter "Script manager", press "Get more scripts", select "lrcShow-II" from the list, and press "Install".


 * A text editor which could edit UTF8 text files properly. I use the editor embedded into Krusader file manager. Do not use OpenOffice!
 * installed Kid3 for your KDE version to easy tags editing (optional)
 * LAME package in case you need to repack the lyrics (optional)

When you installed lrcShow-II, configure it to use F12 button instead of F5 for setting current time tag, resize its window and increase the font size. It's much easier to handle. To do this, open Amarok, go to menu "Tools" -> "Script manager", select lrcShow-II in the list of installed scripts, and press Run. Then in the lrcShow window resize the window to make it larger. Then press the right mouse click in it, select "set fonts..." and choose font/size which looks good for you. Then in the same menu select "Other functions..." -> "Configure", go to "Shortcuts" tab and change the key from F5 to F12 for the "Insert time tag" action.

Gathering necessary data
To create the karaoke song you need a music file without backing vocal, and a lyrics text file with timing marks.

Music file
There are several options to get karaoke music files. You can:
 * Make it yourself if you have skills - either from scratch, or from available MIDI files;
 * Download it from the Internet. A lot of karaoke music is available on Internet, both legally and illegally. However since karaoke is NOT original music (it just "sounds like"), it's generally easier to find a legit web site selling or giving away for free karaoke music (without back vocals). You can also buy MP3+CDG and throw away .cdg file.
 * You might also rip it from the CD-G disks you own. Since you do not need CD-G tracks, you can use any audio ripper.

Lyrics file
Unlike music, there are not a lot of options to get lyrics in LRC format. Usually it is much easier to find the lyrics to the song than to find the song itself. However it's almost impossible to find lyrics with timing marks set properly unless it is bundled together with the song file. So in most cases you need to get a lyrics text from any lyrics search engine (start with Google), and make the Karaoke lyrics using this guide.

Once you found both music and lyrics, it is time to

Preparing the music file
Please listen to your music file completely before you start doing anything else! You will save yourself a lot of time! Corrupted music files happen, and even if the file itself is ok, you might now like the way the karaoke composer played it. For most songs there is more than one file available, and you can choose the one you line.

Also make sure your song plays fine both in Amarok and XBMC. Currently there is a bug in the XBMC which chops first couple of seconds of some MP3 songs. If you have such song, recompress it using LAME into constant bitrate by using the following commands: lame --decode -o tmp.wav lame --cbr -q 2 -b 192 tmp.wav -o

-b option specifies bitrate. If your song had higher bitrate than 160, use higher bitrate instead. For example, use 224 if your song had 192.

Since this recompression lowers the quality, please save the original song somewhere, and replace the recompressed one when the bug hopefully is fixed :)

Adding/fixing tags in the music file
This is optional, but highly recommended to maintain your music library in order. Run Kid3, open your song file and change/add the tags as necessary. Also if you performed recompression described above, be aware that it strips ALL the tags, so add it again. Please do not use ID3v1 tags; just remove them. Use Id3v2 tags instead.

Proof-reading your lyrics
Please proof-read your lyrics before pasting them for mistakes and misunderstandings. Most lyrics are very good quality, but occasionally you will find lyrics which contain mistypes and mistakes. If there are too many of them, you better get another lyric file somewhere else.

Once everything is checked, it's time to start. I'll use Eagles "Hotel California" as example song, which was generated from MIDI file downloaded from http://diamond-back.com/hotelcal.html - this page also has lyrics.

Pasting lyrics into the editor

 * 1) Make sure lrcShow-II is started. If you cannot see its lyrics window, it is not. To start it, open Amarok, go to menu "Tools" -> "Script manager", select lrcShow-II in the list of installed scripts, and press Run.
 * 2) Open Amarok, clear playlist (menu "Playlist" -> "Clear"), and add your file ("Playlist" -> "Add media"). Press "Play". Now lrcShow-II will search for your lyrics in the Internet. If the lyrics are found, you'll see them in the window. Do not get overexcited - those lyrics only have per-line timings, and most likely it will be different. If the lyrics are not found, the lrcShow screen will change to "No valid tag information" or "No lyrics found" message. It doesn't matter.
 * 3) When the song is playing or paused (but not stopped), right-click on lrcShow-II window and select "LRC editor". You'll get a dialog box saying "No local lrc file was used currently", and empty editor will pop-up. Lyricsguide-lrceditor-empty.png
 * 4) Fill up the basic information: put song name into ti: tag, and artist name into ar: tag. I usually remove al and by tags; you could fill them up if you want. I also suggest adding sr: tag to indicate the source you got the music file from - MIDI conversion, Internet, CD and so on. It will make it easier if in future you want to replace one song by another.
 * 5) Select and copy the previously found lyrics from your web browser, and paste them into LRC-Editor window. If the lyrics you've got already have timing marks, remove them by selecting "Operation" - "Clear all tags" in LRC editor menu. Then select in the editor menu "Save us" and save it in the same directory your music file is in, under the same name but with .lrc extension. Lyricsguide-lyrics-pasted.png
 * 6) Let lrcShow know you'll be using local lyrics - right-click on lrcShow window, select "Set lrc strategy for current track", select "Remember" in the checkbox and select the file you just saved. Press "Stop" and "Play" in Amarok and make sure the lyrics window is now empty as you do not have any timing marks. Press "Stop" again.

Breaking the song apart
Now the most important part. Since LRC-editor cannot put time tags between words, only when the line begins, you need to manually select where the timing marks will be appropriate. Because XBMC karaoke highlights song as it is played word-by-word and not line-by-line, having one timing when the line starts is usually not enough to get good visual results. I usually split the lyrics to have timing tags:


 * in the line everywhere there is a pause between words more than 0.5 secs. Since LRC editor cannot put timing tags in the middle of the line, I break the line in the editor. It will be combined later.


 * on empty line between the lines (by adding an empty line) if there is a hearable pause between previous and next line. This empty line break will indicate where the previous line _ends_ making sure the XBMC player knows how long is the last syllable on the previous line.


 * once in a 1-3 secs range anywhere. It is not necessary, but provides better visual synchronization.

So, for example, for the first chapter:

On a dark desert highway, cool wind in my hair Warm smell of colitas rising up through the air Up ahead in the distance, I saw a shimmering light My head grew heavy and my sight grew dim I had to stop for the night

Try to play it and sing it. You'll see that there is no hearable pause on a line "On a dark desert highway", but there is a pause between it and "cool wind in my hair". This means we need to mark both the end of "On a dark desert highway" and the start of "cool wind in my hair". This could be done by adding an empty line between them (which will contain the time mark where the previous line ends). Also since the music is relatively slow, I put extra breaks in each song line to add more synchronization marks. As a result, the first chapter in my editor looks like:

On a dark desert highway

cool wind in my hair

Warm smell of colitas

rising up through the air

Up ahead in the distance

I saw a shimmering light

My head grew heavy and my sight grew dim

I had to stop for the night

Follow till the end of the song. I repeat, this is the most important part. If during actually setting up timing marks you'll see that you added extra breaks or didn't add necessary breaks, it is usually easier and faster to abort setting marks, stop the song, fix the breaks and start again. Do not be afraid if you need to change timings five or ten times, I spent more than two hours on my first song and still wasn't happy with result. After your third song you'll do much better, and after your tenths you won't need further correction anymore.

Here's now mine formatted song looks like (should be an LRC file here)

Setting up timings
Now you're going to set up timing for each line. It's done in a relatively easy way - you listen to the song, and as soon as the line the cursor is on is started playing, you hit the "Insert time tag" button, which is F12 if you followed my suggestion and switched from default F5. Note that auto-scroll only shows you the last line, so I suggest to get a keyboard with a scroll wheel so you can scroll the text using your other hand at the same time.

This is the part which gets repeated a lot. Even now, after having done more than 100 lyrics, I still have to repeat setting up timing marks more than once. This is because manual correction of timing marks is very difficult comparing to re-setting them again, and I prefer to repeat the process now to fixing the marks later using XBMC.

To start the process, position the cursor at the start of the first lyrics line ("On a dark" in our case), then right-click on lrcShow (not the editor) window, select "Amarok control" and press "Play". Then switch the focus to the editor window, listen to the song, and press F12. Remember that for each line you need to press F12 at the moment the first character is to be sing, and on an empty line you must press F12 when the singer stops singing the previous line, not when the next line starts. If next line starts when the previous line ends, this means the extra empty line is not needed here, and needs to be removed.

If you feel like you need to edit the line breaks again, press "Stop", then select "Operation" - "Clear all tags" in LRC editor menu to remove all time tags, and do it again. For example, after the first try I removed the empty line between "and my sight grew dim" and "I had to stop " as the pause there was not really hearable.

Again, do not hesitate to repeat timing process! It is near impossible to get perfect timing the first time!

Testing your timings in lrcShow
Once you're done, save the lyrics file into the same file you selected earlier, and play the song again using Stop/Play in Amarok. Watch the lyrics. If you remember you screwed up in some specific place, remove the timing tags manually there, and press F12 when this place is played - it's possible. The lyrics should play ok in lrcShow unless you did some major screwup. I usually skip this part, and go to formatting directly.

That's what I get for the same first chapter:

[00:53.60]On a dark [00:54.85]desert highway [00:56.26] [00:57.20]cool wind [00:58.14]in my hair [00:59.08] [01:00.65]Warm smell [01:01.44]of colitas [01:02.69] [01:03.94]rising up [01:04.73]through the air [01:06.14] [01:07.39]Up ahead [01:08.17]in the distance [01:09.59] [01:10.53]I saw [01:11.00]a shimmering light [01:12.41] [01:13.82]My head grew heavy [01:14.91]and my sight grew dim [01:16.95]I had to stop for the night [01:19.15]

Formatting lyrics
Even though XBMC could play lyrics in its current form, you do not want it. As you remember, we split them before, so we now need to restore the formatting. Close Amarok, you won't need it anymore. Open the LRC file in the editor, and format it again using the following guidance:


 * The lyrics are shown in XBMC using blocks (internally called "paragraphs"). Each block can have no more than eight lines, and should terminate by an empty (no time mark) line.


 * A constant block size is not mandatory, and could vary through the song (in fact it does vary through most songs)


 * The best block size is 3 or 4 lines. For example, if you have a 6-line chapter, it's usually better to split it to two 3-line blocks.


 * Blocks should be split as logically reasonable, and separate lines could be combined together.


 * Remember that regular TV screen has much less resolution and width than your display. So please keep in mind regular TV users, and do not make the lines too wide.


 * When you merge lines, add spaces between the time tags if necessary!


 * Remember that only empty lines break the blocks. A line with time tag is not empty! Here's the difference:

This is ONE block piece which will show an empty line between "On a dark desert highway" and "cool wind in my hair" [00:53.60]On a dark [00:54.85]desert highway [00:56.26] [00:57.20]cool wind [00:58.14]in my hair

This is TWO blocks piece will show "On a dark desert highway" and "cool wind in my hair" on two different blocks. [00:53.60]On a dark [00:54.85]desert highway[00:56.26]

[00:57.20]cool wind [00:58.14]in my hair

Here's my reformatted first chapter. [00:53.60]On a dark [00:54.85]desert highway[00:56.26] [00:57.20]cool wind [00:58.14]in my hair[00:59.08] [01:00.65]Warm smell [01:01.44]of colitas [01:02.69] [01:03.94]rising up [01:04.73]through the air[01:06.14]

[01:07.39]Up ahead [01:08.17]in the distance[01:09.59] [01:10.53]I saw [01:11.00]a shimmering light[01:12.41] [01:13.82]My head grew heavy [01:14.91]and my sight grew dim [01:16.95]I had to stop for the night[01:19.15]

Listening in XBMC
Open XBMC, go to "Music" and select your new song. The song should start playing, and the lyrics should pop up. If they do not, make sure the file name is exactly the same, that the lyrics file has proper .lrc extension, and that there is no other file with the same file name in this directory except one music file and one lyrics file.

Time tags represent how the current line will be painted character-by-character. For example: [00:53.60]On a dark [00:54.85]desert highway[00:56.26]

This means the "On the dark" will be painted between 53.6 and 54.85 seconds, and "desert highway" will be painted between 54.85 and 56.26 seconds. Using this knowledge, the time correction is easy:


 * If the song starts before "On the dardk", this means the time value BEFORE "On the dark" is too large and needs to be less. I suggest using 0.20 sec decrements/increments.


 * If the "desert highway" is started fine but painted too slow this means the LENGTH of the line is too long, and therefore the time value AFTER "highway" is too large, and needs to be decreased.

Using this guide you could correct minor hiccups in the lyrics file. Please do not forget that the value on the right side of the decimal point represents tenths of seconds, and therefore could be anything from .00 to .99. However the value on the left side of the decimal point represents minutes and seconds, and therefore must be in range from 00 to 59.

Do not try to make lyrics perfect! Any correction less than .2 seconds is usually not necessary. Because of nature of OS, codecs and software most likely you'll never be able to achieve perfect results anyway.

And the last thing - share your lyrics!