示例#1
0
 public void RecordClose()
 {
     Events.Close e = new Events.Close();
     SetDeltaAndAddEvent(e);
 }
示例#2
0
 public void ConductTracks(IList<Track> tracks)
 {
     int ni = m_events.Count;
     int nj = tracks.Count;
     uint globalSample = 0, globalTick = 0;
     double spt = CalculateSPT(DEFAULT_BPM);
     for (int i = 0; i < ni; i++)
     {
         Events.Event e = m_events[i];
         uint delta = (uint)e.Delta;
         globalTick += delta;
         globalSample += (uint)(delta * spt);
         Events.Tempo tempo = e as Events.Tempo;
         if (tempo != null)
         {
             int tempoValue = tempo.Value;
             for (int j = FIRST_TRACK; j < nj; j++)
             {
                 Track track = tracks[j];
                 track.RecordTempo(tempoValue, globalTick);
                 spt = CalculateSPT(tempoValue);
             }
         }
     }
     uint maxGlobalTick = 0;
     for (int j = FIRST_TRACK; j < nj; j++)
     {
         Track track = tracks[j];
         uint trackGlobalTick = track.GlobalTick;
         if (maxGlobalTick < trackGlobalTick)
             maxGlobalTick = trackGlobalTick;
     }
     Events.Close close = new Events.Close();
     RecordGlobalTick(maxGlobalTick, close);
     globalSample += (uint)((maxGlobalTick - globalTick) * spt);
     RecordRest((uint)3000);
     RecordEOT();
     globalSample += (uint)(3 * Sample.RATE);
     #if true
     Duration = TimeSpan.FromMilliseconds(globalSample * (1000.0 / Sample.RATE));
     #else
     Duration = new Duration(TimeSpan.FromMilliseconds(globalSample * (1000.0 / Sample.RATE)));
     #endif
 }