About:
------

  LineSpec comes with 3 versions:

  1) Normal library updates the spectrum data when getspectrum is used (even if
  you use the 'GetOldSpectrum' flag (1)).

  2) Threaded version uses a seperate thread which keeps spectrum data up to
  date. Use this if you don't call getspectrum within short time intervals but
  still need an up-to-date spectrum.

  3) Virtual version simply generates random values. This may come handy for
  development (e.g. with Visual Basic / Windows 9x the system). You should not
  use this version to tweak spectrum values!

  LineSpec is based on non-public QuickPlayer versions rendering a simple
  spectrum on about 1/5 screen height; This was ocassionally shown with a beamer
  during the "Summernight Party" 2004 in Exing (Germany) by Partyservice Falk
  (http://www.partyservica-falk.de).

  Some time later I excluded the rendering stuff to a single executable, now
  using fmodex for recording and slightly delayed virtual playback to get the
  spectrum.

  In 2007, I helped including "sound support" for "Lights player", a Jukebox for
  external LED boards (http://www.freewebs.com/artdecojukebox), which resulted
  the LineSpec library (3.x). Due the sync problem (to keep the playback
  slightly behind recording), and invalid spectrum data after some time, I
  continued working on a example using waveIn api to "record" and displayed a
  spectrum.
  So using native waveIn APIs, there was still invalid spectrum data after some
  time; to fix this, recording totally reinitializes after each processed
  spectrum.

  Designed as standalone library, it is officially published in fall 2007, with
  version 3.10.2007.0930

API:
----

  documentation coming soon...

  bool Startup(); // If the function succeeds, the return value is not NULL

  void Shutdown();

  void GetSpectrum(
    UINT ptrFloatArray, // pointer to an array of floats for the spectrum
    UINT ArraySize,     // Number of floats (per channel!)
    UINT Channels,      // Channels to grab: 1=left, 2=right (-> 3=stereo)
    UINT Flags.l,       // 1 = get actual spectrum; 2 = average values
    UINT ptrBoost       // pointer to a float with the boost value (required!)
    );

Demos:
------

  The demos don't need the dll because it's compiled with (included) the binary.

  Try running the demos while latest QuickPlayer (beta 60+) is running, or
  Winamp with gen_GetTitle (or gen_ShowTitle) plugin.

  Demos will automatically use a non-primary monitor, or even the full desktop
  (e.g. the Starcraft Ghost demo will use the full desktop if all monitors are
  100% widescreen aligned, meaning having same top (=0) and height)

  Shortcuts: Ctrl+Shift+Alt+D: toggles visibility (but still fully running!)
             Ctrl+Shift+Alt+F: return to foreground-mode
             Ctrl+Shift+Alt+L: quit
             Ctrl+Shift+Alt+V: open Windows volume controls
                  Windows + M: Minimize (most) Windows (Windows shortcut)
                  Windows + D: Minimize (even more?) Windows (Windows shortcut)
                                (Windows 98+, NT?/2000?/XP+)

  TrayIcon behavior: Left click          toggles visibility (but still fully
                                         running!)
                     Left doubleclick    quit
                     Right doubleclick   opem Windows volume controls (record
                                         mode)

Tools:
------

  gen_GetTitle:  Winamp general purpose plugin that helps other applications
                 determinate current playing song
  gen_ShowTitle: Shows the title of each playing song on the screen while Winamp
                 is minimized. Also supports same functionality as gen_GetTitle.
