bug-lilypond
[Top][All Lists]

## midi2ly struggles with lilypond midi output

 From: Richard Shann Subject: midi2ly struggles with lilypond midi output Date: Fri, 27 Dec 2002 12:33:25 +0000 User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830

I've noticed that if I use lilypond to output midi and then use midi2ly to translate back to lilypond notation a part can go missing. I'm using
```
midi2ly (GNU LilyPond) 1.6.5
GNU LilyPond 1.6.5

on a RedHat 8.0 setup. A simple example is the following snippet:

---------------------------------- file test.ly ------------------>
trackBchannelA = \notes\relative c {
d''16
}
trackB = <
\context Voice = channelA \trackBchannelA
>
trackCchannelB = \notes\relative c {
b'4c4b4c8
}
trackC = <
\context Voice = channelB \trackCchannelB
>
\score {
<
\context Staff=trackB \trackB
\context Staff=trackC \trackC
>
\midi {}
\paper {}
}

---------------------------end of test.ly ------------------->

```
when the output of lilypond -m is given to midi2ly the resultant .ly file (attached) ends with
```\score {
<
\context Staff=trackB \trackB
>

which is missing the second part of the original.
```
Peering at the code in midi2ly I see that if the function track_first_item, which is defined as:
```
def track_first_item (track):

is replaced by the following definition:

def track_first_item (track):
if item != 0:
return item
return item

```
Then the lost part returns (one is reminded of the Lost Chord of Arthur Sullivan...) Now I don't want to pretend that this is a fix - I've not tested it on anything but this example - but the very strangeness of the original definition of this function (with its one-shot for...in loop) is suspicious. I would like to understand this script better - I can see that some of the information from a given channel is being moved to channel 0, but I'm unsure of the general strategy for mapping the midi information onto lily format that has been adopted.
```
```
```% Lily was here -- automatically converted by midi2ly from lygentest.midi

trackAchannelA = \notes {

% [TEXT_EVENT] Creator: GNU LilyPond 1.6.5

% [TEXT_EVENT] Generated automatically by: GNU LilyPond 1.6.5

% [TEXT_EVENT] at Fri Dec 27 12:05:20 2002

% [TEXT_EVENT] from musical definition: test.ly:22:3

% [SEQUENCE_TRACK_NAME] Track 0

}

trackA = <
\context Voice = channelA \trackAchannelA
>

trackBchannelA = \notes\relative c {

% [SEQUENCE_TRACK_NAME] trackB

\tempo 4 = 60

% [INSTRUMENT_NAME] bright acoustic

\time 4/4
d''16
}

trackB = <
\context Voice = channelA \trackBchannelA
>

trackCchannelA = \notes {

% [SEQUENCE_TRACK_NAME] trackC

\tempo 4 = 60

% [INSTRUMENT_NAME] bright acoustic

\time 4/4

}

trackCchannelB = \notes\relative c {
b'4 c b c8
}

trackC = <

\clef bass

\context Voice = channelA \trackCchannelA
\context Voice = channelB \trackCchannelB
>

\score {
<
\context Staff=trackB \trackB
>
}
```