Fordern Sie Ihr Gedächtnis heraus! Spielen Sie das neue N-Back-Spiel in der Emotiv-App

  • Fordern Sie Ihr Gedächtnis heraus! Spielen Sie das neue N-Back-Spiel in der Emotiv-App

    Fordern Sie Ihr Gedächtnis heraus! Spielen Sie das neue N-Back-Spiel in der Emotiv-App

Lab Streaming Layer (LSL) zur Synchronisierung mehrerer Datenströme

Roshini Randeniya

01.10.2025

Teilen:

von Roshini Randeniya und Lucas Kleine

Operation:
Sobald im Kommandozeilenfenster ausgeführt, startet dieses Skript sofort einen LSL-Stream. Jedes Mal, wenn die 'Enter'-Taste gedrückt wird, sendet es einen Trigger und spielt eine Audiodatei ab.

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet

def wait_for_keypress():
print("Drücken Sie ENTER, um die Audiowiedergabe zu starten und einen LSL-Marker zu senden.")

while True: # This loop waits for a keyboard input
    input_str = input()  # Wait for input from the terminal
    if input_str == "":  # If the enter key is pressed, proceed
        break

def AudioMarker(audio_file, outlet): # Funktion zum Abspielen von Audio und Senden von Markern
data, fs = sf.read(audio_file) # Audiodatei laden

print("Playing audio and sending LSL marker...")
marker_val = [1]
outlet.push_sample(marker_val) # Send marker indicating the start of audio playback
sd.play(data, fs) # play the audio
sd.wait()  # Wait until audio is done playing
print("Audio playback finished.")

wenn name == "main": # HAUPTSCHLEIFE
# LSL-Stream für Marker einrichten
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # Abtastrate auf 0 setzen, da Marker unregelmäßig sind
chan_format = 'int32'
marker_id = 'uniqueMarkerID12345'

info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id)
outlet = StreamOutlet(info) # create LSL outlet

# Keep the script running and wait for ENTER key to play audio and send marker
while True:
    wait_for_keypress()
    audio_filepath = "/path/to/your/audio_file.wav"  # replace with correct path to your audio file
    AudioMarker(audio_filepath, outlet)
    # After playing audio and sending a marker, the script goes back to waiting for the next keypress</code></pre><p><em><strong>**By running this file (even before playing the audio), you've initiated an LSL stream through an outlet</strong></em><strong>. Now we'll view that stream in LabRecorder</strong></p><p><strong>STEP 5 - Use LabRecorder to view and save all LSL streams</strong></p><ol><li data-preset-tag="p"><p>Open LabRecorder</p></li><li data-preset-tag="p"><p>Press <em><strong>Update</strong></em>. The available LSL streams should be visible in the stream list<br> • You should be able to see streams from both EmotivPROs (usually called "EmotivDataStream") and the marker stream (called "AudioMarkers")</p></li><li data-preset-tag="p"><p>Click <em><strong>Browse</strong></em> to select a location to store data (and set other parameters)</p></li><li data-preset-tag="p"><p>Select all streams and press <em><strong>Record</strong></em> to start recording</p></li><li data-preset-tag="p"><p>Click Stop when you want to end the recording</p></li></ol><p><br></p><img alt="" src="https://framerusercontent.com/images/HFGuJF9ErVu2Jxrgtqt11tl0No.jpg"><h2><strong>Working with the data</strong></h2><p><strong>LabRecorder outputs an XDF file (Extensible Data Format) that contains data from all the streams. XDF files are structured into, </strong><em><strong>streams</strong></em><strong>, each with a different </strong><em><strong>header</strong></em><strong> that describes what it contains (device name, data type, sampling rate, channels, and more). You can use the below codeblock to open your XDF file and display some basic information.</strong></p><pre data-language="JSX"><code>

**Mit dem Ausführen dieser Datei (selbst vor dem Abspielen des Audios) haben Sie einen LSL-Stream über einen Ausgang initiiert. Jetzt werden wir diesen Stream in LabRecorder anzeigen

