
بروتوكول لير البث المعملي (LSL) لمزامنة تدفقات البيانات المتعددة
روشيني راندينيا ولوكاس كلاينه
تم التحديث في
17/05/2024

بروتوكول لير البث المعملي (LSL) لمزامنة تدفقات البيانات المتعددة
روشيني راندينيا ولوكاس كلاينه
تم التحديث في
17/05/2024

بروتوكول لير البث المعملي (LSL) لمزامنة تدفقات البيانات المتعددة
روشيني راندينيا ولوكاس كلاينه
تم التحديث في
17/05/2024
بواسطة روشيني راندينيا و لوكاس كلاين
التشغيل:
بمجرد تشغيل هذا السكربت في سطر الأوامر، فإنه يبدأ على الفور تدفق LSL. وكلما تم الضغط على مفتاح 'Enter'، يرسل نبضة تشغيل (trigger) ويشغل ملفًا صوتيًا."""
import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet
def wait_for_keypress():
print("اضغط على ENTER لبدء تشغيل الصوت وإرسال علامة LSL.")
while True: # هذه الحلقة تنتظر إدخالًا من لوحة المفاتيح input_str = input() # انتظر الإدخال من الطرفية if input_str == "": # إذا تم الضغط على مفتاح enter، تابع break
while True: # هذه الحلقة تنتظر إدخالًا من لوحة المفاتيح input_str = input() # انتظر الإدخال من الطرفية if input_str == "": # إذا تم الضغط على مفتاح enter، تابع break
while True: # هذه الحلقة تنتظر إدخالًا من لوحة المفاتيح input_str = input() # انتظر الإدخال من الطرفية if input_str == "": # إذا تم الضغط على مفتاح enter، تابع break
def AudioMarker(audio_file, outlet): # function for playing audio and sending marker
data, fs = sf.read(audio_file) # Load the audio file
print("جاري تشغيل الصوت وإرسال علامة LSL...") marker_val = [1] outlet.push_sample(marker_val) # أرسل علامة تشير إلى بدء تشغيل الصوت sd.play(data, fs) # تشغيل الصوت sd.wait() # الانتظار حتى ينتهي تشغيل الصوت print("انتهى تشغيل الصوت.")
print("جاري تشغيل الصوت وإرسال علامة LSL...") marker_val = [1] outlet.push_sample(marker_val) # أرسل علامة تشير إلى بدء تشغيل الصوت sd.play(data, fs) # تشغيل الصوت sd.wait() # الانتظار حتى ينتهي تشغيل الصوت print("انتهى تشغيل الصوت.")
print("جاري تشغيل الصوت وإرسال علامة LSL...") marker_val = [1] outlet.push_sample(marker_val) # أرسل علامة تشير إلى بدء تشغيل الصوت sd.play(data, fs) # تشغيل الصوت sd.wait() # الانتظار حتى ينتهي تشغيل الصوت print("انتهى تشغيل الصوت.")
if name == "main": # MAIN LOOP
# Setup LSL stream for markers
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # Set to 0 sampling rate because markers are irregular
chan_format = 'int32'
marker_id = 'uniqueMarkerID12345'
info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id) outlet = StreamOutlet(info) # إنشاء مخرج LSL <h1>أبقِ السكربت قيد التشغيل وانتظر مفتاح ENTER لتشغيل الصوت وإرسال العلامة</h1>
info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id) outlet = StreamOutlet(info) # إنشاء مخرج LSL <h1>أبقِ السكربت قيد التشغيل وانتظر مفتاح ENTER لتشغيل الصوت وإرسال العلامة</h1>
info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id) outlet = StreamOutlet(info) # إنشاء مخرج LSL <h1>أبقِ السكربت قيد التشغيل وانتظر مفتاح ENTER لتشغيل الصوت وإرسال العلامة</h1>
يوضح هذا السكربت التجريبي بعض الوظائف الأساسية لاستيراد وتعليق بيانات EEG التي تم جمعها من برنامج EmotivPRO. وهو يستخدم MNE لتحميل ملف XDF، وطباعة بعض البيانات الوصفية الأساسية، وإنشاء كائن info ورسم طيف القدرة (power spectrum)."""
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np
المسار إلى ملف XDF الخاص بك
data_path = '/path/to/your/xdf_file.xdf'
تحميل ملف XDF
streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))
for i, stream in enumerate(streams):
print("\nStream", i + 1)
print("Stream Name:", stream['info']['name'][0])
print("Stream Type:", stream['info']['type'][0])
print("Number of Channels:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Sampling Rate:", sfreq)
print("Number of Samples:", len(stream['time_series']))
print("Print the first 5 data points:", stream['time_series'][:5])
channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]<br>print("أسماء القنوات:", channel_names)<br>
channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]<br>print("أسماء القنوات:", channel_names)<br>
channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]<br>print("أسماء القنوات:", channel_names)<br>
إنشاء كائن معلومات MNE
info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Data needs to be transposed: channels x samples
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # plot a simple spectrogram (power spectral density)مصادر إضافيةتنزيل هذا البرنامج التعليمي كدفتر ملاحظات Jupyter من Emotiv GitHubتحقق من وثائق LSL عبر الإنترنت، بما في ذلك ملف README الرسمي على GitHubستحتاج إلى جهاز أو أكثر من أجهزة الحصول على البيانات المدعومة لجمع البياناتتتصل جميع أجهزة brainware من Emotiv ببرنامج EmotivPRO، والذي يحتوي على إمكانيات LSL مدمجة لإرسال واستقبال تدفقات البياناتمصادر إضافية:كود لتشغيل LSL باستخدام أجهزة Emotiv، مع سكربتات تجريبيةعرض توضيحي مفيد لـ LSL على YouTubeمستودع SCCN LSL GitHub لجميع المكتبات المرتبطةمستودع GitHub لمجموعة من الوحدات الفرعية والتطبيقاتمسار تحليل HyPyP لدراسات Hyperscanning
بواسطة روشيني راندينيا و لوكاس كلاين
التشغيل:
بمجرد تشغيل هذا السكربت في سطر الأوامر، فإنه يبدأ على الفور تدفق LSL. وكلما تم الضغط على مفتاح 'Enter'، يرسل نبضة تشغيل (trigger) ويشغل ملفًا صوتيًا."""
import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet
def wait_for_keypress():
print("اضغط على ENTER لبدء تشغيل الصوت وإرسال علامة LSL.")
while True: # هذه الحلقة تنتظر إدخالًا من لوحة المفاتيح input_str = input() # انتظر الإدخال من الطرفية if input_str == "": # إذا تم الضغط على مفتاح enter، تابع break
def AudioMarker(audio_file, outlet): # function for playing audio and sending marker
data, fs = sf.read(audio_file) # Load the audio file
print("جاري تشغيل الصوت وإرسال علامة LSL...") marker_val = [1] outlet.push_sample(marker_val) # أرسل علامة تشير إلى بدء تشغيل الصوت sd.play(data, fs) # تشغيل الصوت sd.wait() # الانتظار حتى ينتهي تشغيل الصوت print("انتهى تشغيل الصوت.")
if name == "main": # MAIN LOOP
# Setup LSL stream for markers
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # Set to 0 sampling rate because markers are irregular
chan_format = 'int32'
marker_id = 'uniqueMarkerID12345'
info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id) outlet = StreamOutlet(info) # إنشاء مخرج LSL <h1>أبقِ السكربت قيد التشغيل وانتظر مفتاح ENTER لتشغيل الصوت وإرسال العلامة</h1>
يوضح هذا السكربت التجريبي بعض الوظائف الأساسية لاستيراد وتعليق بيانات EEG التي تم جمعها من برنامج EmotivPRO. وهو يستخدم MNE لتحميل ملف XDF، وطباعة بعض البيانات الوصفية الأساسية، وإنشاء كائن info ورسم طيف القدرة (power spectrum)."""
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np
المسار إلى ملف XDF الخاص بك
data_path = '/path/to/your/xdf_file.xdf'
تحميل ملف XDF
streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))
for i, stream in enumerate(streams):
print("\nStream", i + 1)
print("Stream Name:", stream['info']['name'][0])
print("Stream Type:", stream['info']['type'][0])
print("Number of Channels:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Sampling Rate:", sfreq)
print("Number of Samples:", len(stream['time_series']))
print("Print the first 5 data points:", stream['time_series'][:5])
channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]<br>print("أسماء القنوات:", channel_names)<br>
إنشاء كائن معلومات MNE
info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Data needs to be transposed: channels x samples
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # plot a simple spectrogram (power spectral density)مصادر إضافيةتنزيل هذا البرنامج التعليمي كدفتر ملاحظات Jupyter من Emotiv GitHubتحقق من وثائق LSL عبر الإنترنت، بما في ذلك ملف README الرسمي على GitHubستحتاج إلى جهاز أو أكثر من أجهزة الحصول على البيانات المدعومة لجمع البياناتتتصل جميع أجهزة brainware من Emotiv ببرنامج EmotivPRO، والذي يحتوي على إمكانيات LSL مدمجة لإرسال واستقبال تدفقات البياناتمصادر إضافية:كود لتشغيل LSL باستخدام أجهزة Emotiv، مع سكربتات تجريبيةعرض توضيحي مفيد لـ LSL على YouTubeمستودع SCCN LSL GitHub لجميع المكتبات المرتبطةمستودع GitHub لمجموعة من الوحدات الفرعية والتطبيقاتمسار تحليل HyPyP لدراسات Hyperscanning
بواسطة روشيني راندينيا و لوكاس كلاين
التشغيل:
بمجرد تشغيل هذا السكربت في سطر الأوامر، فإنه يبدأ على الفور تدفق LSL. وكلما تم الضغط على مفتاح 'Enter'، يرسل نبضة تشغيل (trigger) ويشغل ملفًا صوتيًا."""
import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet
def wait_for_keypress():
print("اضغط على ENTER لبدء تشغيل الصوت وإرسال علامة LSL.")
while True: # هذه الحلقة تنتظر إدخالًا من لوحة المفاتيح input_str = input() # انتظر الإدخال من الطرفية if input_str == "": # إذا تم الضغط على مفتاح enter، تابع break
def AudioMarker(audio_file, outlet): # function for playing audio and sending marker
data, fs = sf.read(audio_file) # Load the audio file
print("جاري تشغيل الصوت وإرسال علامة LSL...") marker_val = [1] outlet.push_sample(marker_val) # أرسل علامة تشير إلى بدء تشغيل الصوت sd.play(data, fs) # تشغيل الصوت sd.wait() # الانتظار حتى ينتهي تشغيل الصوت print("انتهى تشغيل الصوت.")
if name == "main": # MAIN LOOP
# Setup LSL stream for markers
stream_name = 'AudioMarkers'
stream_type = 'Markers'
n_chans = 1
sr = 0 # Set to 0 sampling rate because markers are irregular
chan_format = 'int32'
marker_id = 'uniqueMarkerID12345'
info = StreamInfo(stream_name, stream_type, n_chans, sr, chan_format, marker_id) outlet = StreamOutlet(info) # إنشاء مخرج LSL <h1>أبقِ السكربت قيد التشغيل وانتظر مفتاح ENTER لتشغيل الصوت وإرسال العلامة</h1>
يوضح هذا السكربت التجريبي بعض الوظائف الأساسية لاستيراد وتعليق بيانات EEG التي تم جمعها من برنامج EmotivPRO. وهو يستخدم MNE لتحميل ملف XDF، وطباعة بعض البيانات الوصفية الأساسية، وإنشاء كائن info ورسم طيف القدرة (power spectrum)."""
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np
المسار إلى ملف XDF الخاص بك
data_path = '/path/to/your/xdf_file.xdf'
تحميل ملف XDF
streams, fileheader = pyxdf.load_xdf(data_path)
print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))
for i, stream in enumerate(streams):
print("\nStream", i + 1)
print("Stream Name:", stream['info']['name'][0])
print("Stream Type:", stream['info']['type'][0])
print("Number of Channels:", stream['info']['channel_count'][0])
sfreq = float(stream['info']['nominal_srate'][0])
print("Sampling Rate:", sfreq)
print("Number of Samples:", len(stream['time_series']))
print("Print the first 5 data points:", stream['time_series'][:5])
channel_names = [chan['label'][0] for chan in stream['info']['desc'][0]['channels'][0]['channel']]<br>print("أسماء القنوات:", channel_names)<br>
إنشاء كائن معلومات MNE
info = mne.create_info(channel_names, sfreq, channel_types)
data = np.array(stream['time_series']).T # Data needs to be transposed: channels x samples
raw = mne.io.RawArray(data, info)
raw.plot_psd(fmax=50) # plot a simple spectrogram (power spectral density)مصادر إضافيةتنزيل هذا البرنامج التعليمي كدفتر ملاحظات Jupyter من Emotiv GitHubتحقق من وثائق LSL عبر الإنترنت، بما في ذلك ملف README الرسمي على GitHubستحتاج إلى جهاز أو أكثر من أجهزة الحصول على البيانات المدعومة لجمع البياناتتتصل جميع أجهزة brainware من Emotiv ببرنامج EmotivPRO، والذي يحتوي على إمكانيات LSL مدمجة لإرسال واستقبال تدفقات البياناتمصادر إضافية:كود لتشغيل LSL باستخدام أجهزة Emotiv، مع سكربتات تجريبيةعرض توضيحي مفيد لـ LSL على YouTubeمستودع SCCN LSL GitHub لجميع المكتبات المرتبطةمستودع GitHub لمجموعة من الوحدات الفرعية والتطبيقاتمسار تحليل HyPyP لدراسات Hyperscanning
