Only lyrics defined by the Meta Lyric event
will be supported in future versions of the software (i.e. a standard set in the past by Tune 1000).
Wish list: real polyphony. And a midi karaoke player that displays e.g. SATB texts properly.
Perhaps the most well-known truly polyphonic song here in the Netherlands is Vader Jacob. It's not only PolyPhonic - melodies mixed - but it's also PolyTextual - texts mixed - as exemplified in:
Va- der Ja- cob, | va- der Ja- cob, slaapt gij nog, | slaapt gij nog? Alle klokken lui-den, | alle klokken lui-den: bim, bam, bom, | bim, bam, bom.
478 : : : : : 9: :4 :2: : : : : : : | 8=Va 4=Slaapt_ 2=Al 1=Bim_ 2 : : : : : 9: :4 : : : : : : : : | 478 : : : : : 9: :4 : :2: : : : : : | 2=le_ 2 : : : : : : : : : : : : : : : | 478 : : :1: : :8: 4:2: : : : : : : | 8=der_ 4=gij_ 2=klok 1=bam_ 2 : : :1: : :8: 4: : : : : : : : | 478 : : :1: : :8: 6: : : : : : : : | 2=ken_ 2 : : : : : : : : : : : : : : : | 958 : : : : : 1: :A :4: : : : : : : | 8=Ja 4=nog_ 2=lui 1=bom_ 2 : : : : : 1: : :4: : : : : : : | 958 : : : : : B: : :4: : : : : : : | 8=cob_ 2=den_ 2 : : : : : : : : : : : : : : : |This needs some explanation, right? The clue is that text shall be encoded in exactly the same way as it is done with the notes. Essentially as it has been accomplished for years with KlavarScribo, hence the name Klavar Ascii Notation (KAN). In our case, we have 4 voices and 4 texts. These might be labeled as 0,1,2,3. But two voices can be unisono (same note) and two texts can be the same as well. In order to prevent confusion with notes and to save effort with texts, instead of the 0,1,2,3 labeling, we do the following:
0 => 1 (= 20) 1 => 2 (= 21) 2 => 4 (= 22) 3 => 8 (= 23)Because then all possible combinations of the note parts can be created, and they are unique:
0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 4 3 8 8 8 8 8 8 8 8 ----------------------------------------------- 0 1 2 3 4 5 6 7 8 9 A B C D E FNow take a look again at the above KAN fragment and mind the notation '9' where '8' and '1' are unisono, '6' where '4' and '2' are unisono, 'A' where '8' and '2' are unisono, 'B' where '8' and '2' and '1' are unisono.
958 : : : : : F: : : : : : : : : : | F=Bim_ 2 : : : : : : : : : : : : : : : | 958 : : :F: : : : : : : : : : : : | F=bam_ 2 : : : : : : : : : : : : : : : | 1918 : : : : : F: : : : : : : : : : | F=bom_ 2 : : : : : : : : : : : : : : : |For the sake of completeness, there is also a track for defining instruments and properties like volume, bending, sustain, etcetera. And it's handsome to create the final midifile by a script instead of typing the same commands by hand every time again.
$FF <type> <length> <text> $FF $05 <length> <text>There has not been defined a Midi Meta Event for PolyText, but upon carefully reading the above specifications it will be seen that the following Meta Events are not yet defined:
<type> = $10 ... $1F $FF $10 , $FF $11 , $FF $12 , $FF $13 , $FF $14 , $FF $15 , $FF $16 , $FF $17 $FF $18 , $FF $19 , $FF $1A , $FF $1B , $FF $1C , $FF $1D , $FF $1E , $FF $1FIn order to preserve the idea that a note can be in 16 channels, we have opted for giving a similar meaning to these hitherto unemployed Meta Events:
$FF <type> <length> <text> $FF $1<channel>(PolyText) <length> <text>Then the translation of the above Vader Jacob fragment into a textual equivalent of the midifile's content is rather straightforward. It is noticed that the channels of the PolyText events are an exact match with the channels of the corresponding notes, as intended by our design. (And in case somebody cares, here is the real hex-dump of this part of the midifile too):
Meta $13(PolyText) Va Meta $12(PolyText) Slaapt_ Meta $11(PolyText) Al Meta $10(PolyText) Bim_ Note ch$0 60(C5) 120 Note ch$1 67(G5) 120 Note ch$2 64(E5) 120 Note ch$3 60(C5) 120 478 Note ch$1 67(G5) 0 2 Meta $11(PolyText) le_ Note ch$1 69(A5) 120 478 Note ch$3 60(C5) 0 Note ch$2 64(E5) 0 Note ch$1 69(A5) 0 Note ch$0 60(C5) 0 2 Meta $13(PolyText) der_ Meta $12(PolyText) gij_ Meta $11(PolyText) klok Meta $10(PolyText) bam_ Note ch$0 55(G4) 120 Note ch$1 67(G5) 120 Note ch$2 65(F5) 120 Note ch$3 62(D5) 120 478 Note ch$1 67(G5) 0 2 Meta $11(PolyText) ken_ Note ch$1 65(F5) 120 478 Note ch$3 62(D5) 0 Note ch$2 65(F5) 0 Note ch$1 65(F5) 0 Note ch$0 55(G4) 0 2 Meta $13(PolyText) Ja Meta $12(PolyText) nog_ Meta $11(PolyText) lui Meta $10(PolyText) bom_ Note ch$0 60(C5) 120 Note ch$1 64(E5) 120 Note ch$2 67(G5) 120 Note ch$3 64(E5) 120 958 Note ch$3 64(E5) 0 Note ch$1 64(E5) 0 2 Meta $13(PolyText) cob_ Meta $11(PolyText) den_ Note ch$1 60(C5) 120 Note ch$3 60(C5) 120 958 Note ch$3 60(C5) 0 Note ch$2 67(G5) 0 Note ch$1 60(C5) 0 Note ch$0 60(C5) 0 2With the present approach, as explained above, PolyText is represented by our generalized Lyric event, hence corresponding with at most 16 polyphonic midi channels, exactly as with the voices in music. So a major advantage of the META proposal is that there is a clear one-to-one mapping between text and voice :
MIDI <channel> <==> META <type>This makes it easy, for example, to mute a channel together with its text. However, there is not yet a midi player who can display such PolyText. In order to display songtext with existing midi-karaoke players, a program (app) called POLY2LY has been developed. Just define the part that you want to sing, and the accompanying song text shall be properly displayed by the player. Only one part at a time, though: part 0 (1) , part 1 (2) , part 2 (4) , part 3 (8) . Looks like this (for part 0):
LilyPond solution
But there is another way. In general, there are two sorts of midi music packages:
(1) main purpose is audio: midi music (2) main purpose is visual:
music score. With the latter, the need for PolyText always has been more urgent
than with the former. With music score, PolyText has been present for quite some
time and the problem of its presence has been solved in a different way. Instead
of assigning a different channel to a different text, as has been done with our
META proposal, different tracks are assigned to
PolyText. Though it is a common feature of many music score oriented packages,
we shall call this the
LilyPond solution for future reference.
Having said all this, let's dive into the deep and compose an input file for LilyPond,
thus obtaining free music score for everyone's "Vader Jacob":
And in a midifile as well. The structure of this midifile becomes obvious from its textual (DTN) representation. It is seen that the PolyText lyrics are indeed scattered into different tracks, 2,4,6,8 in our case.
A major drawback of the LilyPond solution is that there is no clear one-to-one mapping between text and voice (such as is provided with the META proposal). Looking like this:
Track 0 Tempo events etc. Track 1 Melody part 1 Track 2 Text part 1 Track 3 Melody part 2 Track 4 Text part 2 Track 5 Instrumental etceteraIt difficult - if not impossible, for example to mute a channel together with its text. There is an easy remedy for this, namely putting lyrics and accompanying melody into the same track:
Track 0 Tempo events e.d. Track 1 Melody part 1 Text part 1 Track 2 Melody part 2 Text part 2 Track 3 Instrumental etceteraThough this is slightly different from the LilyPond solution.
======================================================================== Vader Jacob Vader Jacob Slaapt gij nog Slaapt gij nog Al_____le Va_____der Ja__cob Va_____der Ja__cob Slaapt Va________ ======================================================================== klokken lui_den Al_____le klokken lui_den Bim bam bom Bim gij nog Slaapt gij nog Al_____le klokken lui_den Al__ der Ja__cob Va________der Ja__cob Slaapt gij nog Slaa Va________der Ja__cob Va__ ======================================================================== bam bom Va________der Ja__cob Va________der Ja__co ___le klokken lui_den Bim bam bom Bim bam bom pt gij nog Al_____le klokken lui_den Al_____le klokken lui_de ______der Ja__cob Slaapt gij nog Slaapt gij nog ======================================================================== b Slaapt gij nog Slaapt gij nog Al_____le klokken Va________der Ja__cob Va________der Ja__cob Slaapt gij n Bim bam bom Bim bam bom Va________der Al_____le klokken lui_den Al_____le klokken lui_den Bim bam ======================================================================== lui_den Al_____le klokken lui_den Bim bam bom Bim ba nog Slaapt gij nog Al_____le klokken lui_den Al_____le kl Ja__cob Va________der Ja__cob Slaapt gij nog Slaapt gi bom Bim bam bom Va________der Ja__cob Va________de ======================================================================== m bom Bim bam bom Bim bam bom Bim okken lui_den Bim bam bom Bim bam bom Bim j nog Al_____le klokken lui_den Al_____le klokken lui_den Bim r Ja__cob Slaapt gij nog Slaapt gij nog Al__le ======================================================================== bam bom Bim bam bom Bim bam bom Bim bam bom bam bom Bim bam bom Bim bam bom Bim bam bom bam bom Bim bam bom Bim bam bom Bim bam bom klokken lui_den Al__le klokken lui_den Bim bam bom Bim bam bom ========================================================================
Back to my HomePage.