Releases: mne-tools/mne-lsl
Releases · mne-tools/mne-lsl
1.6.1
- Safer parsing of channel names in the legacy stream viewer, ensuring that incomplete metadata in the
StreamInfo
should be correctly parsed in the correct number of channels.
Full Changelog: 1.6.0...1.6.1
1.6.0
What's Changed
- Improve coverage and improve disconnection of epochs by @mscheltienne in #317
- Fix sample and testing datasets path by @mscheltienne in #319
- Drop isort and pydocstyle in favor of ruff and pin to 0.6.0 and above by @mscheltienne in #321
- Get rid of qt5 entirely in optional requirements by @mscheltienne in #326
- add mailmap and enforce sorting of it by @drammock in #327
- Draft JOSS paper and add PDF generation gh-action by @mscheltienne in #316
- Fix negative start index when looping around dataset by @toni-neurosc in #330
- Add contributing guide by @mscheltienne in #332
New Contributors
- @drammock made their first contribution in #327
- @toni-neurosc made their first contribution in #330
Full Changelog: 1.5.0...1.6.0
1.5.0
What's Changed
- Use property n_new_samples in detector examlpe by @mscheltienne in #288
- Add EpochsStream for epoching real-time stream on-the-fly by @mscheltienne in #258
- Add tutorial about epochs and expose base stream class by @mscheltienne in #302
- CI: Fix retry action by @larsoner in #306
- Make unit tests more robust and add tutorial for Player with annotations by @mscheltienne in #305
- Improve peak detection example using chunk size 1 by @mscheltienne in #308
- Add documentation about processing steps by @mscheltienne in #309
- Add real-time decoding example by @mscheltienne in #312
Full Changelog: 1.4.0...1.5.0
1.4.0
What's Changed
- Improve warning handling by @mscheltienne in #243
- Fix CLI entry-point for Player by @mscheltienne in #246
- Fix push operation with a player having chunk_size set to 1 by @mscheltienne in #257
- Add example for a real-time peak detector applied to cardiac R-peak by @mscheltienne in #256
- Replace single-use thread operation with a ThreadPoolExecutor by @mscheltienne in #264
- Add example of player run in child process by @mscheltienne in #267
- Fix pushing the last chunk of a finite mock stream with chunk size of 1 by @mscheltienne in #268
- Fix flaky test by @mscheltienne in #270
- Improve CIs, example and code coverage by @mscheltienne in #273
- Improve legacy viewer scaling by @mscheltienne in #275
- Add example for bandpower on rolling window by @mscheltienne in #279
- Try to fix segfault in CIs during inlet/outlet deletion/destruction by @mscheltienne in #277
- Add manual acquisition method by @mscheltienne in #282
Full Changelog: 1.3.1...1.4.0
1.3.1
- Improve handling of warnings throughout the codebase to improve the feedback received by @mscheltienne in #243
Full Changelog: 1.3.0...1.3.1
1.3.0
What's Changed
- Add IIR filters to a
Stream
object through the methodsStream.filter
andStream.notch_filter
by @mscheltienne and @larsoner in #218 and #226 - Improve logging and level handling by @mscheltienne in #219
- Add
n_repeat
argument toPlayer
by @mscheltienne in #223 - Improve documentation of performance differences between
pylsl
andmne.lsl
by @mscheltienne in #231
Full Changelog: 1.2.0...1.3.0
1.2.0
- Implement MNE's design philosophy by returning
self
in methods modifying aStreamLSL
-> enables method chainingstream.pick("eeg").set_eeg_reference("average")
- Add argument
annotations
toPlayerLSL
to stream annotations on a separate irregularly sampled stream - Add support for loaded
Raw
objects as input to aPlayerLSL
- Improve deletion or low-level resources
- Improve discovery and download of existing
liblsl
on the system - Fix reading of yRange through settings in legacy
StreamViewer
Full Changelog: 1.1.1...1.2.0
1.1.1
- Fix parsing of incomplete
StreamInfo
into anmne.Info
object by @mscheltienne in #179 - Remove
pytest
related files from the distribution by @mscheltienne in #180
Full Changelog: 1.1.0...1.1.1
1.1.0
What's Changed
- Remove legacy setup.py by @mscheltienne in #167
- Improve documentation workflow by @mscheltienne in #170
- Add support for 'timestamp' array in a push operation by @mscheltienne in #172
- Add local sphinx-remove-toctrees extension by @mscheltienne in #173
- Improve type-hints by @mscheltienne in #175
- MAINT: Make tests less flaky by @larsoner in #168
- Improve test coverage on load-liblsl and on datasets by @mscheltienne in #176
- Improve test coverage, structure and checks for strean connection in properties by @mscheltienne in #177
- Match argument order between BasePlayer and PlayerLSL by @mscheltienne in #178
New Contributors
Full Changelog: 1.0.0...1.1.0
Please report encountered issues on the tracker.
1.0.0
Initial release of mne-lsl
for Python 3.9
to 3.12
. MNE-LSL integrates tightly LSL streams with MNE-Python. It replaces the LSLClient
in mne_realtime
with 2 main objects:
mne_lsl.stream.StreamLSL
: connects to an LSL stream and acts as aRaw
object which underlying data array is a ringbuffer continuously updated.mne_lsl.player.PlayerLSL
: create a fake LSL stream from any MNE-readable file.
player = mne_lsl.player.PlayerLSL(...)
player.start()
stream = mne_lsl.stream.StreamLSL(...)
stream.connect()
stream.pick("eeg")
stream.set_eeg_reference("average")
data, ts = stream.get_data()
stream.disconnect()
player.stop()
Additionally, the low-level mne_lsl.lsl
module re-implements a faster version of pylsl with convenience methods to set and retrieve metadata, for instance from an mne.Info
object.
sinfo = mne_lsl.lsl.StreamInfo(...)
sinfo.set_channel_info(info)
info = sinfo.get_channel_info()
Please report encountered issues on the tracker.