SCHRITT 5 - LabRecorder verwenden, um alle LSL-Ströme anzuzeigen und zu speichern

  1. LabRecorder öffnen

  2. Drücken Sie Aktualisieren. Die verfügbaren LSL-Ströme sollten in der Streamliste sichtbar sein
    • Sie sollten in der Lage sein, Streams von beiden EmotivPROs (normalerweise "EmotivDataStream" genannt) und den Marker-Stream (genannt "AudioMarkers") zu sehen

  3. Klicken Sie auf Durchsuchen, um einen Speicherort für die Daten auszuwählen (und andere Parameter festzulegen)

  4. Wählen Sie alle Streams aus und drücken Sie Aufnehmen, um die Aufnahme zu starten

  5. Klicken Sie auf Stop, wenn Sie die Aufnahme beenden möchten



Mit den Daten arbeiten

LabRecorder gibt eine XDF-Datei (Extensible Data Format) aus, die Daten von allen Streams enthält. XDF-Dateien sind in Streams strukturiert, von denen jeder einen anderen Header enthält, der beschreibt, was er enthält (Gerätename, Datentyp, Abtastrate, Kanäle und mehr). Sie können den untenstehenden Codeblock verwenden, um Ihre XDF-Datei zu öffnen und einige grundlegende Informationen anzuzeigen.

