Any sensible project should start with agreed requirements, which will be classified as
1. Mandatory
2. Desirable
3. Optional.


I suggest that the first stage should be requirement gathering - initially high-level.
Details of code should be left to a later stage.
We should also consider a format Change Request process by which changes can be approved later.
Having these in place will assist in management and control





At 04:30 AM 4/27/04, you wrote:
OK, I usually just shut up and lurk, but (perhaps) I might have a suggestion.

From: Jeff Szuhay <[EMAIL PROTECTED]>

Here is yet another approach... It is an API which has the concept of
"opening" a song, getting 1 or more measures from it, and then "closing"
the song. I think in terms of C and C++ so please forgive the syntactical
stricnine.

ABCSong * pSong;
ABCMeasure * pMeasure;
pSong = new ABCSong( ... ); // allocates ABC song object for header info, voices, et.c


pSong->Open( <file> , <song_title>, ... ); // open file, read song contents and info.
pSong->Verify(); // parse song to see if its valid // song is good, process it...

//Now, perhaps another way (More C++ ish. Sorry)

SongBookStreamReader sbs(filename);
while(sbs) {
 SongBook sb ;
 sbs >> sb ;
 SongStreamReader ssr(sb);
 while(ssr) {
   Song song ;
   ssr >> song;
   Measure measure ;
   MeasureStreamReader msr(song); // can also MeasureStreamReader(sb), &c
   while(msr) {
     msr >> measure;
     NoteStreamReader nsr(measure); // same can also here ...
     while(nsr) {
       Note note ;
       nsr >> note ;
            // OK, do something with the note ...
     }
   }
 }
}

while(  pSong->MoreNotes() )
{
   ...
   ...
   pMeasure = pSong->GetMeasure(...);
   pMeasure.Play();
   pMeasure.Print( <window settings>, ... );
  ,,,
  ,,,
}

pSong->Close();

while(pSong
...

This assumes defined objects ABCSong and ABCMeasure which I've invented surreptitiously.
I'm thinking along these lines because I want an ABC parser that I can process a measure
at a time. So this would be my initial stab at these needs; I don't know if this is ultimately
what I need.


Anyway, this simple model could be used for just playing, just printing/displaying, or both.

However, the idea of the ABCMeasure as an arbitrary aggregation of notes could further be
aggregated into a Line for printing and other notation adjustment.


In this manner, the interface is simple and direct. Versioning info can be embedded in the
objects themselves without the need for that nasty ...Ex() convention. Instead, there may
be some reflective API's like GetVersion() or GetCapability() on the parser/player that
would permit many more variants over a longer lifecycle.



-- The penalty that good men pay for not being interested in politics is to be governed by men worse than themselves. -- Plato, philosopher (427-347 BCE)

To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html

_________________________________________________________________
MSN Toolbar provides one-click access to Hotmail from any Web page ­ FREE download! http://toolbar.msn.com/go/onm00200413ave/direct/01/


To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html

To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html

Reply via email to