Lab streaming layer API.

The lab streaming layer is a simple all-in-one approach to streaming experiment data between applications in a lab, e.g. instrument time series, event markers, audio, and so on.

To compile the library yourself from source please follow the instructions in the file INSTALL.

For the most up-to-date documentation, please have a look at the official site:
http://code.google.com/p/labstreaminglayer

The design goals of the library are:
a) The interface shall be as simple as possible, allowing programs or drivers to send 
   or receive data in just 3-5 lines of code.
b) The library should be available for a variety of languages (currently C, C++, Matlab, Python, Java) 
   and platforms (Windows, Mac OS X, Linux, 32/64 bit) and be fully interoperable between them.
c) Data transmission should work "out of the box", even across networks with no need to configure 
   IP addresses / hostnames and such (thanks to on-the-fly service discovery), also time synchronization 
   and failure recovery should work out of the box.
d) The library should be fully featured. It should cover the relevant streaming data formats incl. 
   multi-channel signals, regular/irregular sampling rate and the major channel data types 
   (int8, int16, int32, float, double, string) in a simple interface. Generic stream meta-data should 
   be supported. Advanced transmission features should be available if desired (but not in the way for 
   simple uses), including custom ways of chunking and buffering the data. It should be possible to 
   configure and tune the behavior of the library (e.g. networking features) via configuration files 
   in a way that is transparent to the applications.
e) Network and processor overhead should be reasonably low to not get in the way.

Package overview:
* The API headers for the supported languages are in the include/ directory.
* The actual library binaries for all platforms are in the bin/ directory.
* Example program source code for all languages are in the examples/ directory.
* Pre-built example program binaries for experimenting are also in the bin/ directory.
* Documentation is in the docs/ directory.
* Project files for the library (Visual Studio, Xcode, Code::Blocks on Linux) and 
  solutions/workspaces for library & sample apps are in the project/ directory.
* The library source code is in the src/ directory.
* External dependencies needed to build the library are in the external/ directory.
* The output/ directory contains intermediate compiler outputs when building the core library.

To connect an application to the lab streaming layer:
* Include the header for your language (lsl_c.h for C, lsl_cpp.h for C++, the directory 
  lsl_matlab for Matlab, or the module lsl_python for Python)
* Make sure that the library file (liblsl.dll / liblsl.so / liblsl.dylib) is found by your application. 
  It should be enough to put it in the same folder as your executable.
  When building a Windows app, also make sure that the liblsl64.lib (or liblsl32.lib) file is visible 
  to your build environment.
* To provide data, create a new streaminfo to describe your stream and create a new outlet with that info. 
  Push samples into the outlet as your app produces them. Destroy the outlet when you're done.
* To receive data, resolve a stream that matches your citeria (e.g. name or type), which gives you a 
  streaminfo and create a new inlet with that streaminfo. Pull samples from the inlet. 
  Destroy the inlet when you're done.
* Have a look at the example sources in the examples/ folder (SendData.cpp, SendDataC.c, SendData.m, 
  ReceiveData.cpp, ReceiveDataC.c, ReceiveData.m).

The library and example applications are licensed under the MIT license. 
The library uses code that is licensed under the Boost software license.
