On Tuesday 22 April 2008 16:26:16 Laura nmi Michaels wrote:
> Yair K. wrote:
> >Do you have any example of a kar
> > file with this problem? The few files I checked seem fine.
>
> Since you mentioned other files seemed fine, I went back and tried some of
> my other midi kar files. Some of them work beautifully. I've never seen
> Timidity do such as good job at Karaoke before. Some of them mess up with
> strange results though. One of them has that echoing effect I mentioned
> and several of them show all the lyrics before the song has a chance to
> start playing. I put together a few of the songs that were having problems
> as a test case and uploaded them to
> http://www.distasis.com/recipes/karmusic.zip I'll leave them up for a few
> weeks.
All of these have the same underlying issue. I'm no MIDI or timidity expert
(Hopefully the real MIDI experts on the list will correct me if I say
anything wrong), but I think it goes like this:
A. MIDI files allow meta message, like "Text" and "Lyrics". "Text" should be
output before playing.
B. Quite a few MIDI files use "Text" inappropriately for lyrics. These need
to be output while playing.
C. But some do use it correctly, and expect that behaviour.
So every solution is a bit of an hack.
TiMidity++ has the following test in readmidi.c:
(opt_trace_text_meta_event || karaoke_format == 2 ||
chorus_status_gs.text.status == CHORUS_ST_OK).
opt_trace_text_meta_event can be enabled using "Trace all meta text events" in
XAW's option dialog (or the "-E t" command line option).
karaoke_format is set to 2 basically depending on a "@KMIDI" text.
If the test works, this is treated as a lyric event.
If it fails, it eventually gets to line 3616: "dumpstring...", and dumps the
text to the screen right away.
The three files which show all the lyrics before playing fail the test.
(If opt_trace_text_meta_event is enabled, the files will play mostly fine, but
that's not optimal (no linebreaks, because timidity doesn't really recognize
the type)).
Traditional - The Band Played On.mid has a "@K MIDI" signature instead.
keycant.mid has a "@KMIDI" signature, but on track 0 (one of the checks is
limited to track 1).
Traditional - Blow The Man Down.kar - it seems to be truncuted a bit "@K"
instead of "@K MIDI" (I suspect).
afrika.kar has two tracks: one for lyrics, and another for text. And
timidity's test fingers the text track as a lyric track as well (It's has the
right text at the right place). So both tracks are outputted at the same
time.
What can be done?
A. Check for "@K" instead of "@KMIDI", on all tracks. This patch fixes the
three files which output immidiately:
--- timidity/readmidi.c 2008-04-01 04:15:27.000000000 +0300
+++ timidity/readmidi.c 2008-04-22 23:00:32.565546242 +0300
@@ -468,9 +468,8 @@
si[len]='\0';
if(type == 1 &&
- current_read_track == 1 &&
current_file_info->format == 1 &&
- strncmp(si, "@KMIDI", 6) == 0)
+ strncmp(si, "@K", 2) == 0)
karaoke_format = 1;
code_convert(si, so, s_maxlen, NULL, NULL);
@@ -5337,7 +5336,7 @@
}
if(karaoke_format != -1)
{
- if(trk == 1 && strncmp(si, "@KMIDI", 6) == 0)
+ if(trk == 1 && strncmp(si, "@K", 2) == 0)
karaoke_format = 1;
else if(karaoke_format == 1 && trk == 2)
karaoke_format = 2;
B. Another test, if there are actual lyric events, don't treat text on track 2
as lyrics. I'm not sure this is a good idea - it may break more stuff than it
fixes.
C. Check for the track name "Soft Karakoe" instead/with the "@K" check. Maybe
a good idea.
Please test the above change, and see if it doesn't break anything
Yours,
Yair K.
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Timidity-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/timidity-talk