chakokuのブログ(rev4)

日々のごった煮ブログです

OpenBCIを使って自分の脳波を聞くというトライアル。。。

OpenBCIによる脳波センサーのアプリ開発(苦笑)は、基礎技術(フィルタとか機械学習とか)に取り組んでいて全く進んでいない。一方、データ分析するにしても、おおよその脳波データの特性は把握しておく必要がある。(データ解析するにあたり、データの特性を俯瞰するというか)
脳波の波形は、FFTとかで分析してリアルタイムで見ても単なるランダムな変化としか捉えられないので、、大まかついでに、、音に変換して耳で聞いたらどうか?と思った。もし全体的な変化があれば聞こえてくる脳波の音色も変わるだろうというわけ。
ただ、、脳波自体は電圧が低いのと周波数が低いのでそのままでは聞けない問題がある。電圧が低い件は、増幅すればいいのだけど、周波数が低い件は、なんらかの方法で周波数変換する必要がある。
多分正攻法でいくなら、変調による周波数帯のシフトなんだろうけど、ちょっと数学とか分かっていないので、、、オリジナル波形を10倍ぐらいに時間方向に縮めて再生したらいいのでは?と思った。この方法の利点は、面倒な計算が不要な点だ。一方、欠点としては、低い周波数帯(5Hzとか)の脳波は50Hzぐらいにしかならず、脳波の周波数帯全体は可聴領域までシフトできないという点。
でもまぁ、作ってみてナンボなので、だめもとで作ってみる予定。

音を扱うのに、Windowsがいいのか、Linuxがいいのか。。GUIの作りやすさから考えると、Windows上で作るのが望ましいが、自分はC++はほとんど使えないので、C#から叩ける範囲で、.NETのAPI?とかを叩いて実装する必要がある。Waveファイルを再生するだけなら、API数発で実現できそうだけど、リアルタイムで変化させながら任意の波形を再生させるには、、DirectSoundを使うのがよさそうだというところまでは分かった。が、、最新状況は、XACTというのに取って代わっているようであった。


■ご参考URL
MemoryStream で音を再生する(うめつる様)
http://blog.ume108.mobi/?p=837&

.NET で音声ファイルを多重再生したい場合、どんな API を使えば良いですか?
http://qa.atmarkit.co.jp/q/6556

第3回 .NET開発者のためのDirectX連携手法
http://www.atmarkit.co.jp/fdotnet/directxworld/directxworld03/directxworld03_02.html

MSDN DirectSound
https://msdn.microsoft.com/ja-jp/library/cc353918.aspx

DirectSound: simple pcm playing
http://stackoverflow.com/questions/10281360/directsound-simple-pcm-playing

C#でstreamを使って、secondary bufferに書き込む(jyaiko様)
http://junzo.sakura.ne.jp/c_sharp23/c_sharp23.htm

http://marupeke296.com/DS_No1_PlaySound.html
http://kana-soft.com/tech/sample_0006.htm
http://blog.code-life.net/blog/2012/01/16/managed-directsound/
https://msdn.microsoft.com/ja-jp/library/ms973091.aspx
https://msdn.microsoft.com/ja-jp/library/Ee416188(v=VS.85).aspx

脳波を周波数シフトするQA(同じようなことを考えている人がすでにいた)
http://oshiete.goo.ne.jp/qa/2315423.html


http://sorceryforce.com/manageddirectx/directsound_setting.html
http://home.a00.itscom.net/hatada/asp/wav.html