1.概要
Raspberry Pi 3にPure Dataを入れて遊んでいます。
- Raspberry Pi 3(Raspbian Stretch)にPure Dataをインストールする - Qiita
- Raspberry Pi 3のPure Data VanillaでOSC信号を受信する - Qiita
- Raspberry Pi 3のPure Data Vanillaをコマンドラインから起動、終了する - Qiita
今回はRaspberry Pi 3にキーパッドをつないでPure Dataを操作しようと考えました。
キーの入力は取れたのですが、モニタなしで使おうとしてハマったので、メモです。
2. 環境・使用機器
- Raspberry Pi 3 (Rasbpian Stretch)
- Pure Data Vanilla (pd-0.47.1)
3. 手順
3.1 ハマるまでの経緯
まずは以下のサイトを参考に、Pure Dataでkey
やselect
使ってテンキーからの入力で操作するパッチを組みました。
GUI上で上手く動いていましたが、今回はモニタを使用していないので以下のようにしてPuredataを起動しています。
pd -nogui test.pd &
keyはPure Dataのウィンドウがアクティブのときに有効らしく、-nogui
で起動した場合、使えないことが分かりました。
3.2 モニタなしでキーパッドの情報を受け取る方法
方法をいろいろ調べてみましたが、pdで直接受け取るのは難しそうです。
それっぽい方法を2つ見つけました。
- Triggerhappyを使った方法
- pythonを使った方法(詳しく読んでない)
1.で説明されていたTriggerhappyがRaspbianにもともと入っているっぽいのでこちらでやってみることにしました。
3.3 コマンドラインからOSCを送るためにosc-cliをインストールする
(* osc-cliはタイムラグがあったので最後にoscerで試した方法を追記しました)
ターミナルからoscを送るnodeのモジュールをインストールします。
npm install -g osc-cli
使い方は以下のサイトを見てください。
例えば127.0.0.1:9001に/play 1
を送る場合はターミナルで以下のコマンドを打ちます。
osc --host 127.0.0.1:9001 /play 1
3.4 キーの名前の確認
Triggerhappyの設定ファイルを作成するために、以下のサイトを参考にしてまずはキーボードのキーがどういう名前で認識されているのかを調べます。
ターミナルで以下のコマンドを実行してキーを押すと表示されます。(ctrl + c
で終了)
thd --dump /dev/input/*
キーパッドの1を押して離したときの様子。
EV_KEY KEY_KP1 1 /dev/input/event0
# KEY_KP1 1 command
EV_KEY KEY_KP1 0 /dev/input/event0
# KEY_KP1 0 command
3.4 .confファイルの作成、保存
以下のような内容のファイルを作成し、拡張子は.conf
で/etc/triggerhappy/triggers.d/
に保存します。
# キーパッドの1を押したときにoscで/play 1を、離したときに/stop 1を送る
KEY_KP1 1 osc --host 127.0.0.1:9001 /play 1
KEY_KP1 0 osc --host 127.0.0.1:9001 /stop 1
私は.confファイルをプロジェクトフォルダ(この場合myproject
フォルダ)に保存してシンボリックリンクを貼りました。
sudo ln -s ~/myproject/test.conf /etc/triggerhappy/triggers.d/
リロードします。私の場合は再起動しないと上手く動きませんでした。
sudo /etc/init.d/triggerhappy reload
osc-cliの場合、少しタイムラグがあるのが気になりますが、とりあえず動くようになりました。
(追記)osc-cliではなくoscerを試す
やっぱりosc-cliのタイムラグが気になったので、コマンドラインからOSCを送れる別のoscerを試してみました。
参考サイト
- OSCをMacやWindowsやLinuxやRasPiから送るシンプルツール作った - aikeの日記
- aike/oscer: simple command-line OSC messaging tool
インストール
こうやってソースやビルドされたものが配布されているプロジェクトをどうやって使うのかが分からなくて、調べながら一応動くようにしたので、合っているか分かりません。
- githubをクローンする
git clone https://github.com/aike/oscer.git
- シンボリックリンクを作成する
sudo ln -s ~/oscer/build/LinuxARM/oscer /usr/local/bin/
コマンドラインでの使い方
oscer 127.0.0.1 9001 /play 1
Triggerhappyの.confファイルを書き換える
# キーパッドの1を押したときにoscで/play 1を、離したときに/stop 1を送る
KEY_KP1 1 oscer 127.0.0.1 9001 /play 1
KEY_KP1 0 oscer 127.0.0.1 9001 /stop 1
こっちの方が反応が早くて幸せになれました。