bug-lilypond
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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):
   for thread in track:
       return thread_first_item (thread)

is replaced by the following definition:

def track_first_item (track):
   for thread in track:
       item = thread_first_item (thread)
       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
  >
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]