Dieses Beispiels-Skript demonstriert einige grundlegende Funktionen zum Importieren und Annotieren von EEG-Daten, die mit der EmotivPRO-Software gesammelt wurden. Es verwendet MNE, um eine XDF-Datei zu laden, einige grundlegende Metadaten auszudrucken, ein info-Objekt zu erstellen und das Leistungsspektrum zu plotten."""

import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy als np

Pfad zu Ihrer XDF-Datei

data_path = '/path/to/your/xdf_file.xdf'

XDF-Datei laden

streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF-Dateikopf:", fileheader)
print("Anzahl der gefundenen Streams:", len(streams))

für i, stream in enumerate(streams):
print("\nStream", i + 1)
print("Stream Name:", stream['info']['name'][0])
print("Stream-Typ:", stream['info']['type'][0])
print("Anzahl der Kanäle:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Abtastrate:", sfreq)
print("Anzahl der Proben:", len(stream['time_series']))
print("Erste 5 Datenpunkte drucken:", stream['time_series'][:5])

channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]
print("Channel Names:", channel_names)
channel_types = 'eeg'
MNE-Info-Objekt erstellen

info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Daten müssen transponiert werden: Kanäle x Proben
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # Ein einfaches Spektrogramm (Leistungsdichtespektrum) plottenZusätzliche RessourcenLaden Sie dieses Tutorial als Jupyter-Notebook von EMOTIV GitHub herunterÜberprüfen Sie die LSL-Online-Dokumentation, einschließlich der offiziellen README-Datei auf GitHubSie benötigen ein oder mehrere unterstützte Datenerfassungsgeräte, um Daten zu sammelnAlle EMOTIVs Brainware-Geräte verbinden sich mit der EmotivPRO-Software, die integrierte LSL-Funktionen zum Senden und Empfangen von DatenströmenZusätzliche Ressourcen:Code zum Ausführen von LSL mit Emotiv-Geräten, mit BeispielskriptenNützliches LSL-Demo auf YouTubeSCCN LSL GitHub-Repository für alle zugehörigen BibliothekenGitHub-Repository für eine Sammlung von Untermodulen und AppsHyPyP-Analysepipeline für Hyperscanning-Studien

von Roshini Randeniya und Lucas Kleine

Operation:
Sobald im Kommandozeilenfenster ausgeführt, startet dieses Skript sofort einen LSL-Stream. Jedes Mal, wenn die 'Enter'-Taste gedrückt wird, sendet es einen Trigger und spielt eine Audiodatei ab.

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet

def wait_for_keypress():
print("Drücken Sie ENTER, um die Audiowiedergabe zu starten und einen LSL-Marker zu senden.")

while True: # This loop waits for a keyboard input
    input_str = input()  # Wait for input from the terminal
    if input_str == "":  # If the enter key is pressed, proceed
        break

def AudioMarker(audio_file, outlet): # Funktion zum Abspielen von Audio und Senden von Markern
data, fs = sf.read(audio_file) # Audiodatei laden

print("Playing audio and sending LSL marker...")
marker_val = [1]
outlet.push_sample(marker_val) # Send marker indicating the start of audio playback
sd.play(data, fs) # play the audio
sd.wait()  # Wait until audio is done playing
print("Audio playback finished.")

wenn name == "main": # HAUPTSCHLEIFE
# LSL-Stream für Marker einrichten
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # Abtastrate auf 0 setzen, da Marker unregelmäßig sind
chan_format = 'int32'
marker_id = 'uniqueMarkerID12345'

info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id)
outlet = StreamOutlet(info) # create LSL outlet

# Keep the script running and wait for ENTER key to play audio and send marker
while True:
    wait_for_keypress()
    audio_filepath = "/path/to/your/audio_file.wav"  # replace with correct path to your audio file
    AudioMarker(audio_filepath, outlet)
    # After playing audio and sending a marker, the script goes back to waiting for the next keypress</code></pre><p><em><strong>**By running this file (even before playing the audio), you've initiated an LSL stream through an outlet</strong></em><strong>. Now we'll view that stream in LabRecorder</strong></p><p><strong>STEP 5 - Use LabRecorder to view and save all LSL streams</strong></p><ol><li data-preset-tag="p"><p>Open LabRecorder</p></li><li data-preset-tag="p"><p>Press <em><strong>Update</strong></em>. The available LSL streams should be visible in the stream list<br> • You should be able to see streams from both EmotivPROs (usually called "EmotivDataStream") and the marker stream (called "AudioMarkers")</p></li><li data-preset-tag="p"><p>Click <em><strong>Browse</strong></em> to select a location to store data (and set other parameters)</p></li><li data-preset-tag="p"><p>Select all streams and press <em><strong>Record</strong></em> to start recording</p></li><li data-preset-tag="p"><p>Click Stop when you want to end the recording</p></li></ol><p><br></p><img alt="" src="https://framerusercontent.com/images/HFGuJF9ErVu2Jxrgtqt11tl0No.jpg"><h2><strong>Working with the data</strong></h2><p><strong>LabRecorder outputs an XDF file (Extensible Data Format) that contains data from all the streams. XDF files are structured into, </strong><em><strong>streams</strong></em><strong>, each with a different </strong><em><strong>header</strong></em><strong> that describes what it contains (device name, data type, sampling rate, channels, and more). You can use the below codeblock to open your XDF file and display some basic information.</strong></p><pre data-language="JSX"><code>

**Mit dem Ausführen dieser Datei (selbst vor dem Abspielen des Audios) haben Sie einen LSL-Stream über einen Ausgang initiiert. Jetzt werden wir diesen Stream in LabRecorder anzeigen

SCHRITT 5 - LabRecorder verwenden, um alle LSL-Ströme anzuzeigen und zu speichern

  1. LabRecorder öffnen

  2. Drücken Sie Aktualisieren. Die verfügbaren LSL-Ströme sollten in der Streamliste sichtbar sein
    • Sie sollten in der Lage sein, Streams von beiden EmotivPROs (normalerweise "EmotivDataStream" genannt) und den Marker-Stream (genannt "AudioMarkers") zu sehen

  3. Klicken Sie auf Durchsuchen, um einen Speicherort für die Daten auszuwählen (und andere Parameter festzulegen)

  4. Wählen Sie alle Streams aus und drücken Sie Aufnehmen, um die Aufnahme zu starten

  5. Klicken Sie auf Stop, wenn Sie die Aufnahme beenden möchten



Mit den Daten arbeiten

LabRecorder gibt eine XDF-Datei (Extensible Data Format) aus, die Daten von allen Streams enthält. XDF-Dateien sind in Streams strukturiert, von denen jeder einen anderen Header enthält, der beschreibt, was er enthält (Gerätename, Datentyp, Abtastrate, Kanäle und mehr). Sie können den untenstehenden Codeblock verwenden, um Ihre XDF-Datei zu öffnen und einige grundlegende Informationen anzuzeigen.

Dieses Beispiels-Skript demonstriert einige grundlegende Funktionen zum Importieren und Annotieren von EEG-Daten, die mit der EmotivPRO-Software gesammelt wurden. Es verwendet MNE, um eine XDF-Datei zu laden, einige grundlegende Metadaten auszudrucken, ein info-Objekt zu erstellen und das Leistungsspektrum zu plotten."""

import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy als np

Pfad zu Ihrer XDF-Datei

data_path = '/path/to/your/xdf_file.xdf'

XDF-Datei laden

streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF-Dateikopf:", fileheader)
print("Anzahl der gefundenen Streams:", len(streams))

