読者です 読者をやめる 読者になる 読者になる

アールテクニカ地下ガレージ

アールテクニカ株式会社の製品開発・研究開発・日々の活動です

Bela上でのPure Dataとheavyの連携

 Author

コイデマサヒロ

以前の記事でBelaでPure Dataを試しました。

この記事の中でBelaでPure Dataを扱う方法としてheavyについて軽く触れましたが、改めてheavyの使い方についてまとめます。さらにpdlibとの違いについても触れます。

heavyとは

heavyとはPure Dataのパッチを、さまざまな開発環境あるいはフレームワーク向けのC/C++のコードに変換してくれるWebサービスです。Pure Dataのパッチをheavyのサーバーにアップロードするとサーバー上で各フレームワーク向けのソースファイルに変換されるので、それを自分のプロジェクトなどに組み込むというのが主な利用法です。

変換のターゲットは、iOS向けだったりUnityだったり、はたまたWeb Audio APIやXboxといったゲーム機も含まれています。ソースだけではなくVSTプラグインの実行ファイルとして書き出すこともできます。Pure Dataのパッチをネイティブなアプリケーションに変換するという用途も可能ですが、一番の主旨としては、Pure Dataで信号処理的なプロトタイピングを行い、そのパッチをネイティブコードに変換し、他で活用するということではないかと思います。

heavy側もBelaに対応しており、Belaと連携した場合は、Belaからheavyのサーバーにパッチをアップロードし、Bela向けに変換されたソースコードをダウンロードし、Bela内でビルドして実行するという流れになります。Bela用にはBela内から利用するのが全体になっているようです。

尚、非商用利用なら無償で利用できますが、変換したコードをBelaで利用する場合もライセンスが引き継がれるはずですので注意して下さい。

セットアップ

まずは環境を整えます。

Bela上でPure Dataのパッチの取扱いについての公式なドキュメントはこちら。

https://github.com/BelaPlatform/Bela/wiki/Running-Puredata-patches-on-Bela

最新のOSとIDEであればheavyのセットアップはもう少し簡単になっているようで、Python関係のセットアップは必要ありません。

また今回はブラウザだけでなくターミナルからsshでBela OSに入って作業しますので、シェル環境なども予めセットアップしておく必要があります(Windowsの場合。Macはデフォルトでインストールされているターミナルが利用できます)。

Bela OSを準備

最新の0.2.0aを使います。入手はこちらから。

https://github.com/BelaPlatform/bela-image/releases

OSのイメージをSDカードに書き込んで利用します。詳細はここでは割愛します。

 

[おまけ情報]SDカードからの起動の場合は、

https://github.com/BelaPlatform/Bela/wiki/Manage-your-SD-card#resizing-filesystems-on-an-existing-sd-card

を参考にOSのパーティションのリサイズをしておきましょう。Belaイメージは4GBなのでそれより容量の大きいSDカードを使っている場合でも、その容量全てを使えるようになります。

コアシステムをアップデート

ブラウザIDE等のBelaのコアシステムを最新版にアップデートします。この作業はBeagleBone Blackを接続するパソコン側で行います。またアップデートでユーザーデータは削除されませんが、念のためバックアップを取っておいたほうが良いかもしれません。

https://codeload.github.com/BelaPlatform/Bela/zip/master

からBela-master.zipというファイルをダウンロードしてください。

BeagleBone Blackとパソコンを接続し、ブラウザで192.167.7.2にアクセスしてIDEを開きます。IDE上の、設定(歯車アイコン) -> Upload an update patch -> Update Bela とたどり、先程のダウンロードしたBela-master.zipを指定しアップロードします。

ここでは割愛しますが、パソコンとBeagleBoneとの接続にはドライバーが必要です。接続についてはBeagleBoneの公式サイトやネット上の解説などを調べて下さい。

アップロードが開始したらそのままで待ちます。

自動的にアップデートが開始されますが、途中でIDEに再起動がかかりブラウザの接続が一旦切れます。ブラウザ側で接続が切れたという表示が出ても、Belaが再起動すれば再度接続されるはず。数分しても再読込されない場合は、ページを再読込してみてください。

これで最新のシステムになっているはずです。

必要なライブラリ類の一部はアップデート後の初回のビルドで合わせて作成されるようですので、簡単なサンプルをビルドしておきましょう。

 

