たまたまネットで聖徳玉子という作品を見かけて、ここで使われているたまご型マイクアレイ(TAMAGO-03)(8chのマイクアレイ)というやつが3万円足らずで買えることがわかり、思わず(会社の予算で)買ってしまった。
<img src="http://lifedesign.tech/wp-content/uploads/2018/07/1.jpg" alt="" width="800" height="627" class="size-full wp-image-1452" /> DSC_0829
これを使うと、音が来た方向がわかったりするらしい(最初は距離もわかるのかと思ったが今のところやり方わからじ)。
で、ソフトウェアとしては、もともと京大が開発し、現在はホンダが権利を獲得したというHARKという制御ソフト(現在Ver2.4)が正式対応しているとのこと。そこまでちゃんとなってるならきっと僕にも使えるだろうと思ってチャレンジしてみた。
しかしHarkに関する情報はネット上にあまりなく、Qiitaも二人くらいしか投稿していないという状況で萎えそうになった瞬間もあったが、Harkクックブックという公式ドキュメントが、ところどころ説明不足感はありつつもそれなりに平易に書かれたもので、なんとか音の方向くらいはわかるようになった。ただし、いろんなところではまってしまったのでここにメモを残しておきたい。
これは、クックブックの「マイクロホンからのリアルタイム音源定位」をそのまま実装したものである。
右下のグラフ、縦軸が方向(-180~+180)を表していて、横軸が時間。ひとつの音源を分かれたものだと認識してしまったり、途切れることはよくあるが、一応方向としては間違ってはいない。
はまった点:
- Ubuntuのバージョンを下げてまでがんばったがLinuxからHark経由でたまごを用いた録音はできず、Windows版を使ってなんとか動かした。(TAMAGO-03というデバイス自体はできていた)。ちなみにWindows10が推奨とのことだがWindows7で試して今のところ問題ない。
- Windows版でもHarkインストール前にpythonとかを入れる必要があるが、Cygwin内のパッケージでいれてもしょうがなくて、Windows自体にインストールする必要あり(そりゃそうか)。
- HARK Designerというソフトを立ち上げるとブラウザでlocalhost:3000にアクセスするタブが立ち上がり、それがHarkのフロントエンドである。したがって3000番ポートはウィルスソフトなどでブロックしないようにしないといけない。本体はNode.jsで書かれたサーバであり、30MB近くを消費している。フロントエンド(ブラウザのタブ)を閉じても走り続けるが、止め方はわからない。
- 基本的にクックブックの図と同じネットワークを作るだけなのだが、そもそもMAINに入れるはずのLOOP0というノードが検索しても見つからない。これは動的ノードというもので、他のSheet(タブ)の内容をひとつのノードとして使える機能らしい。つまり、LOOP0というsheetを先に作り、MAINのほうではノードリストの一番下の「Dynamic」からLOOP0を選べばよい。
- はっきり書いていないけど、MAINはsubnetのシートで、LOOP0はiteratorである。
- Windowsの場合、AudioStreamFromMicノードのパラメータとしてDEVICETYPEは「DS」、DEVICEは「TAMAGO-03」と入れる。
- 録音してファイルに書き出す場合、ディレクトリはC:\ProgramData\HARK\hark-designer\userdata\networksとなった。
- クックブックに書いていないこととして、以下のパラメータ設定が必要
- LocalizeMusicノードのパラメータA_MATRIXが指定されていない。ここには、マイクの種類に依存した「伝達関数ファイル」のパスを入れる(zipファイルを指定する)。TAMAGO-03の場合はHark HPのDocumentsのSupported HardwareにリストされているTAMAGO-01/02/03 (System in Frontier Inc.)から、Microphone Array Transfer Function Fileのリンクをたどって落とすもの(‘18.7.19現在「By TSP Recordings」と「By Geometrically Calculation」の二種類がある。どっちでもいいのかもしれないが、とりあえず後者を使っている)を指定する。
- SourceTrackerノードのTHRESHパラメータも指定されていない。ここは、認識に用いる音量の最低レベルを指定するものだが、意図する音だけ拾うのは結構シビアだった。私の環境で、リビングで子供の声を取ってみたときには36ぐらいがよかった。ちなみにfloatで設定できるらしい。
はっきり言ってHarkのフロントエンドはとても重いので、次はフロントエンドなしで動かしてみたい。HARK-Pythonというのを使えばできると信じたい。