LSLOutput¶
Stream data out via the Lab Streaming Layer.
This node will stream the incoming data out over the LSL network, so that other programs or computers can pick up the data stream. LSL is an easy-to-use way to make time-series data available on the network, and is usable from a wide range of prgramming languages and operating systems. Important: keep in mind that the streams that you are sending to LSL will remain visible until you reset the graph, so when you are using LSL Inlets to acquire data, remember that you may still have streams on the network that are easily confused with real device streams (e.g., when you use broad queries such as type='EEG'). When using this node it is worth noting that, in LSL, all data is a multi-channel time series; if your packets have additional axes, like frequency, feature, and so on, these will be automatically vectorized into a flat list of channels. Also, if you send data with multiple instances into this node, subsequent instances will be concatenated along time, so the data seen by receivers will appear continuous and non-segmented (channels by samples). Check out the below link for more information on LSL. Note that this node outputs a single LSL stream and therefore if the incoming data packet has multiple streams (aka chunks), it will generate an LSL stream for the first stream only. If your data has multiple streams, use ExtractStreams before this node to ensure an LSL stream is created for a specific stream in the data. More Info... Version 1.4.3
Ports/Properties¶
data¶
Data to send.
- verbose name: Data
- default value: None
- port type: DataPort
- value type: Packet (can be None)
- data direction: IN
stream_name¶
Name of output data stream on LSL. Data will be published on LSL under this stream name.
- verbose name: Stream Name
- default value: OutStream
- port type: StringPort
- value type: str (can be None)
source_id¶
Unique data source identifier. If you assign this, then data receivers will be able to auto-recover your stream if you stop and restart your sender pipeline under the same ID. It is highly recommended to set this.
- verbose name: Source Id
- default value:
- port type: StringPort
- value type: str (can be None)
stream_type¶
Type of output data stream. The LSL data stream will have this content-type. For control signals, the content type is usually Control. For raw data, content-types such as EEG, Gaze, Audio, VideoRaw, MoCap, etc. are commonly used. See also LSL documentation on content types for more info.
- verbose name: Stream Type
- default value: Control
- port type: StringPort
- value type: str (can be None)
send_markers¶
Send markers. This will open a second output stream on LSL that transmits marker contents (if a marker chunk is present in your data), with content-type Markers.
- verbose name: Send Markers
- default value: False
- port type: BoolPort
- value type: bool (can be None)
marker_name¶
Name of the marker stream on LSL. Marker data will be published in LSL under this stream name.
- verbose name: Marker Stream Name
- default value: OutStream-markers
- port type: StringPort
- value type: str (can be None)
marker_source_id¶
Unique data source identifier. If you assign this, then data receivers will be able to auto-recover your stream if you stop and restart your sender pipeline under the same ID. It is highly recommended to set this.
- verbose name: Marker Source Id
- default value:
- port type: StringPort
- value type: str (can be None)
marker_field¶
The name of the field in the instance axis of the markers chunk to use to populate the marker data.
- verbose name: Marker Field
- default value: Marker
- port type: StringPort
- value type: str (can be None)
numeric_marker_precision¶
If the marker in marker_field is numeric then its conversion to string will use this many digits after the decimal place. (Tech note: uses numpy.around.)
- verbose name: Numeric Marker Precision
- default value: 3
- port type: IntPort
- value type: int (can be None)
srate¶
Override sampling rate. Allows you to override the nominal sampling rate of your stream. Usually the sampling rate will be correct, but e..g, if you collapse the data down to only one sample per tick (e.g., machine learning predictions), your sampling rate will equal NeuroPype's tick rate (25Hz by default).
- verbose name: Override Sampling Rate
- default value: None
- port type: FloatPort
- value type: float (can be None)
chunk_len¶
Preferred output chunk length. This is the preferred length of chunks sent over the network, in samples. If set to 0, the same chunk length that goes into the node will be used.
- verbose name: Preferred Chunk Length
- default value: 0
- port type: IntPort
- value type: int (can be None)
max_buffered¶
Maximum output buffer length. The maximum amount of data that is buffered for network transmission, in seconds. If your connection is interrupted for longer than this, your receiver will lose some data. However, excessively long buffers provide little value for real-time processing, where it is of no use to receive outdated data (and can hurt if the recipient has to process all these data).
- verbose name: Max Output Buffer
- default value: 60
- port type: IntPort
- value type: int (can be None)
use_numpy_optimization¶
Use Numpy optimization in pylsl. You need a version of pylsl that supports this.
- verbose name: Use Numpy Optimization
- default value: True
- port type: BoolPort
- value type: bool (can be None)
use_data_timestamps¶
Use timestamps in data. This requires that the timestamps originally stem from some LSL clock (e.g., LSLInput node). If False, the data will be timestamped at the time of output.
- verbose name: Use Data Timestamps
- default value: True
- port type: BoolPort
- value type: bool (can be None)
reset_if_labels_changed¶
Reset the outlet if the channel labels changed. If labels change in rapid succession, this can stall downstream inlets until the changes are complete.
- verbose name: Reset If Labels Changed
- default value: False
- port type: BoolPort
- value type: bool (can be None)
ignore_signal_changed¶
Do not reset outlet in case of a signal-changed notification. Since resetting the outlet causes a hitch in downstream processing, this option allows not resetting the outlet when details of the preceding graph are changed. Note that this can cause crashes (e.g., if the channel count changes), but it will work in case of only changes to the signal content.
- verbose name: Ignore Signal Changed
- default value: False
- port type: BoolPort
- value type: bool (can be None)
numeric_label_precision¶
The number of digits after the decimal to preserve when converting numeric axes (e.g . Frequency) to channel labels.
- verbose name: Numeric Label Precision
- default value: 1
- port type: IntPort
- value type: int (can be None)
keep_singleton_axes¶
Keep singleton axes in the block when constructing LSL stream metadata including channel names. This parameter does not apply to TimeAxis and InstanceAxis.
- verbose name: Keep Singleton Axes
- default value: False
- port type: BoolPort
- value type: bool (can be None)
separator¶
Separator character to use when folding together multiple non-time and non-instance axes. For example, setting this to : with 2 space axes will create new channels of the form Fp1:C4, and so on.
- verbose name: Separator
- default value: -
- port type: StringPort
- value type: str (can be None)
set_breakpoint¶
Set a breakpoint on this node. If this is enabled, your debugger (if one is attached) will trigger a breakpoint.
- verbose name: Set Breakpoint (Debug Only)
- default value: False
- port type: BoolPort
- value type: bool (can be None)
metadata¶
User-definable meta-data associated with the node. Usually reserved for technical purposes.
- verbose name: Metadata
- default value: {}
- port type: DictPort
- value type: dict (can be None)