ネットワークに接続できるようにする

BelaとパソコンはUSB経由でネットワーク接続されているのですが、そのネットワークの外にはつながりません。今回はインターネットへの接続が必要ですので、セットアップが必要です。

OSによっては、ホスト側のパソコンのネット接続をBeagleBone Black側にブリッジできる場合もありますが、僕の環境(OS X 10.11)ではうまく動かないため有線LANで接続しています。有線LANなら特に設定が必要ないのでお薦めです。Wifiも使えるアダプターが限られているようですので、Wifi to 有線なアダプターの利用が良いと思います。

正常にネットワークに接続できているかどうかは、ブラウザIDEのコマンド入力欄から、pingなりifconfigなり traceroute なりで確認できます。

 

heavy側の準備

heavyはWebサービスなのでアカウントが必要です。

https://enzienaudio.com/

にアクセスし、ページ左上の「SIGN UP」から登録します。

f:id:atkoide:20161222160128p:plain 

登録後、ログインし、「bela」という名前のプロジェクトを作成します(最初の画面の「+New Patch」ボタン)。

f:id:atkoide:20161222160147p:plain
プロジェクトを作成するとこんな感じ↓

f:id:atkoide:20161222160431p:plain

中身は空で構いません。Belaからこのプロジェクトにソースがアップロードされ、コードに変換されます。ここでパッチをアップロードしてもBela用には変換されないようなので注意です。(後述しますがBela側で利用しているheavyのバージョンが異なることも関係していると思われます)

Bela側の準備&ビルド

Belaにはheavyを使うためのスクリプトが用意されています。パッチを指定してスクリプトを実行すると、

  1. heavyサーバーへのログイン
  2. Pure Dataパッチのアップロード
  3. Bela用コードへの変換
  4. コードのダウンロード
  5. コードのソースのビルド
  6. バイナリの実行

という流れで自動的に行われます。

Belaとパソコンとの接続

ターミナル上でsshでBelaと接続して作業を行います。
(ブラウザIDE自体にもターミナルの機能はあるのですが、そこでは正常に動かない場合があるため今回は触れません。)

ターミナルで

ssh root@192.168.7.2

と入力し、Belaにログインします。rootですが、パスワード無しでログインできます。


スクリプトの場所

なぜか、通常はスクリプトはインストールされていません。しかし、システムのアップデートで使ったBela-master.zipには含まれていますので、それを利用します。

このファイルは、
/root/Bela/updates

にあります。

ここまで

cd Bela/updates

で移動し、

unzip Bela-master.zip

で展開し、

cd Bela-master

でその中に入ります。

ls

で中身を確認すると、

core  dev  Doxyfile  examples  IDE  include  lib  LICENSE  Makefile  pru_rtaudio.p  README.md  resources  scripts  tmp

と表示されるはずです。

「scripts」フォルダに必要なスクリプト類が入っています。

「update」フォルダの中身は、システムのアップデートの度に消されますので、scriptsフォルダごとコピーしておきましょう。

cp -a ./scripts ../../
(/root/Bela/scripts)
cd

でホーム位置に戻りますので、

cd Bela/scripts

として先程コピーしたscriptsフォルダに移動します。

ls

でファイルを確認できます。

『build_pd_heavy.sh』が利用するスクリプトです。

今回はBelaに付属するサンプルを利用します。

サンプルは、 /root/Bela/examples 配下にあります。 例として /08-PureData/hello-world を使ってみます。

利用法は簡単です。

./build_pd_heavy.sh ../examples/08-PureData/hello-world

と引数としてPdパッチのフォルダを指定してスクリプトを実行するだけ!

(メインのパッチは必ず_main.pdとなってなければなりません)

実行すると初回はheavyのユーザー名とパスワードが聞かれます。
2回目以降はトークンが保存されるためユーザ名等の入力は聞かれません。トークンの期限が切れれば再度聞かれるはずです。

そしていろいろメッセージが出てきますが、最終的にビルドが成功すると、バイナリが実行されます。今回の場合は、440Hzのサイン波が再生されればOKです。 

停止する場合は、
[Ctrl]+[C]
を押します。

./build_pd_heavy.sh -h

