
   When a file is asked to be loaded a call is made to ASoundFileManager::openFile
This in turn makes a call to the pure virtual method promptForOpen and the frontend
should have implemented this method to ask the user for a filename to open.

   Next, a CSound object is constructed.  Then ASoundTranslator object is obtained 
which is actually one of the derived objects according to the filename's extension 
or file's signature.  This translator object is then asked to load the file.

   Then a the ASoundPlayer object, given the CSound object, is asked for a 
CSoundPlayerChannel.  This CSoundPlayerObject is used to control when and how the
audio in the CSound object is played.

   Finally, a CLoadedSound object is constructed from the CSound, CSoundPlayerChannel
objects and the filename.  Now, ASoundFileManager asks the frontend (again, via an
overridden method) to construct a sound window; the CLoadedSound object is passed.


   Also, during all this a registry of loaded files is kept so that we'll know which
files were last loaded if the application or system crashes.  Also, it is used to
keep from reopening files more than once and used to know what an available filename
is when showing the new-sound-dialog or record-dialog

--- 

   A new sound or new recording is done in pretty much the same way except the CSound
doesn't get loaded from an ASoundTranslator object

