I have looked to the code, to answer a bit better your question. 

The class where everything belongs is Rosegarden::Composition, which resides 
in the files: base/Composition.{C,h} It represents a whole song, with its 
tracks, segments, events...

This class has several container members. There is a "trackcontainer" member 
named m_tracks, and a "segmentcontainer" member named m_segments. These are 
the places where notes and other MIDI events usually live. But there are some 
other interesting members:
* m_timeSigSegment: Contains time signature events.
* m_tempoSegment: Contains tempo events.
Both members are of type ReferenceSegment, which is a special kind of segment, 
but can only contain one sort of event, and can only have one event at each  
absolute time. These segments can't be viewed, except if you use the Time 
Signature and Tempo editor. There is another simple member: m_markers, of 
type markerscontainer, which contains text marker events. 

And where are the bars? The bars aren't a thing, but a measurement,  or a 
distance from the beginning. The bar positions are calculated when needed, 
using the method calculateBarPositions(), which uses the Time Signature 
segment iterating for each time signature change, calculating the bar number, 
and placing the result in a property named BarNumberProperty, of the Time 
Signature events. There are several methods related to Bar numbers. Some of 
them are:
* getNbBars() returns the length of the composition, in bars.
* getBarNumber(timeT t) return the bar number for any given time argument
* getBarRange(int n) returns the starting and ending times of the given bar

Regards,
Pedro


_______________________________________________
Rosegarden-devel mailing list
Rosegarden-devel@lists.sourceforge.net - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel

Reply via email to