とするとスクリプトのオプションが表示されます。必ず目を通しておいたほうが良いでしょう。例えば、
--clean :中間生成物等を削除してからビルド。いわゆるクリーンビルド
--noupload : heavyサーバーにパッチをアップロードせずローカル側のソースのみコンパイル。
といったものが用意されています。

変換されたソースは、ブラウザIDEでプロジェクトを作成した場合と同じ場所である、

~/Bela/projects/

配下にプロジェクトフォルダが作成されて(今回の場合は、hello-world という名前)、そこに格納されます。IDEから変換後のプロジェクトとして開くことができ、ビルドすることもできます。慣れてくれば、細かい変更であれば、IDEで修正するということもできるでしょう。

【2017.1.17追記】
最新のアップデートでheavyの使い方が変わりました。
最初のスクリプト実行時に説明が表示されますが、アカウント情報を入力するのではなく、トークンを入力するように変更されたようです。

https://enzienaudio.com/h/<ユーザー名>/settings/
にアクセスし"API Tokens"というところにトークンがありますのでそれを利用します。
なければ作成します。

入力ミスがあるとエラーになって続行不能になってしまいます。その場合は、
~/.heavy/
(/root/.heavy/)
にtokenというファイルに接続情報が保存されているので、このファイルを削除すれば、再度トークンを聞かれるようになります。

 

heavyとPdlibの負荷の比較

サンプルをいくつか試してみました。Pdlibで動作させた場合と、heavyで変換しブラウザIDE実行させた場合のCPU負荷を確認しました。どちらもブラウザIDE上のCPUメータで確認しています。

PudaDataパッチ pdlib heavy
08-PureData/basicAnalogOut 21% 17~18%
08-PureData/simple-fm 21~23% 17~18%
08-PureData/techno-world 58~59% 30~31%
10-Instruments/midi-poly-synth 35~36% 20%

08-PureData/basicAnalogOutは、可変抵抗とLEDを外付けし、その動作に違いがあるかも確認しましたが問題は無さそうです。

08-PureData/simple-fmは可変抵抗を付けパラメータが効くことと、その効き方の違いも確認しました。こちらも問題無さそうです。

08-PureData/techno-world も問題無さそうです。

10-Instruments/midi-poly-synthは、heavy版が正しく動作しませんでした。MIDIノートは正しく受け付けて音程も変わりますが、MIDI CCの効きがおかしく、一つのCCで複数パラーメータに効いてしまうようです。これはheavy側に問題がありそうなのですが、原因をまでは追っていません。Belaから使っているheavyのバージョンが少し古いので今後改善する見込みはあります。試しに現状でバージョンを上げてみたところ変換自体がうまく行きませんでした。

外付け回路との連動はBelaならではの機能ですがheavyでも問題無さそうです。

CPU負荷は、重いパッチの方がheavyの効果が現れるようです。50%近く軽くなるというのは驚きです。時間はかかるものの変換の仕方自体は、それほど大変ではないので、パッチが完成したらheavyで変換してみるのは良いかもしれませんね。

 

まとめ

heavyとの連携は簡単です。また負荷も軽くなり、重いパッチほど効果が期待できそうです。

ただ問題点もいろいろあります。

変換の手間がかかるので、パッチを修正する度に変換をかけるのは時間がかかります。そもそもパッチをBelaにアップするのも手間です。しかしこれはある程度完成したら変換をかけるということにすれば多少解決になります。 

必ずしも正確に動作するように変換されるというわけではなく、また問題の原因を突き止めるのも難しい場合もありそうです。そうなると経験値に頼らねばならなく、いろいろなパッチを試して、heavyのクセ(仕様)に合わせてパッチを作り込むということが必要そうです。さきほどの変換する手間を避けるという解決策と矛盾しますが....

heavyはBela以外にも使えますので、それを考えると多少問題があったとしても、メリとは大きいと個人的には思っています。

Belaもheavyもまだこれからアップデートはありそうですので、問題が解決されていることを期待しましょう。

 

Author

コイデマサヒロ

ディレクター、プロデューサー、ギタリスト。mimiCopyをはじめ弊社リリースの全てソフトウェア製品の企画を担当。ネイティブアプリ開発がメインでOS問わず対応可。dubバンドのギタリストとしても活動中。

スポンサーリンク