DataHub: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
mNo edit summary |
||
| (15 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{Infobox software | {{Infobox software | ||
| name = | | name = Lab Streaming Layer | ||
| developer = Christian Kothe; Chadwick Boulay. | | developer = Christian Kothe; Chadwick Boulay. | ||
| status = -in development- | | status = -in development- | ||
| programming language = C, C++, Python, Java, C#, MATLAB | | programming language = C, C++, Python, Java, C#, MATLAB | ||
| operating system = Windows, Linux, MacOS, Android, iOS | | operating system = Windows, Linux, MacOS, Android, iOS | ||
| genre = Data collection | | genre = Data collection | ||
| license = Open source | | license = Open source | ||
| website = [https://labstreaminglayer.readthedocs.io/info/intro.html LSL webpage] | | website = [https://labstreaminglayer.readthedocs.io/info/intro.html LSL webpage] | ||
}} | |||
=== Resources === | |||
{{Infobox tsg | |||
| downloads = {{bulleted list | |||
| {{Surfdrive|https://surfdrive.surf.nl/s/GLSnbBaYsbEWjPX|Viewer & Streamer}} | |||
}} | }} | ||
| manuals = {{bulleted list | |||
| [https://labstreaminglayer.readthedocs.io/ Documentation] | |||
| [https://sccn.ucsd.edu/~mgrivich/LSL_Validation.html LSL Validation] | |||
| [https://labstreaminglayer.readthedocs.io/info/supported_devices.html Supported Devices and Tools] | |||
}} | |||
| templates = {{bulleted list | |||
| {{Surfdrive|https://surfdrive.surf.nl/s/gPenWNAqq8AXa7x|Example Scripts}} | |||
}} | }} | ||
}} | }} | ||
| Line 53: | Line 39: | ||
===Versions=== | ===Versions=== | ||
Pylsl version 1.16.2 is installed on our [[Lab Computer]]s. Open a command and type the following to find the version used: | |||
<code style="background-color:#000; color:#fff; padding:1px 3px;">c:>python</code><br/> | <code style="background-color:#000; color:#fff; padding:1px 3px;">c:>python</code><br/> | ||
| Line 61: | Line 47: | ||
==Usage== | ==Usage== | ||
=== Python === | === Python === | ||
Example demonstrating how to send LSL stream and marker data: | |||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#!/usr/bin/env | #!/usr/bin/env python3.10 | ||
# -*- coding: utf-8 -*- | |||
import | import time | ||
import random | |||
import keyboard | |||
from pylsl import StreamInfo, StreamOutlet | from pylsl import StreamInfo, StreamOutlet | ||
from pylsl import local_clock | |||
# --- Setup Marker Stream --- | |||
name= | print("Setting up marker stream...") | ||
type= | marker_info = StreamInfo( | ||
channel_count= | name="MarkerStream", | ||
nominal_srate = | type="Markers", | ||
source_id= | channel_count=1, | ||
nominal_srate=0, # Irregular sampling | |||
channel_format="string", | |||
source_id="MarkerSource" | |||
) | |||
marker_outlet = StreamOutlet(marker_info, chunk_size=1) | |||
# --- Setup Data Stream --- | |||
print("Setting up data stream...") | |||
data_info = StreamInfo( | |||
name="TestStream", | |||
type="TestData", | |||
channel_count=4, | |||
nominal_srate=100, | |||
channel_format="float32", | |||
source_id="TestStream_Source" | |||
) | |||
A | channels = data_info.desc().append_child("channels") | ||
for name in ["A", "B", "C", "D"]: | |||
chan = channels.append_child("channel") | |||
chan.append_child_value("name", name) | |||
chan.append_child_value("unit", "unitless") | |||
chan.append_child_value("type", "TestData") | |||
data_outlet = StreamOutlet(data_info, chunk_size=1) | |||
# --- Start Streaming --- | |||
print("Start streaming... Press 'q' to stop.") | |||
marker_outlet.push_sample(["Start"]) | |||
while not keyboard.is_pressed('q'): | |||
random_numbers = [random.randint(1, 2) for _ in range(4)] | |||
data_outlet.push_sample(random_numbers) | |||
time.sleep(0.01) | |||
marker_outlet.push_sample(["Stop"]) | |||
print("Streaming stopped.") | |||
</syntaxhighlight> | </syntaxhighlight> | ||