für i, stream in enumerate(streams):
print("\nStream", i + 1)
print("Stream Name:", stream['info']['name'][0])
print("Stream-Typ:", stream['info']['type'][0])
print("Anzahl der Kanäle:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Abtastrate:", sfreq)
print("Anzahl der Proben:", len(stream['time_series']))
print("Erste 5 Datenpunkte drucken:", stream['time_series'][:5])

channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]
print("Channel Names:", channel_names)
channel_types = 'eeg'
MNE-Info-Objekt erstellen

info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Daten müssen transponiert werden: Kanäle x Proben
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # Ein einfaches Spektrogramm (Leistungsdichtespektrum) plottenZusätzliche RessourcenLaden Sie dieses Tutorial als Jupyter-Notebook von EMOTIV GitHub herunterÜberprüfen Sie die LSL-Online-Dokumentation, einschließlich der offiziellen README-Datei auf GitHubSie benötigen ein oder mehrere unterstützte Datenerfassungsgeräte, um Daten zu sammelnAlle EMOTIVs Brainware-Geräte verbinden sich mit der EmotivPRO-Software, die integrierte LSL-Funktionen zum Senden und Empfangen von DatenströmenZusätzliche Ressourcen:Code zum Ausführen von LSL mit Emotiv-Geräten, mit BeispielskriptenNützliches LSL-Demo auf YouTubeSCCN LSL GitHub-Repository für alle zugehörigen BibliothekenGitHub-Repository für eine Sammlung von Untermodulen und AppsHyPyP-Analysepipeline für Hyperscanning-Studien

von Roshini Randeniya und Lucas Kleine

Operation:
Sobald im Kommandozeilenfenster ausgeführt, startet dieses Skript sofort einen LSL-Stream. Jedes Mal, wenn die 'Enter'-Taste gedrückt wird, sendet es einen Trigger und spielt eine Audiodatei ab.

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet

def wait_for_keypress():
print("Drücken Sie ENTER, um die Audiowiedergabe zu starten und einen LSL-Marker zu senden.")

while True: # This loop waits for a keyboard input
    input_str = input()  # Wait for input from the terminal
    if input_str == "":  # If the enter key is pressed, proceed
        break

def AudioMarker(audio_file, outlet): # Funktion zum Abspielen von Audio und Senden von Markern
data, fs = sf.read(audio_file) # Audiodatei laden

print("Playing audio and sending LSL marker...")
marker_val = [1]
outlet.push_sample(marker_val) # Send marker indicating the start of audio playback
sd.play(data, fs) # play the audio
sd.wait()  # Wait until audio is done playing
print("Audio playback finished.")

wenn name == "main": # HAUPTSCHLEIFE
# LSL-Stream für Marker einrichten
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # Abtastrate auf 0 setzen, da Marker unregelmäßig sind
chan_format = 'int32'
marker_id = 'uniqueMarkerID12345'

info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id)
outlet = StreamOutlet(info) # create LSL outlet

# Keep the script running and wait for ENTER key to play audio and send marker
while True:
    wait_for_keypress()
    audio_filepath = "/path/to/your/audio_file.wav"  # replace with correct path to your audio file
    AudioMarker(audio_filepath, outlet)
    # After playing audio and sending a marker, the script goes back to waiting for the next keypress</code></pre><p><em><strong>**By running this file (even before playing the audio), you've initiated an LSL stream through an outlet</strong></em><strong>. Now we'll view that stream in LabRecorder</strong></p><p><strong>STEP 5 - Use LabRecorder to view and save all LSL streams</strong></p><ol><li data-preset-tag="p"><p>Open LabRecorder</p></li><li data-preset-tag="p"><p>Press <em><strong>Update</strong></em>. The available LSL streams should be visible in the stream list<br> • You should be able to see streams from both EmotivPROs (usually called "EmotivDataStream") and the marker stream (called "AudioMarkers")</p></li><li data-preset-tag="p"><p>Click <em><strong>Browse</strong></em> to select a location to store data (and set other parameters)</p></li><li data-preset-tag="p"><p>Select all streams and press <em><strong>Record</strong></em> to start recording</p></li><li data-preset-tag="p"><p>Click Stop when you want to end the recording</p></li></ol><p><br></p><img alt="" src="https://framerusercontent.com/images/HFGuJF9ErVu2Jxrgtqt11tl0No.jpg"><h2><strong>Working with the data</strong></h2><p><strong>LabRecorder outputs an XDF file (Extensible Data Format) that contains data from all the streams. XDF files are structured into, </strong><em><strong>streams</strong></em><strong>, each with a different </strong><em><strong>header</strong></em><strong> that describes what it contains (device name, data type, sampling rate, channels, and more). You can use the below codeblock to open your XDF file and display some basic information.</strong></p><pre data-language="JSX"><code>

