LSLでプログラミング - C#編:part1

2021年1月20日

今年初の投稿となり、本年もよろしくお願いいたします。
鬼塚です。

皆様それぞれだと思いますが今年も(こそ)いい年でありますように。

さて、前回はLSLというものについて軽く説明をしました。
今回からは実際にプログラミングを行いながら理解を深めていきたいと思います。


 LSLはC,C++をベースに作られていますが、C#、Python、Java、MATLAB等の言語でも利用でき、
OSもWindowsだけでなくLinuxやMacOS、Android等の環境でも動作します。 

まずは、一番お手軽にC#、Windows環境でサンプルコードを動かして動作を確認してみようと思います。
開発環境はVisualStudio2019を使うことにします。
この時点ではサンプルコードを使ってPC内でデータの送信、受信を行うだけですのでEchoちゃんは必要ありません。
環境が揃えられる方はお気軽に試してみてください。

githubからliblsl-Csharpをダウンロードします。

https://github.com/labstreaminglayer/liblsl-Csharp

緑色の「Code」ボタンをクリックしてダウンロードするか、gitをインストールしている場合は
cloneコマンドでリポジトリをコピーします。

liblsl-CsharpはC/C++用のDLLを使ってC#でも動かせるように作られているので元となるC/C++用ライブラリの"lsl.dll"も必要になります。
このDLLを作成するためにもコンパイルが必要ですが、すでにコンパイル済みのファイルが用意されていますので、こちらからダウンロードします。

https://github.com/sccn/liblsl/releases

ダウンロードするファイルは「liblsl-1.14.0-Win_amd64.zip」です。
バージョンによって名前が変わりますので最新版を選択します。
このファイルを展開して「bin」フォルダにある"lsl.dll"ファイルを取り出しておきます。

liblsl-Csharpをダウンロードして展開した、もしくはクローンしたフォルダに"liblsl.sln"がありますのでVisualStudioで開きます。

ソリューション エクスプローラーを確認すると「liblsl」というプロジェクトと、
「example」フォルダの中に7つのサンプルプロジェクトが含まれています。

最初にliblslのビルドを行います。プロジェクトアイコンを右クリックして「ビルド」を実行します。
ビルドが完了すると、"lsl_csharp.dll"が生成されます。
場所は"プロジェクトフォルダ\bin\Debug\netstandard2.0"にあります。
このファイルは"lsl.dll"を読み込んでC#で使えるようにする役割を持っています。

次にサンプルコードをビルドして実行してみます。
ソリューションエクスプローラーの「SendData」を右クリックして「ビルド」を実行します。ツールバーなどからでも構いません。

ビルドが完了したら、「SendData」を再度右クリックし、「スタートアッププロジェクトに設定」を選んだあと、F5キーを押すなどしてデバッグ実行します。
するとこのようなエラーが出るかと思います。

dll error

これは先ほど説明したC/C++用の"lsl.dll"が見つからなかったというメッセージです。
なので、実行ファイルと同じ場所に"lsl.dll"を置いてやるとうまくいきます。

実行ファイルの場所は「SendData」を右クリックして、「エクスプローラーでフォルダーを開く」を選択するとプロジェクトフォルダが表示されますので、さらに"bin\Debug\netcoreapp2.0"と進んだ所あります。

ここに"lsl.dll"をコピーします。

このようになっているはずです。"lsl_csharp.dll"も必要なファイルですがこれは自動的にコピーされています。
再度デバッグ実行を行うとコンソールウィンドウにいくつかログが表示された状態で止まります。
プログラムはデータの送信を無限ループで実行しているので、確認ができたら一旦停止させます。

同じように「ReceiveData」もビルド、DLLの配置を行ったあと、デバッグ実行を行います。
こちらは何も表示されませんが、実行できていればOKです。

送信と受信のプログラムですので、この2つを同時に実行させる必要がありますが、VisualStudioでのデバッグは
1ウィンドウにつき1つしか実行できないようですので、"liblsl.sln"をもう一つ開いて2ウィンドウでそれぞれ
「SendData」、「ReceiveData」を実行させます。

うまくいくと、「ReceiveData」の画面にこのようなログがつらつらと出力されます。
これでLSLを使って送信、受信のプログラムが動作するようになりました。

ちなみにこのサンプルは.netcore2.0で書かれていて、通常では".exe"の実行ファイルが作成されません。
".exe"の実行ファイルを作成したい場合は、VisualStudioのメニューから「ツール」→「ターミナル」などで「開発用 PowerShell」を開いて、プロジェクトフォルダに移動した状態で、"dotnet publish -c Debug -r win10-x64"とコマンドを実行します。

これはliblsl-CsharpのREADME.mdにも書かれている手順ですが、なぜかオプションが"-C"の大文字で書かれているので先ほどのように
小文字の"-c"で実行するとうまくいきます。

今回はここまでにして、次回はプログラムの内容について詳しく見ていきたいと思います。
お楽しみに!

PAGE TOP