- 1 Audio issues
- 2 Audio delay
- 3 Settings
- 4 UltraStar pitch
- 5 Other
Karaoke Lyric Editor does not play MP3 files on my Windows machine
This happened a lot in past when Karaoke Lyrics Editor was based on Phonon. Now it uses FFMpeg and SDL to play all media files. Please let me know if you still have this issue.
If there is no sound when you press the Play button on player, but the seek slider is showing progress, you need to make sure all your other audio players are closed (not just stopped).
Invalid seeking/timing on variable MP3 files
This is common issue to most media playing libraries. While all of them support playing variable bitrate (VBR) MP3 files, almost no library seem to support proper playing time reporting. Even the special VBR headers are only used for more or less precise seeking, but not for proper time reporting. This may affect total time reported, and intermediate timings. While this typically does not affect regular music players, which do not rely on precise (up to 1/10 second) timings, this indeed affects Karaoke players.
The “good” thing is that most Karaoke players also have issues with VBR MP3 files, so the right solution would be to recode such files to constant bit rate (CBR) as described here.
Seeking in VBR files is also unrealiable. While special VBR headers in MP3 files help the seeking, it is not very precise. If you ever used a seek slider during generating timings, it may not have proper value, and you would need to start your timing process again.
Solution: use constant bitrate MP3s for karaoke.
Since the music is typically compressed, it takes time to uncompress audio, convert it to the format suitable for sound output, and process it in sound card hardware. Because audio processing chain is different in the Editor and your Karaoke player, it takes different time for the moment the audio is being uncompressed to the moment the audio is heard in
your speakers. This delay is called “Audio delay introduced by Editor” and could be specified in the Advanced tab of Application settings. The value you should put there depends on your hardware and your Karaoke player, and you’ll find it experimentally.
Compensating delay in LRC format
Assuming you made lyrics in LRC format without setting up “Audio delay”, and when you play them on your Karaoke player, the text start 0.5 seconds later than the song. This would mean that your delay is -500ms. To apply this delay to your lyrics, open it in the text editor, and insert the line at the top:
This line would instruct player to change all timing marks by substracting 500ms from hem.
Compensating delay in UltraStar format
Assuming you made lyrics in UltraStar format without setting up “Audio delay”, and when you play them on your Karaoke player, the text start 0.5 seconds later than the song. This would mean that your delay is -500ms. To apply this delay to your lyrics, open it in the text editor, and find the line which starts with #GAP:
This line tells the player (in milliseconds) when the lyrics would start. In the case above the first lyric will show at 32.8 seconds. To make lyrics start earlier, decrease this value. For example, to have lyrics shown 500ms earlier, replace the GAP value above by 32350 (32850 – 500).
The lyrics are typically represented as multiple lines of text. However this is not suitable for Karaoke purposes, because the player screen space is limited, so only some parts of text can be shown. The player typically splits the lyrics text into smaller 4-8 line pieces of text,
called blocks. Then the lyrics are shown on a screen block by block, and the player highlighted the line or characters which are currently being sung.
If the player supports user-defined blocks (which only a few do, notably XBMC), then the lyrics creator can indicate the block boundaries by inserting an empty line on the block boundary. Assuming the block length is in range of allowed by player (typically up to 8
lines), the player would respect the user settings, and will show lyrics using the defined blocks. This would provide better end user experience, showing the lyrics as supposed by creator without splitting lines in important parts.
First, why placeholders are needed. Assume you create a karaoke lyric file for “Hotel California” by Eagles, and have the following line:
[01:10.09]Welcome to the hotel California[01:14.49]
It tells the karaoke program that the line should be shown character by character for 4.40 seconds, assuming the same time per character. However if you play it, you’ll see that the player starts highlighting “to the hotel” even when “welcome” hasn’t finished yet. This is because the player does not know how long individual word should be played, and if there are no internal timing marks present, it assumes each character should take the same time.
To fix this situation, a placeholder is put in such places. A placeholder is a timing mark which looks like [<->], and which will be replaced by real timing mark when you press the “Insert mark” button. So you should put the cursor after “welcome” and press the “Insert mark” button. Do the same for “hotel”. Your line will look like:
Welcome[<->] to the hotel[<->] California
Now when you’re playing the song and pressing F5 to insert timing marks, you will press F5 as soon as “welcome” is played. Instead of moving to the end of line or beginning of the next line, the cursor will move to the placeholder, and you will press F5 again once “welcome” ends. The cursor will move to the end of “hotel”. Press F5 again when “hotel” is ended playing, and the cursor will move to the end of line. Press F5 when “California” ended. Now the line looks like that:
[01:10.09]Welcome[01:11.19] to the hotel[01:13.26] California[01:14.49]
which allows the karaoke player to highlight the characters much better.
But what if in the example above between “welcome” and “to the hotel” was a four second silence? Putting a single timing mark as above will not work:
[01:10.09]Welcome[01:11.19] to the hotel[01:20.19]
In this example “welcome” will highlight properly, but highlighing of “to the hotel” will begin immediately, without any pause. To prevent this situation, two timing marks need to be added:
[01:10.09]Welcome[01:11.19][01:15.19] to the hotel[01:20.19]
Now the player knows that “welcome” is played for 1.10 seconds, then an empty space (silence) is played for 4 seconds, and then “to the hotel” is played for 5 seconds.
There are two ways to achieve this. First, two placeholders could be placed in the lyrics:
Welcome[<->][<->] to the hotel
in which case the cursor will move to the next placeholder, and will work as above. Second way is to enable “Replace time placeholder by two timing marks instead of one” in the application settings, and for each placeholder the cursor will move behind a timing mark after inserting one, allowing therefore to insert two marks in place of one placeholder.
At this moment there is no a separate pitch editor for UltraStar format.
Using MP3packer tool
MP3Packer tool is extremely useful when processing MP3 files for karaoke players. It can validate the MP3 file, and convert variable bitrate files to constant bitrate files, which are much better supported by the most Karaoke players. This tool is free software created by Reed Wilson, and is distributed under General Public License version 2 or higher. It supports Windows, Linux and other platforms
The main discussion about the MP3packer utility is handled in Hydrogen Audio forum topic, which also contains the link to the latest version precompiled as Windows binary, and the source code.
To validate the MP3 file, run the mp3packer command line utility with -i argument:
mp3packer -i <mp3 file>
It will print some information, the most important is “Bitrate distribution”, and the number of sync errors, if any. If the bitrate distribution shows a list of bitrates, this means the MP3 file has variable bit rate, and need to be recoded as described below. A file with sync errors should also be repacked as seeking in such files would be unreliable.
To recode the variable bitrate MP3 file into constant bitrate file using the smallest possible bitrate, use the following command-line:
mp3packer -u -b <bitrate> <mp3 file>
A minimal bitrate to which repacking is possible without losing quality can be obtained by executing mp3packer –ib <mp3 file>