- Notifications
You must be signed in to change notification settings - Fork76
C++ lsl library for multi-modal time-synched data transmission over the local network
License
sccn/liblsl
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The lab streaming layer is a simple all-in-one approach to streaming experimentdata between applications in a lab, e.g. instrument time series, event markers,audio, and so on. For more information, please read theonline documentation
These repository is for the core library:liblsl
The most up-to-date instructions to use liblsl are in thequick start online documentation.
You might also be interested inapps to connect to recording equipmentand theLabRecorder to record streams to disk.
To retrieve the latest liblsl release, you have a few options.
Precompiled packages are uploaded
- to theRelease page
- theAnaconda cloud, install with
conda install -c conda-forge liblsl
liblsl is also available via the following package managers:
If you cannot find a liblsl for you via any of the above methods, then fear not because for most users it is simple to build.
To compile the library yourself from source,please follow theonline documentation.
For single board computers running linux, you can also trystandalone_compilation_linux.sh
.
The design goals of the library are:a) The interface shall be as simple as possible, allowing programs or drivers to sendor 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 configureIP addresses / hostnames and such (thanks to on-the-fly service discovery), also time synchronizationand 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 shouldbe supported. Advanced transmission features should be available if desired (but not in the way forsimple uses), including custom ways of chunking and buffering the data. It should be possible toconfigure and tune the behavior of the library (e.g. networking features) via configuration filesin 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 are in the
include/
directory. - The library source code is in the
src/
directory. - Unit tests are in the
testing/
directory
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++
)(automatically done when using CMake) or getbindings for your preferred language - Make sure that the library file (
liblsl.so
/liblsl.dylib
/lsl.dll
) is found by your application.On Windows, it should be enough to put it in the same folder as your executable.When building a Windows app, also make sure that thelsl.lib
file is visibleto 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 astreaminfo 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 theexamples/ folder
The library and example applications are licensed under the MIT license.
The library uses code that is licensed under the Boost software license.
The original version of this software was written at the Swartz Center for Computational Neuroscience, UCSD. This work was funded by the Army Research Laboratory under Cooperative Agreement Number W911NF-10-2-0022 as well as through NINDS grant 3R01NS047293-06S1.
Information about versioning:https://help.zenodo.org/#versioning
About
C++ lsl library for multi-modal time-synched data transmission over the local network