Version 4, last updated by veraltb at May 15 21:16 2009 UTC

Several changes in the design since the original SDS and Zero-Feature Release:

  • GUI

The GUI now maintains a reference to the instantiated musician objects. This change occurred because previously the GUI instantiated the musicians and would later access them through the CoreController interface. Rather than querying the system for the objects, we decided to let the GUI use existing references.

Most of the GUI's widgets are now defined by types sub-classed from Qt's base widgets.

  • Conductor changes

The musicians are no longer responsible for maintaining their position within the score, but rather have the conductor specify the measure and the window-of-opportunity in which to write. This design choice was two-fold: first, the designers of the musicians are no longer responsible for this bookkeeping; second, the possibility of musicians becoming out of sync each other is removed. Lastly, there is a single point of control for updating measure meta-data before it is received by musicians and initializing newly added musicians to the proper place in the score.

  • Implementation decisions

The current implementation of the metronome and parser operate on the concept of "atomic beats" (see AtomicMetronome.py and AtomicParser.py). This model places some constraints within the system which modules can assume, specifically that the system will update itself in small, fixed intervals. These choices sped up the production of code that met our audio and response requirements at the expense of processing overhead and loss of precise note resolution.

The parser was supplemented with the notion of a Receiver class. This class is responsible for processing the events from the parser, either by generating audio or capturing debugging information (see fsreceiver.py and testatomicparser.py).

  • Internal class additions

A class was added, for the sake of the parser, to obtain note data relative to a marker within the score (see scoremarker.py). It interacts closely with scoreslice.py to retrieve all the measures from a vertical window segment of the score.

The FluidsynthReceiver makes use of a new SoundfontDirectory class that manages mapping instruments to SoundFonts. It is not scheduled for integration until post beta release. (sneak peek at soundfontdirectory.py)

  • Misc.

For ease of musician design, several utilities modules were added. These files assist in obtaining relative tones (tones.py) and constants for note dynamics (see dynamics.py). Furthermore, a new sub-class of Musician was added to provide another view for creating musicians (see musicianstructured.py).