**Mit dem Ausführen dieser Datei (selbst vor dem Abspielen des Audios) haben Sie einen LSL-Stream über einen Ausgang initiiert. Jetzt werden wir diesen Stream in LabRecorder anzeigen

SCHRITT 5 - LabRecorder verwenden, um alle LSL-Ströme anzuzeigen und zu speichern

  1. LabRecorder öffnen

  2. Drücken Sie Aktualisieren. Die verfügbaren LSL-Ströme sollten in der Streamliste sichtbar sein
    • Sie sollten in der Lage sein, Streams von beiden EmotivPROs (normalerweise "EmotivDataStream" genannt) und den Marker-Stream (genannt "AudioMarkers") zu sehen

  3. Klicken Sie auf Durchsuchen, um einen Speicherort für die Daten auszuwählen (und andere Parameter festzulegen)

  4. Wählen Sie alle Streams aus und drücken Sie Aufnehmen, um die Aufnahme zu starten

  5. Klicken Sie auf Stop, wenn Sie die Aufnahme beenden möchten



Mit den Daten arbeiten

LabRecorder gibt eine XDF-Datei (Extensible Data Format) aus, die Daten von allen Streams enthält. XDF-Dateien sind in Streams strukturiert, von denen jeder einen anderen Header enthält, der beschreibt, was er enthält (Gerätename, Datentyp, Abtastrate, Kanäle und mehr). Sie können den untenstehenden Codeblock verwenden, um Ihre XDF-Datei zu öffnen und einige grundlegende Informationen anzuzeigen.

Dieses Beispiels-Skript demonstriert einige grundlegende Funktionen zum Importieren und Annotieren von EEG-Daten, die mit der EmotivPRO-Software gesammelt wurden. Es verwendet MNE, um eine XDF-Datei zu laden, einige grundlegende Metadaten auszudrucken, ein info-Objekt zu erstellen und das Leistungsspektrum zu plotten."""

import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy als np

Pfad zu Ihrer XDF-Datei

data_path = '/path/to/your/xdf_file.xdf'

XDF-Datei laden

streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF-Dateikopf:", fileheader)
print("Anzahl der gefundenen Streams:", len(streams))

für i, stream in enumerate(streams):
print("\nStream", i + 1)
print("Stream Name:", stream['info']['name'][0])
print("Stream-Typ:", stream['info']['type'][0])
print("Anzahl der Kanäle:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Abtastrate:", sfreq)
print("Anzahl der Proben:", len(stream['time_series']))
print("Erste 5 Datenpunkte drucken:", stream['time_series'][:5])

channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]
print("Channel Names:", channel_names)
channel_types = 'eeg'
MNE-Info-Objekt erstellen

info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Daten müssen transponiert werden: Kanäle x Proben
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # Ein einfaches Spektrogramm (Leistungsdichtespektrum) plottenZusätzliche RessourcenLaden Sie dieses Tutorial als Jupyter-Notebook von EMOTIV GitHub herunterÜberprüfen Sie die LSL-Online-Dokumentation, einschließlich der offiziellen README-Datei auf GitHubSie benötigen ein oder mehrere unterstützte Datenerfassungsgeräte, um Daten zu sammelnAlle EMOTIVs Brainware-Geräte verbinden sich mit der EmotivPRO-Software, die integrierte LSL-Funktionen zum Senden und Empfangen von DatenströmenZusätzliche Ressourcen:Code zum Ausführen von LSL mit Emotiv-Geräten, mit BeispielskriptenNützliches LSL-Demo auf YouTubeSCCN LSL GitHub-Repository für alle zugehörigen BibliothekenGitHub-Repository für eine Sammlung von Untermodulen und AppsHyPyP-Analysepipeline für Hyperscanning-Studien

Weiterlesen

Grundlagen der neuronalen Oszillationen