Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

GitHub Actions StatusAzure Build StatusDOI

Lab Streaming Layer library

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. For more information, please read the online documentation

These repository is for the core library: liblsl

Getting and using liblsl

The most up-to-date instructions to use liblsl are in the quick start online documentation.

You might also be interested in apps to connect to recording equipment and the LabRecorder to record streams to disk.

To retrieve the latest liblsl release, you have a few options.

Precompiled packages are uploaded

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.

Building liblsl

To compile the library yourself from source, please follow the online documentation.

For single board computers running linux, you can also try standalone_compilation_linux.sh.

Design goals

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 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 get bindings 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 the lsl.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.

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

Acknowledgements

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.

Citing liblsl

DOI

Information about versioning: https://help.zenodo.org/#versioning

About

C++ lsl library for multi-modal time-synched data transmission over the local network

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages