List as of 2006-Apr-22, by Michael Dickens, primary author

* Change buffering to use gr_buffer's and necessary related classes.
  Currently uses a circular_buffer I wrote myself (in
  ./src/circular_buffer.h ), which hides the "circular" part from the
  user but otherwise is very fast as well as thread safe.

* A current limitation of this implementation is that the user cannot
  dynamically switch audio devices (input or output) during playback
  and use the new device without stopping the current executing GR and
  restarting the process.  I would like to figure out how to get a
  CoreAudio "listener" for when the default hardware input / output
  device changes (e.g. when switched by the user in the "Sound" system
  preference pane).  The code in ./src/audio-osx-source.cc creates
  listeners for the AudioUnit being used as well as the Hardware
  device, but these for some reason don't do the trick.  It's possible
  that the Python framework doesn't allow for one to do this.

* In both the source and sink, move the code which defines the "Audio
  Stream Basic Description" (ASBD) to a routine to do this as needed
  as start-up as well as in a callback ("listener") if the default
  device changes.

* Tweak the mutex (d_internal) to only where it is truly needed
  (around class-specific variables used across all threads) in order
  to improve performance.  Currently the mutex is used at the
  start and end of any function requiring access to the class variables.

* Change the instantiation arguments ... once those arguments are
  finalized.  Right now gr.audio.source () takes the sample rate (int
  - should be double), the device name (std::string), a boolean for
  blocking or not, and 2 completely non-standard ones for channel
  configuration and the maximum sample count to buffer.  These are
  reasonable for OSX, but might not be for other OSs.  Nothing to do
  right now but wait and discuss.

* Once the previous issue has been resolved, then the current method
  of determining the number of channels needs to be updated.
  Currently the "device_name" for OSX should contain a numeric string
  for the maximum number of channels to use (e.g. "3" means 3
  channels, generally mapped to 2 channel stereo by OSX).  The
  "device_name" is generally input via "-O" in Python scripts, so "-O
  3" would allow for 3 incoming output channels (or fewer).  In theory
  the "channel_config" argument would make more sense for determining
  channel usage.  Example config strings might be "2.1" for stereo w/
  subwoofer (3 channels), "5.1" or "6.1" for various surround w/
  subwoofer (6 & 7 channels, respectively).  OSX can handle all sorts
  of channel configurations, but the names for these will be different
  than those use for OSS or ALMA or Windows ... thus the need for a
  common naming scheme for all cared-about configurations, possibly
  with options for other OS-specific options.
