Birden fazla veri akışını senkronize etmek için Laboratuvar Akış Katmanı (LSL)
Roshini Randeniya
1 Eki 2025
Paylaş:


Roshini Randeniya ve Lucas Kleine tarafından
Operasyon:
Komut satırında çalıştırıldığında, bu script hemen bir LSL akışı başlatır. 'Enter' tuşuna basıldığında, bir tetikleyici gönderir ve bir ses dosyası çalar."""
import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet
def wait_for_keypress():
print("Ses çalmayı başlatmak ve bir LSL işareti göndermek için ENTER tuşuna basın.")
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): # ses çalma ve işaret gönderme fonksiyonu
data, fs = sf.read(audio_file) # Ses dosyasını yükleyin
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.")
if name == "main": # ANA DÖNGÜ
# İşaretler için LSL akışını ayarlayın
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # İşaretler düzensiz olduğu için örnekleme hızını 0 olarak ayarlayın
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>
**Bu dosyayı çalıştırarak (ses çalmak öncesinde bile), bir çıkış üzerinden bir LSL akışı başlattınız. Şimdi bu akışı LabRecorder'da görüntüleyeceğiz
ADIM 5 - Tüm LSL akışlarını görüntülemek ve kaydetmek için LabRecorder'ı kullanın
LabRecorder'ı açın
Güncelle'ye basın. Kullanılabilir LSL akışları akış listesinde görünmelidir
• EmotivPRO'lar (genellikle "EmotivDataStream" adıyla anılır) ve işaret akışını ("AudioMarkers" olarak adlandırılır) görebilmelisinizGözat'a tıklayarak veri saklamak için bir yer seçin (ve diğer parametreleri ayarlayın)
Tüm akışları seçin ve kayda başlamak için Kaydet'e basın
Kaydı sonlandırmak istediğinizde Durdur'a tıklayın

Veri ile çalışmak
LabRecorder, tüm akışlardan verileri içeren bir XDF dosyası (Genişletilebilir Veri Formatı) çıktısı verir. XDF dosyaları, her biri ne içerdiğini açıklayan farklı bir başlık ile akışlar olarak yapılandırılır (cihaz adı, veri türü, örnekleme oranı, kanallar ve daha fazlası). XDF dosyanızı açmak ve bazı temel bilgileri görüntülemek için aşağıdaki kod bloğunu kullanabilirsiniz.
Bu örnek script, EmotivPRO yazılımından toplanan EEG verilerini içe aktarmak ve açıklamak için birkaç temel işlevi gösterir. MNE'yi bir XDF dosyasını yüklemek, bazı temel meta verileri yazdırmak, bir info nesnesi oluşturmak ve güç spektrumu çizmek için kullanır."""
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np
XDF dosyanızın yolu
data_path = '/path/to/your/xdf_file.xdf'
XDF dosyasını yükle
streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF Dosya Başlığı:", fileheader)
print("Bulunan akış sayısı:", len(streams))
for i, stream in enumerate(streams):
print("\nAkış", i + 1)
print("Akış Adı:", stream['info']['name'][0])
print("Akış Türü:", stream['info']['type'][0])
print("Kanal Sayısı:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Örnekleme Oranı:", sfreq)
print("Örnek Sayısı:", len(stream['time_series']))
print("İlk 5 veri noktasını yazdır:", 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 nesnesi oluştur
info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Veri dönüştürülmelidir: kanallar x örnekler
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # basit bir spektrogram (güç spektral yoğunluğu) çizin
Ek kaynaklar
EMOTIV GitHub'dan bu eğitimi bir Jupyter not defteri olarak indirin
LSL çevrimiçi belgelerine göz atın, GitHub'daki resmi README dosyası dahil
Veri toplama için desteklenen bir veya daha fazla cihaz edinmeniz gerekecek
Tüm EMOTIV beyin cihazları, EmotivPRO yazılımına bağlanır; burada LSL, veri akışlarını göndermek ve almak için yerleşik yetenekler sunar
Ek kaynaklar:
EMOTIV'in cihazlarını kullanarak LSL çalıştırmak için kod, örnek scriptlerle birlikte
YouTube'da faydalı LSL demosu
Tüm bağlı kütüphaneler için SCCN LSL GitHub deposu
Bir alt modül ve uygulama koleksiyonu için GitHub deposu
Hyperscanning çalışmaları için HyPyP analiz boru hattı
Roshini Randeniya ve Lucas Kleine tarafından
Operasyon:
Komut satırında çalıştırıldığında, bu script hemen bir LSL akışı başlatır. 'Enter' tuşuna basıldığında, bir tetikleyici gönderir ve bir ses dosyası çalar."""
import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet
def wait_for_keypress():
print("Ses çalmayı başlatmak ve bir LSL işareti göndermek için ENTER tuşuna basın.")
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): # ses çalma ve işaret gönderme fonksiyonu
data, fs = sf.read(audio_file) # Ses dosyasını yükleyin
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.")
if name == "main": # ANA DÖNGÜ
# İşaretler için LSL akışını ayarlayın
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # İşaretler düzensiz olduğu için örnekleme hızını 0 olarak ayarlayın
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>
**Bu dosyayı çalıştırarak (ses çalmak öncesinde bile), bir çıkış üzerinden bir LSL akışı başlattınız. Şimdi bu akışı LabRecorder'da görüntüleyeceğiz
ADIM 5 - Tüm LSL akışlarını görüntülemek ve kaydetmek için LabRecorder'ı kullanın
LabRecorder'ı açın
Güncelle'ye basın. Kullanılabilir LSL akışları akış listesinde görünmelidir
• EmotivPRO'lar (genellikle "EmotivDataStream" adıyla anılır) ve işaret akışını ("AudioMarkers" olarak adlandırılır) görebilmelisinizGözat'a tıklayarak veri saklamak için bir yer seçin (ve diğer parametreleri ayarlayın)
Tüm akışları seçin ve kayda başlamak için Kaydet'e basın
Kaydı sonlandırmak istediğinizde Durdur'a tıklayın

Veri ile çalışmak
LabRecorder, tüm akışlardan verileri içeren bir XDF dosyası (Genişletilebilir Veri Formatı) çıktısı verir. XDF dosyaları, her biri ne içerdiğini açıklayan farklı bir başlık ile akışlar olarak yapılandırılır (cihaz adı, veri türü, örnekleme oranı, kanallar ve daha fazlası). XDF dosyanızı açmak ve bazı temel bilgileri görüntülemek için aşağıdaki kod bloğunu kullanabilirsiniz.
Bu örnek script, EmotivPRO yazılımından toplanan EEG verilerini içe aktarmak ve açıklamak için birkaç temel işlevi gösterir. MNE'yi bir XDF dosyasını yüklemek, bazı temel meta verileri yazdırmak, bir info nesnesi oluşturmak ve güç spektrumu çizmek için kullanır."""
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np
XDF dosyanızın yolu
data_path = '/path/to/your/xdf_file.xdf'
XDF dosyasını yükle
streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF Dosya Başlığı:", fileheader)
print("Bulunan akış sayısı:", len(streams))
for i, stream in enumerate(streams):
print("\nAkış", i + 1)
print("Akış Adı:", stream['info']['name'][0])
print("Akış Türü:", stream['info']['type'][0])
print("Kanal Sayısı:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Örnekleme Oranı:", sfreq)
print("Örnek Sayısı:", len(stream['time_series']))
print("İlk 5 veri noktasını yazdır:", 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 nesnesi oluştur
info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Veri dönüştürülmelidir: kanallar x örnekler
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # basit bir spektrogram (güç spektral yoğunluğu) çizin
Ek kaynaklar
EMOTIV GitHub'dan bu eğitimi bir Jupyter not defteri olarak indirin
LSL çevrimiçi belgelerine göz atın, GitHub'daki resmi README dosyası dahil
Veri toplama için desteklenen bir veya daha fazla cihaz edinmeniz gerekecek
Tüm EMOTIV beyin cihazları, EmotivPRO yazılımına bağlanır; burada LSL, veri akışlarını göndermek ve almak için yerleşik yetenekler sunar
Ek kaynaklar:
EMOTIV'in cihazlarını kullanarak LSL çalıştırmak için kod, örnek scriptlerle birlikte
YouTube'da faydalı LSL demosu
Tüm bağlı kütüphaneler için SCCN LSL GitHub deposu
Bir alt modül ve uygulama koleksiyonu için GitHub deposu
Hyperscanning çalışmaları için HyPyP analiz boru hattı
Roshini Randeniya ve Lucas Kleine tarafından
Operasyon:
Komut satırında çalıştırıldığında, bu script hemen bir LSL akışı başlatır. 'Enter' tuşuna basıldığında, bir tetikleyici gönderir ve bir ses dosyası çalar."""
import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet
def wait_for_keypress():
print("Ses çalmayı başlatmak ve bir LSL işareti göndermek için ENTER tuşuna basın.")
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): # ses çalma ve işaret gönderme fonksiyonu
data, fs = sf.read(audio_file) # Ses dosyasını yükleyin
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.")
if name == "main": # ANA DÖNGÜ
# İşaretler için LSL akışını ayarlayın
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # İşaretler düzensiz olduğu için örnekleme hızını 0 olarak ayarlayın
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>
**Bu dosyayı çalıştırarak (ses çalmak öncesinde bile), bir çıkış üzerinden bir LSL akışı başlattınız. Şimdi bu akışı LabRecorder'da görüntüleyeceğiz
ADIM 5 - Tüm LSL akışlarını görüntülemek ve kaydetmek için LabRecorder'ı kullanın
LabRecorder'ı açın
Güncelle'ye basın. Kullanılabilir LSL akışları akış listesinde görünmelidir
• EmotivPRO'lar (genellikle "EmotivDataStream" adıyla anılır) ve işaret akışını ("AudioMarkers" olarak adlandırılır) görebilmelisinizGözat'a tıklayarak veri saklamak için bir yer seçin (ve diğer parametreleri ayarlayın)
Tüm akışları seçin ve kayda başlamak için Kaydet'e basın
Kaydı sonlandırmak istediğinizde Durdur'a tıklayın

Veri ile çalışmak
LabRecorder, tüm akışlardan verileri içeren bir XDF dosyası (Genişletilebilir Veri Formatı) çıktısı verir. XDF dosyaları, her biri ne içerdiğini açıklayan farklı bir başlık ile akışlar olarak yapılandırılır (cihaz adı, veri türü, örnekleme oranı, kanallar ve daha fazlası). XDF dosyanızı açmak ve bazı temel bilgileri görüntülemek için aşağıdaki kod bloğunu kullanabilirsiniz.
Bu örnek script, EmotivPRO yazılımından toplanan EEG verilerini içe aktarmak ve açıklamak için birkaç temel işlevi gösterir. MNE'yi bir XDF dosyasını yüklemek, bazı temel meta verileri yazdırmak, bir info nesnesi oluşturmak ve güç spektrumu çizmek için kullanır."""
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np
XDF dosyanızın yolu
data_path = '/path/to/your/xdf_file.xdf'
XDF dosyasını yükle
streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF Dosya Başlığı:", fileheader)
print("Bulunan akış sayısı:", len(streams))
for i, stream in enumerate(streams):
print("\nAkış", i + 1)
print("Akış Adı:", stream['info']['name'][0])
print("Akış Türü:", stream['info']['type'][0])
print("Kanal Sayısı:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Örnekleme Oranı:", sfreq)
print("Örnek Sayısı:", len(stream['time_series']))
print("İlk 5 veri noktasını yazdır:", 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 nesnesi oluştur
info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Veri dönüştürülmelidir: kanallar x örnekler
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # basit bir spektrogram (güç spektral yoğunluğu) çizin
Ek kaynaklar
EMOTIV GitHub'dan bu eğitimi bir Jupyter not defteri olarak indirin
LSL çevrimiçi belgelerine göz atın, GitHub'daki resmi README dosyası dahil
Veri toplama için desteklenen bir veya daha fazla cihaz edinmeniz gerekecek
Tüm EMOTIV beyin cihazları, EmotivPRO yazılımına bağlanır; burada LSL, veri akışlarını göndermek ve almak için yerleşik yetenekler sunar
Ek kaynaklar:
EMOTIV'in cihazlarını kullanarak LSL çalıştırmak için kod, örnek scriptlerle birlikte
YouTube'da faydalı LSL demosu
Tüm bağlı kütüphaneler için SCCN LSL GitHub deposu
Bir alt modül ve uygulama koleksiyonu için GitHub deposu
Hyperscanning çalışmaları için HyPyP analiz boru hattı
Destek
Şirket

© 2026 Emotiv, Tüm hakları saklıdır.

Gizlilik Seçenekleriniz (Çerez Ayarları)
*Açıklama – EMOTIV ürünleri yalnızca araştırma uygulamaları ve kişisel kullanım için tasarlanmıştır. Ürünlerimiz, AB direktifi 93/42/EEC'de tanımlandığı gibi Tıbbi Cihazlar olarak satılmamaktadır. Ürünlerimiz hastalıkların teşhisi veya tedavisi için tasarlanmamış veya niyet edilmemiştir.
Çeviriler Hakkında Not: Bu web sitesinin İngilizce dışındaki sürümleri, sizin kolaylığınız için yapay zeka kullanılarak çevrilmiştir. Doğruluk için çabalasak da, otomatik çeviriler hatalar veya orijinal metinden farklı incelikler içerebilir. En doğru bilgi için lütfen bu sitenin İngilizce versiyonuna başvurun.
Destek
Şirket

© 2026 Emotiv, Tüm hakları saklıdır.

Gizlilik Seçenekleriniz (Çerez Ayarları)
*Açıklama – EMOTIV ürünleri yalnızca araştırma uygulamaları ve kişisel kullanım için tasarlanmıştır. Ürünlerimiz, AB direktifi 93/42/EEC'de tanımlandığı gibi Tıbbi Cihazlar olarak satılmamaktadır. Ürünlerimiz hastalıkların teşhisi veya tedavisi için tasarlanmamış veya niyet edilmemiştir.
Çeviriler Hakkında Not: Bu web sitesinin İngilizce dışındaki sürümleri, sizin kolaylığınız için yapay zeka kullanılarak çevrilmiştir. Doğruluk için çabalasak da, otomatik çeviriler hatalar veya orijinal metinden farklı incelikler içerebilir. En doğru bilgi için lütfen bu sitenin İngilizce versiyonuna başvurun.
Destek
Şirket

© 2026 Emotiv, Tüm hakları saklıdır.

Gizlilik Seçenekleriniz (Çerez Ayarları)
*Açıklama – EMOTIV ürünleri yalnızca araştırma uygulamaları ve kişisel kullanım için tasarlanmıştır. Ürünlerimiz, AB direktifi 93/42/EEC'de tanımlandığı gibi Tıbbi Cihazlar olarak satılmamaktadır. Ürünlerimiz hastalıkların teşhisi veya tedavisi için tasarlanmamış veya niyet edilmemiştir.
Çeviriler Hakkında Not: Bu web sitesinin İngilizce dışındaki sürümleri, sizin kolaylığınız için yapay zeka kullanılarak çevrilmiştir. Doğruluk için çabalasak da, otomatik çeviriler hatalar veya orijinal metinden farklı incelikler içerebilir. En doğru bilgi için lütfen bu sitenin İngilizce versiyonuna başvurun.
