projectM -- Milkdrop-esque visualisation SDK
Copyright (C)2003-2007 projectM Team

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
See 'LICENSE.txt' included within this release

For the purposes of the copyright statement in the preamble of each source
code file comprising projectM, the projectM team are:

Carmelo Piccione
    Parser
    Evaluator
    Pulse Audio support (projectM-pulseaudio)
    Qt GUI (projectM-qt)

Peter Sperl
    Beat Detection
    Rendering
    XMMS Support (projectM-xmms)
    libvisual Support (projectM-libvisual)

Alligator Descartes
    Media Player Support (iTunes, Winamp, Windows Media Player)
    Test application frameworks (projectM-wxvis, projectM-sdlvis)
    DVD application (projectM-movie)
    Win32 screensaver (projectM-screensaver)

Roger Dannenburg
    Advice & Support

Matthias Klumpp
    CMake build system
    Distro integration
    Bug fixes
