RasPd1 ソフトウェア編その2

2017年04月28日 カテゴリー:Raspberry Pi



Pure Data(Pd)の設定等をしていきます(太字表記はコマンド)。



<Pd設定>
Pdと外部オブジェクト(Externals)をインストールします。
$ sudo apt-get install puredata
$ sudo apt-get install pd-libdir pd-cyclone pd-unauthorized pd-ggee pd-zexy
作るエフェクトによっては、もっとたくさんの外部オブジェクトが必要となるかもしれません。

設定ファイルを作成します。
$ nano .pdsettings (新規作成)
以下の内容です。パス(path)は念のため全ての外部オブジェクトを入れています。
audioapi: 1
noaudioin: False
audioindev1: 0 2
noaudioout: False
audiooutdev1: 0 2
audiobuf: 6
rate: 44100
callback: 0
blocksize: 64
nomidiin: True
nomidiout: True
path1: /usr/lib/pd/extra
path2: /usr/lib/pd/extra/cyclone
path3: /usr/lib/pd/extra/ggee
path4: /usr/lib/pd/extra/libdir
path5: /usr/lib/pd/extra/pddp
path6: /usr/lib/pd/extra/unauthorized
path7: /usr/lib/pd/extra/zexy
npath: 7
standardpath: 1
verbose: 0
nloadlib: 0
defeatrt: 0
flags: -nogui -rt -alsa

flagsにコマンドラインオプションを入れることができます。-realtime(-rt)を入れるとPdをリアルタイム優先度で実行できますが、通常のpiユーザーでは権限が弱いためこのオプションが使えずエラーが出ます。こちらのページを参考に設定変更しています。
$ sudo nano /etc/security/limits.conf
以下の2行を追加で記載します。
* - rtprio 99
* - memlock unlimited
※「audio」ユーザーグループだけに設定してもよいのですが、面倒なので全てのユーザーで優先度を上げて実行可能にしています。

設定ファイルのaudiobufとblocksizeを少なくするほど低レイテンシーとなります。しかし少なくしすぎると処理が追いつかず波形が途切れ途切れの状態になり、ノイズが発生します。ですので波形が途切れない限界の値を探っていくことになります。レイテンシーについては別の記事にも記載しています。

-nosleepオプションを入れると「audiobuf 5 blocksize 64」が限界値で、レイテンシーは11msとなりました。しかしエフェクトを切り替えた際にハングアップしてしまうことがあるため、このオプションは入れないことにしました。その場合「audiobuf 6 blocksize 64」が限界値で、レイテンシーは14msでした。聴感上は遅延を感じませんが、複数のエフェクトを処理する場合はもっと遅くなると思われるので、現在はI2S接続のオーディオインターフェイスの使用を検討中です。

※ちなみにclass4のmicroSDカードを使ったときclass10のものよりレイテンシーが約0.7ms増加していたので、ハイスピードのmicroSDカードはわずかに効果がありそうです。



<自動起動設定>
電源を入れたときにメインプログラム(私の場合はmain.pyというPythonスクリプトファイル)が自動起動されるように設定します。
$ crontab -e
最後に追加 @reboot python /home/pi/main.py → @reboot sleep 5 && python /home/pi/main.py
起動に失敗することがあるので、待機時間を設けました。(2018年1月28日追記)
※私はメインプログラム等の使うファイルはすべて/home/pi/フォルダに入れています。

自動起動しているプログラムを終了したいときは下記コマンドを使います。
$ killall python ; killall pd



<リアルタイムカーネル>
下記ページに載っている方法が最も簡単にリアルタイムカーネルを導入できると思われます。
Raspberry Pi 3とリアルタイムカーネル(3)[自前ビルド無し導入編(おまけ)]
しかしながらはっきりとはわかりませんが、Pdで「tried but couldn't sync A/D/A」というエラーが発生する原因になる可能性があります。また、私の環境ではレイテンシーがほとんど変わらなかったので、特に導入する必要はないと思います。

<JACK Audio Connection Kit>
いろいろなサイトでふれられているJACKですが、私はどう設定してもうまくいきません。何とか起動できてもレイテンシー24msぐらいだったため、導入をあきらめました。



ハードウェア編へ  ソフトウェア編その1へ  プログラミング編