Difference between revisions of "LabStreamingLayer"
Line 22: | Line 22: | ||
In our biofysica repository in Gitlab we have [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/liblsl/liblsl-Matlab?ref_type=heads matlab code] for accessing LSL devices. In the repository there are also examples for how to read the data from these devices. See the [https://gitlab.science.ru.nl/marcw/biofysica/-/blob/master/liblsl/liblsl-Matlab/examples/README.md?ref_type=heads readme.md] file on Gitlab. | In our biofysica repository in Gitlab we have [https://gitlab.science.ru.nl/marcw/biofysica/-/tree/master/liblsl/liblsl-Matlab?ref_type=heads matlab code] for accessing LSL devices. In the repository there are also examples for how to read the data from these devices. See the [https://gitlab.science.ru.nl/marcw/biofysica/-/blob/master/liblsl/liblsl-Matlab/examples/README.md?ref_type=heads readme.md] file on Gitlab. | ||
+ | The following code example checks whether an LSL stream is available for the device '''lslder04''' and the channel '''Digital Events 1''': | ||
+ | <pre> | ||
+ | lslInfo=lsl_resolver('type=''Digital Events @ lslder04'' and name=''Digital Events 1'''); | ||
+ | streamInfoList=lslInfo.list(); | ||
+ | if isempty(streamInfoList) | ||
+ | error('no streams found'); | ||
+ | end | ||
+ | </pre> | ||
Revision as of 11:54, 8 February 2024
Introduction
LabStreamingLayer (LSL) is a framework and protocol designed for the real-time streaming of time-series data. It is primarily used in research and scientific applications, especially in fields such as neuroscience, psychology, and physiology, where the collection and synchronization of data from multiple sources are crucial.
- Real-time Data Streaming: LSL allows the continuous and real-time transmission of data from various sources, such as sensors, recording devices, and software applications. This can include EEG, ECG, eye-tracking data, motion capture, and more.
- Data Synchronization: LSL provides a mechanism for synchronizing data streams from multiple devices or applications. This synchronization is essential for conducting experiments or analyses that require precise temporal alignment across different data sources.
- Cross-Platform Support: LSL is platform-independent and can be used on various operating systems, including Windows, macOS, and Linux. This makes it versatile and suitable for a wide range of research environments.
- Language Support: LSL offers libraries and bindings for several programming languages, including Python, C/C++, Java, MATLAB (which you are familiar with), and others. This allows researchers to integrate LSL into their existing workflows and data processing pipelines.
- Flexible Data Types: It supports various data types, including numeric, string, and marker data, making it adaptable to different types of experiments and data formats.
- Open Source: LabStreamingLayer is an open-source project, which means it is continuously developed and improved by a community of researchers and developers. This openness encourages collaboration and customization.
- Network Capabilities: LSL supports both local data streaming (within a single computer) and network-based streaming, enabling data sharing across different devices and locations.
- Timestamps: LSL provides high-precision timestamps, allowing researchers to accurately timestamp events and data samples.
How to use LSL in Matlab
In our biofysica repository in Gitlab we have matlab code for accessing LSL devices. In the repository there are also examples for how to read the data from these devices. See the readme.md file on Gitlab.
The following code example checks whether an LSL stream is available for the device lslder04 and the channel Digital Events 1:
lslInfo=lsl_resolver('type=''Digital Events @ lslder04'' and name=''Digital Events 1'''); streamInfoList=lslInfo.list(); if isempty(streamInfoList) error('no streams found'); end
In this case the streamInfoList contains only one stream (or none). If you want to find all available streams you can use:
info=lsl_resolver streamInfoList = lslInfo.list();
The following code prints all the types and names of the streams that are found:
for i=1:size(streamInfoList ,1) fprintf('%d: name: ''%s'' type: ''%s''\n',i,streamInfoList{i}.name,streamInfoList{i}.type); end
You can get the n-th stream by using lsl_istream:
eventStream_n=lsl_istream(lslInfo{n}); eventStream_m=lsl_istream(lslInfo{m});
The following code create a lsl_session and add two streams to the session.
ses=lsl_session(); ses.add_stream(eventStream_n); ses.add_stream(eventStream_m);
You can start a session and stop