MP's Synchronized Lyrics Resource Page
Introduction
Having purchased an iRiver SlimX (iMP-400) mp3/cd player I was surprised to see that it is capable of displaying lyrics while playing mp3s. What was more interesting though was the fact that you hardly could find any information(at least not in english) on this topic on the internet. The next logical step for me was to create a small homepage to publish all the pieces of information I have found so far...
iRiver Caption Editor
This program can be downloaded from the iRiver homepage and can be used for various things:
- Creating of MP3s that contain synchronized lyrics("SyncMP3"),
- Editing and fine-adjusting of the lyrics(which are saved as .SNC) and
- Previewing the modified MP3s
For further information read through the program's help system.
Please note that by now the Caption Editor is the only program capable of handling these specially prepared MP3s. The lyrics data is written into the ID3V2 tag and is read by the SlimX when loading an MP3.
The Caption Editor automatically strips the ID3v1 Tag from the MP3s when saving.
Description of iRiver's SNC format
SNC files are ASCII text files which can be normally edited with Notepad etc. They were obviously developed by iRiver for use with their Caption Editor. What makes them special are the so-called time stamps which look like this: ¢â00002900¢Ð. Time stamps are used for storing the exact time at which the lyrics should be displayed.
The bytes for the opening tag are A2+E2, for the closing its A2+D0, the time is stored as this format: HHMMSShh, with the last "hh" being the sec/100 (not milliseconds, as falsely stated in the Caption Editor help)
Without any space in between, the lyrics are placed immediately after the time stamp. The Caption Editor allows a maximum of 512 bytes for lyrics per time stamp. Nearly all characters in the ASCII range can be used for the lyrics, however since I do not know the exact specs of this format I recommend you to stick to the bytes higher than 0x1F. Characters lower than 32 are usually the "control characters" and I have found that they produce some weird errors when being used on the SlimX.
If some lyrics are not displayed like they should be then you could try to change the language setting on the SlimX, and this is exactly what iRiver means in the advertisements when they say that 37 languages are supported for tracks and ID3 information.
A typical SNC file would look like this:
¢â00000600¢ÐYou and me
¢â00000900¢ÐWe used to be together
¢â00001300¢ÐEvery day together always
¢â00001800¢ÐI really feel
¢â00002200¢ÐI'm losing my best friend
¢â00002500¢ÐI can't believe
¢â00002700¢ÐThis could be the end
|
Please note that this example shows us two things:
- a group of words in the SNC format is usually terminated with a CRLF(this is created by simply pressing [Enter] when editing, its history started with the introduction of DOS). It is not necessary to always put a CRLF after the lyrics - this is just for easier editing. Neither the Caption Editor nor the player itself will produce errors if the CRLFs are missing.
- the SlimX displays 16 characters per line, if they are any longer they are displayed in the next line(no more thant 3 lines). Now the problem is that the player can not recognize whole words and they are cut off after the 16th character of a line and continued in the next line. This forces us to manually adjust the lyrics by filling up the gap with spaces(0x20) if we want them to be shown correctly. Lyric data longer than 48 bytes will be ignored by the player.
Pause Time Tags
I wonder if there is anybody out there who will use this feature. Basically, if a pause time stamp is included in the lyrics data, the iRiver will start highlighting(inversing) the words starting from the left till it reaches the pause tag. Now it waits until the specified moment and repeats the whole thing... In theory this would work like a karaoke program BUT it is really hard to synchronize this manually, moreover it is not possible to use the [Adjust] tool in the Caption Editor with these tags. This issue would be easy to fix but I think it only makes sense when you already have well-timed lyrics from other programs that are converted to the iRiver format. Let's see what future brings us, at least it's good to know that the SlimX is prepared for more extras.
the pause tag example taken from the Caption Editor help:
§00001050» There «001120» was a «001180» farmer had «001250» a dog
and «001720» Bingo «002180» was his «002280» name «002350»-o
|
Note that in a text editor this would look like: ¢Ñ001120¢Ð, first two bytes are A2+D1, last bytes are A2+D0, interestingly the pause time tag allows only 6 digits for storing, whereas the normal time tag has 8 digits(in real life you won't need lyrics for MP3s longer than 59 minutes).
If just one A2+D1 w/out any more digits or ending is put in the lyrics, the player will start in pause tag mode, regardless where the 2 bytes are. Careful: Messing with A2+D1 in the SNC might provoke the Caption Editor to destroy the ID3 tag (resulting in MP3 playing errors).
Description of the LRC format
LRC files are lyric files which are based on tags (aka tagged lyrics). The file format was developed by Mr. Guo Xiangxiang (or Kuo Shiang-shiang) from Taiwan. This description was taken from
CK's [F5 LRC] page:
| Tag |
Format |
Example |
Memo |
| Time |
[??:??] or [??:??.??] |
[00:12], [12:34.56] |
[minute:second[.hsec]] Time stamp(or tag): This one is followed by either the lyrics data(terminated with a CRLF) or by more timestamps which saves space when lyrics are repeated. The highest timestamp usually comes first. |
| Title |
[ti:*] |
[ti:All The Small Things] |
|
| Artist |
[ar:*] |
[ar:Blink 182] |
|
| Album |
[al:*] |
[al:Enema Of The State (1999)] |
|
| Editor |
[by:*] |
[by:Calen Kennedy(F5)] |
One who tags this LRC file |
| Language |
[la:??] |
[la:en] (en=English) |
ISO639 standard |
| Offset |
[offset:*] |
[offset:1000] (Plus one second) |
Affects all time-tags |
Theoretically the tags' order should not matter, however to ensure compatibility it is recommended to put them as: Artist, Title, Album, Language, Editor, Offset, Timetags
The format description does not specify whether negative offset values are allowed though this could be useful for fine-adjusting the songs.
Example: [offset:-50], this would display all the lyrics 50 milliseconds earlier.
All other information in the LRC file w/out a tag and unknown tags should be ignored by programs.
Unofficial Advanced LRC version
I suggest to expand the LRC format specs with a lyrics copyright tag [co:Copyright Holder] and a comment tag which shows the version of the MP3 that was used for tagging [ve:Version Note] including either duration of the song or info like single/album version.
| Tag |
Format |
Example |
Memo |
| Copyright |
[co:*] |
[co:copyright holder] |
Who is the copyright holder of the lyrics? Visit the homepages of ASCAP, BMI,.. |
| Version |
[ve:*] |
[co:single] |
More info on the original MP3 - this makes matching of LRCs and MP3s a lot easier |
How is the lyrics data stored in the MP3? (iRiver SyncMP3s)
All the data is stored in an ID3v2.3.0 tag at the beginning of the MP3, usually placed as the first frame by the Caption Editor. Hopefully the official specs will be soon be released as it would be great if there existed some third-party software for the iRiver. Meanwhile I tried to figure it out by myself: what can be seen in the table below is the result of some time-consuming hex-editing.
|
Values |
Description |
| Frame Header: |
| 4 bytes |
"TXXX" |
Frame ID: "User defined text information frame"
|
| 4 bytes |
$ xx xx xx xx (Big Endian) |
Frame size excluding header
|
| 2 bytes |
$ 20 00 |
Frame flag bytes(first means read only, second means no encryption, compression or group)
|
| Frame Body: |
| 1 byte |
$ 00 |
encoding: ISO-8859-1 (only used for description)
|
| 6 bytes |
$ 53 4F 87 D6 12 00 |
description(must be something Korean) w/ terminating zero
|
| 4 bytes |
$ xx xx xx xx (Little Endian) |
length of whole frame excluding header and first padding including signature
|
| 4 bytes |
$ xx xx xx xx (Little Endian) |
number of timestamps = n
|
| n*4 bytes |
$ xx xx xx xx (Little Endian) |
time in seconds
|
| n*4 bytes |
2 bytes padding ($ 00 00) + $ xx xx (Little Endian) |
length of each data string = len
|
| n*len bytes |
$ xx xx + ($ 02 0D) + (len-2)* $ xx |
Data string with length len: 2 bytes showing hsec offset(ASCII),2 bytes separator(same as SNC time tag opening), lyrics data(pause tags are stored exactly like in the SNC file), usually 2 last bytes of lyrics data are CR+LF when the file was processed with Caption Editor |
All information is based on my own research, it is neither complete nor safe to use.
It seems that currently only lyrics embedded in the ID3v2.3.0 can be read
by the iRiver player(?). A more detailed description of the ID3 tag version
2.3.0 compiled by Martin Nilsson.
Lyrics3 Format
Embedded lyrics format which has features similar to the LRC format (i.e. very simple). The specs are published on the ID3 homepage even though they have their own format.
http://www.id3.org/lyrics3200.html
ID3's Lyrics Specification
For the newest version of the ID3 tag and its implementation of synchronized lyrics go to:
http://www.id3.org. This format is by far the most advanced of all.
iRiver displaying issues and hopefully useful ideas
| A very strange thing occurred when I tried to insert a logo before the lyrics which looked like this: |
¢â00000020¢Ð****************
SNClean v0.1beta
*********MP03*** |
| When i had converted it to an MP3 and played it on the iRiver it was shown as: |
********SNClean
v0.1beta****MP03
*
|
Most probably this is due to the internal displaying procedure which makes use of special characters. When I first designed the logo I used the "*" repeatedly and apparently this is the only character which results in displaying errors when used incorrectly, lucky ol' me...
Basically you may use any character from the ASCII table higher than 0x31 with the exception of 0x2A("*"). In order to check your language settings you can download this SNC file (15 Kb) which fills the screen with one ASCII character per second.
CRLF - new line break can be used for displaying
0C or 09, disable proper reading off lyrics sreads 3 more bytes at the beginning and the end of each frame.
Extended symbols
Asian symbols are stored as two (or more?) bytes with one leading tag byte that tells the player to display special characters. I have not yet explored this, perhaps iRiver will publish more information on their standard which seems to be based on UTF-8(Unicode).
From firmware v1.20 on there are about 150 new symbols included with the Korean language setting. This is the overview that was given on the iRiver homepage:
These characters are saved in the lyrics or the ID3Tag as follows:
| A2 B7 - A2 D1 |
 |
| A5 B0 - A5 B9 |
 |
| A6 A1 - A6 AB |
 |
| A8 CD - A8 E6 |
 |
| A8 E7 - A8 F5 |
 |
SNC examples can be downloaded soon.
Animations, GFX, etc. on your iRiver player
Wouldn't it be cool to have some animation on the SlimX display? In theory it works, but the player updates its lyric display only one time per second and this is too slow for most animations, so sorry guys. There are a few other things though that could be included in a SlimX MP3 for customization purposes:
- ASCII graphics like they are used by software pirates,
- address books can easily be converted to .SNCs, which means there is no excuse for having forgotten to send someone a card while on holiday
How to get synchronized lyrics
Please note that in some countries possession of copyrighted lyrics may be illegal when not owning the original record at the same time.
My opinion on quality
In the meantime I've tried a lot of lyrics and very often I found that they couldn't be instantly matched with my MP3s. This was due to following facts:
- Many editors of synchronized lyrics are simply to stupid to get the timing right which ideally would display the lyrics 0.5-2 seconds before they can be heard.
- Sometimes the version of an MP3 that was used for tagging is different from the MP3 that is combined with the lyrics. Many times a song comes in different flavours like live, single, album, radio versions and remixes.
- MP3s can contain a leading block of silence.
General rules to avoid these problems:
- In the first place only trust synchronized lyrics that you have tagged by yourself.
- When editing lyrics ALWAYS mention the version of the song, either in brackets after the normal filename or use more advanced formats which allow more detailed information on lyrics(See above my LRC v1.1 proposal). Storing the playing length of a song would also be a good idea.
- Strip the leading block of silence in MP3s with special editors or when ripping(Exact Audio Copy).
Other programs that support synchronized lyrics
- Apparently there's a program called MagicCube which handles editing and conversion of LRC/SNC files. It could not yet be downloaded.
- MagicEdit v1.0 Beta 2 for easy LRC editing, probably discontinued, download
from here: magic10b2.zip (250 Kb - removed).
I like this best from all editors.
- Kuo's Lyrics Displayer is a WinAmp 2 plugin: http://members.tripod.com/~shiang/vislyric.html
- Lyrique: This one is an old plugin for Sonique, I do not even know if it is still supported: http://lyrique.kbcware.cjb.net/
- MiniLyrics: a very cool plugin for winamp2/3, but I think the author dropped the support for languages other than Chinese: http://www.minilyrics.com. I used this one to get some SNC files.
- Dioneer: means "digital pioneer", the name is lousy, but they manufacture stuff at least as cool as that from iRiver, their players even support MP3s with embedded iRiver lyrics. This is the lyrics faq in english: http://www.dioneer.com/support/lyrics.asp
- Lyrics Editor v1.22: An old WinAmp 2 plugin, download from here: lyr3edit.zip
(418 Kb - link removed). This app uses another
specification of embedded lyrics by Petr Strnad, which is not compatible with
the iRiver specs.
- Merak Media player: a strange thing with some info on lyrics: http://www.share2.com/merak/faqs.htm
- Lyred Pro: heavily commercial, download from http://www.mp3fe.com/. This is for embedding lyrics and images into MP3s. I haven't yet found out which standard is used(must be Lyrics3).
SNClean v0.1 beta - discontinued
This my own little DOS program for cleaning SNC files. It was written because of a MiniLyrics bug which added a CR to each CRLF while saving as .SNC, producing an error on the SlimX. Other features include filters for adjusting words and lines, eliminating junk and long filenames. The whole thingy is still under development and a Win9x version is planned. Until then this will do.
There you go: SNClean01beta.rar (37 Kb). By the way, this was first compiled on a 486DX2 because that's where I stopped programming some years ago. Now I installed Turbo C++ 3.0 on my Pentium for more convenient editing.
Future plans for this app include conversion from LRC files, aligning enhancements and importing from address books.(See below)
MyLyrics v0.1 beta
A multiformat lyrics converter with a lot of filters, especially suitable for owners of iRiver products. It will soon be published on www.iLyrics.net.
Contact/Feedback
If you have any suggestions how this page can be improved please send an email
to: See main page!
Last update: 24-May-2003
Back to the main page