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

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

超低レイテンシーなIOボード『Bela』を試す(Part.3)

Author

コイデマサヒロ

Part.1Part.2でBelaの概要を見てきました。今回はPure Dataを用いて実際にちょっとした開発をします。アナログ、デジタルのIOポートと連動したシンセを試してみます。

 

 

目次

Part1. (前々回:公開中)

  1. Belaとは
  2. ハードウェアのスペック
  3. ソフトウェア環境について

Part2. (前回:公開中)

  1. セットアップ
  2. eMMCから起動できるようにする。
  3. Bela IDEを使ってみる
  4. アップデートについて

Part3. (本記事)

  1. Pure Dataのパッチを動かすには
  2. 実際に使ってみる
    2-1. Pure Dataの準備
    2-2. プロジェクトの作成
    2-3. パッチの作成とアップロード
    2-4. アナログ/デジタルポートを試す
    2-5. シンセパッチの改造
    2-6. 改造したパッチを動かす
  3. さいごに

 

1. Pure Dataのパッチを動かすには 

Belaにはディスプレイアウトが無いためBela上でパッチの作成や編集は実質できません。Pure DataのパッチをBela上で動かすという仕組みが取られていますが、それには2つの方法があります。

 

ひとつは、libpdというPure Dataのエンジンをランタイム化したライブラリと組み合わせるという方法で、もうひとつは、heavyというサービスと使ってパッチをCのソースに変換し、それをBela上でコンパイルして実行するという方法です。libpdは非常にお手軽に使えますが、動作にオーバーヘッドがあります。heavyは変換が面倒ですが最適化されるので動作は軽くなります。本記事ではお手軽なlibpdについて説明します。

 

またBelaで利用できるPure dataのオブジェクトは、Pure Data本体にあるものだけです。つまり外部オブジェクトは利用できません。Belaはディスプレイアウトが無いため、UI系のオブジェクトはエラーにならないものの操作はできませんので実質使うことができません。(デバッグ用途では使えます)
【2016.10.21】
まだ正式サポートにはなっていないようですが、外部オブジェクトも利用可能なようです。試してやり方が分かりましたら、記事にする予定です。

 

アナログIO、デジタルIOは手軽に使えるようになっています。MIDIも利用可能ですが、現状では、MIDIインのみでMIDIアウトは実質動作しないようです。
【2016.9.26:追記】
Githubの最新のdevブランチではMIDIアウトも動作するように修正されたようです。

 

公式な説明は、以下にあります。

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

この説明だけでは不十分で、IDEにあるサンプルの方がより詳しく書かれていますので、全て目を通すのをお勧めします。

 

2. 実際に使ってみる

実際に手順を追って使いながら技術的なところを見ていきます。アナログ、デジタルポートも試すため、電子工作的なこともしてみたいと思います。 

Code Examples > 10-Instruments > midi-poly-synth

を改造して、MIDI以外にもアナログ/デジタルポートを利用してコントロールできるようにしてみたいと思います。

 

2-1. Pure Dataの準備

Belaと接続するパソコンにPure Dataをインストールします。
http://msp.ucsd.edu/software.html
から最新版をダウンロードしてきましょう。
Bela用としては、32bit版、64bit版のどちらでも構いません。それ以外にも色々使いたいという場合は、外部エクスターナルが充実している32bit版の方がよいかもしれません。

 

2-2. プロジェクトの作成

次に示すような手順でプロジェクトの準備をします。

  • Bela IDEを開きます。
  • フォルダのアイコンをクリックして、Project Explorerを開きます。

    f:id:atkoide:20160913143946p:plain

  • Manage projectsNew Project をクリックします。
  • Creating a new project のポップアップが開くので、プロジェクトの種類を「Pure Data」にして、したのテキストボックスにプロジェクト名を入れます。(下図)

    f:id:atkoide:20160913144014p:plain

    プロジェクト名はASCII文字のみにしておきましょう。日本語だと問題が出ると思います。
  • Saveをクリックするとプロジェクトが作成され、ポップアップが閉じます。
  • 作成されたプロジェクトは、
    /root/Bela/projects/
    配下に、プロジェクト名と同じ名前のフォルダが作成されます。
  • デフォルトプロジェクトフォルダ内に 「_main.pd」 というファイル(パッチ)が作成され、自動的に開きます。

    f:id:atkoide:20160913144045p:plain

    デフォルトで作成される_main.pdは実際に動作します。
    【注(2016.12.5)】画面上にパッチが表示されますが、これは表示のみで画面上では編集できません。
  • 作成したプロジェクトを再度開く場合は、Project Explorer > Open existing projectで、プロジェクトを選択します。

 

2-3. パッチの作成とアップロード

パッチは、パソコン上で作成します。
メインのパッチのファイル名は必ず「_main.pd」とします。Belaはこのファイル名のファイルをプロジェクトのメインのファイルとして判断します。
複数パッチに分かれる場合は、命名規則はありませんが、_main.pdと同じ階層に置きます。

 

パッチを作成したらBelaにアップロードします。Project Explorerで、アップロードしたいプロジェクトを開き、Manage project filesの「Upload File」をクリックして、アップロードしたいファイルを選択しアップロードします。アップロードできるファイルは一つずつ行います。
ファイルのリネーム、削除などもできますので、いろいろ試してみましょう。

アップロードできたらRUNボタンを押せばプロジェクトがビルドされて実行されます。

f:id:atkoide:20160913144145p:plain

STOPボタンを押せば停止します。
実際にパッチを作ってみるとわかりますが、ブラウザID経由のファイル転送は案外面倒です。パソコン側でターミナルで、

$ scp _main.pd root@192.168.7.2:/root/Bela/projects/TestPd

(ファイル個別で転送する場合:例では_main.pdというファイル)

$ scp * root@192.168.7.2:/root/Bela/projects/TestPd

(フォルダ内のファイルを全て転送する場合)

という感じで転送すれば、ブラウザIDE側でページを再読み込みする必要はあるものの手間は減ると思います。(Macだとscpコマンドは標準で使えるはずですが、Windowsの場合は、Git for Windows やCygwinシェル等を導入すれば使えるようです。)

 

2-4. アナログ/デジタルポートを試す

詳細な方法は、公式のドキュメント(https://github.com/BelaPlatform/Bela/wiki/Running-Puredata-patches-on-Bela)やIDEにあるサンプルに譲ります。
Pure Dataでの値の送受信の仕方はシンプルですが、ポイントとしては、

  • アナログポートは、オーディオポートと同じシグナル扱い。
  • Pure Data内でのチャンネル番号の割り振りは、オーディオ、アナログ、デジタルを通して連番という扱い。
  • アナログ・チャンネルの27〜30のアウトはScope出力用。ScopeはIDEから開くオシロスコープ的な機能。デバッグで利用できます。
  • デジタルポートは、メッセージ・レート/シグナル・レートで使うか、イン/アウトで使うかを決める初期化手続きが必要。
  • デジタル・ポートのメッセージ・レートは、値が変わった時のみ値が返ってきます。シグナル・レートは、値にかかわらずオーディオのレートで値が返ってきます。
  • アナログ/デジタルポートのレートのシグナル・レートは、オーディオのレートより低い場合でもPure Data内部でオーディオのレートに変換されて扱われる

といったところでしょうか。

試しにアナログのポートを試してみましょう。
回路側の接続図は、サンプルにある、
https://github.com/BelaPlatform/bela/wiki/Images/EXAMPLES/03-Analog_analog-input_bb.png
を利用します。
これに対応するパッチを作成しました。

f:id:atkoide:20160913144252p:plain

アナログ入力の値をターミナルに出力するだけのものです。ターミナルの出力はIDE上で確認できます。可変抵抗のツマミを動かすとターミナルに値が出力されていきます。(このパッチでは200msおきにサンプリングするようにしています)

仕様上、アナログの値は 0〜1 のはずですが、実際には電源電圧の影響等で規定通りの値が出ません。特に最大値は理論通りに出ませんし、ツマミを途中で止めても値は少しゆらぎます。実際にアナログ値を取り扱う場合は、補正をかける等の工夫が必要になるかもしれません。僕の環境だと、最小値はほぼゼロとして扱えそうですが、最大値は0.826くらいでした。今回試してませんが、出力においても同等に最大の1にしても5Vは出ないと思います。

デジタルポートについても出力のON/OFFで、5V/0Vとはならないと思いますので利用する場合は留意しておく必要があります。入力は正しくON/OFFで返ってきます。

 

2-5. シンセパッチの改造

いよいよシンセをいじってみます。ターゲットは、

Code Examples > 10-Instruments > midi-poly-synth

です。ます動作を確認してみましょう。
4ボイスのシンプルなアナログ風シンセです。MIDI CCでパラメータを変更できます。パラメータがやや特殊な感じですが、それなりな音の変化が楽しめます。
今回の改造は、パラメータを使わずアナログポートを利用してノブでコントロールできるようにし、デジタルポートを使って簡単に音出しできるようにします。MIDI機器を接続せずともこのパッチを使えるようにしようというわけです。

 

動作を確認したらこのプロジェクトをダウンロードします。
RUNボタンの右側あたりの下矢印のボタンを押すとプロジェクトをZIPファイルでダウンロードできます。

f:id:atkoide:20160913144336p:plain

 このシンセをコントロールするため、次のような回路をブレッドボードで組みました。

f:id:atkoide:20160913144449p:plain

 タクトスイッチのところのピンクの線は、1kΩの抵抗をあらわしています。可変抵抗は、10kΩです。

いろいろな実験にも使えるように、汎用的なMIDIコントローラをイメージしています。可変抵抗はMIDI コントロール・チェンジ的な扱い。タクトスイッチは、今回は、鍵盤代わりに使えるようにします。(デジタルチャンネルを0から使っていないのは、手持ちのジャンパワイヤの長さが足りなかったためで、深い意図はありません)

 実際に組み上げた写真がこちら。

f:id:atkoide:20160913144514j:plain

なかなかそれっぽい感じになりました。
可変抵抗は、操作しやすいようにノブ付きのものにしました。ボードに多少余裕があるので、もう少し工夫すれば、タクトスイッチは8個くらいおけるかもしれません。ジャンパワイヤを撚っているのは、似たような配線が多くわかりにくくなったり、絡まりやすくなるのを防ぐためです。

 

Pure Dataのパッチ側の改造は、_main.pdに入れました。

f:id:atkoide:20160913144553p:plain

 元のパッチを活かして機能を追加する形で手を入れています。ですので、MIDIデバイスを接続すれば今までのように利用することもできます。

デジタルチャンネルは、MIDIノートを送信しています。ノート番号60から半音ごと送信しています(タクトスイッチの数が少ないので和音にしたほうが面白いかもしれません)。タクトスイッチを押したらノートオン、離したらノートオフです。

アナログの可変抵抗のところが少しややこしいくなっていますが、MIDIコントロール・チェンジに合うようにマッピングしています。直接内部的な値として利用したほうがシンプルかつ解像度が高いのですが、アナログチャンネルはそのままだとオーディオのレートで常に信号が出続けており、またノイズの影響などで微妙に値が揺れるので、常にパラメータを動かしているのと同じことになってしまいます。これは少し気持ち悪いので、あえてMIDI解像度くらいまで落としこみ、同じ値が連続して出続けないようにしました。(元のパッチにあまり手を入れないようにしたかったという意図もあります。)どちらの方法でもCPU負荷的にはそれほど影響はないと思います。このあたりは目的に応じて使い分けるのがよいかもしれません。

 

2-6. 改造したパッチを動かしてみる

サンプルとは別にPure Data用のプロジェクトを作成し、そこに一連のファイルをアップロードします。その後、RUNボタンを押せばビルド後に実行されます。

MIDIキーボードを接続せずともタクトスイッチを押せば音が出ます。同時に押せば和音も出せます。可変抵抗を回せばパラメータが変わります。
ブレッドボード上だけで操作できるので、自作シンセ的な感じになって楽しいです。

致命的なエラーがあれば、何かしらエラーメッセージが表示されるはずですが、ちょっっとしたミスなどはエラーになりませんので、デバッグが少し面倒かもしれません。機能ごとに分けてBelaで確認していったり、[Print]オブジェクト等でターミナル出力させたり、Scope出力させたりといった工夫は必要だと思います。

 

このパッチを動かすとCPU負荷は40% くらいでした。もう少し本格的なシンセに改造するような余裕はありそうです。



3. さいごに

当初はなぜ今さらBeaglebone Blackなのか...とそれほど期待はしていなかったのですが、実際に使ってみると組み込み的で楽しいですね。とくにPure Dataは非プログラマな僕でも使えるので手軽に自分だけのハード(楽器)が作れそうです。すでにいくつかアイディアが思いついているので、何かできたら公開したいと思います。

 

マシンパワーもBeaglebone Blackだと厳しいかなと思ったのですが、OSの負荷は小さいですし、単体のアプリケーションを動かすという前提であり、CPU等のリソースはそこで消費されると考えると、工夫しながら楽しめる余地は充分ありそうです。

 

音楽系の何かを自分で作ってみたい/やってみたいというのであれば、選択肢としては良いと思いますし、専用プラットフォームだけあってRaspberry Piよりはお勧めかも知れません。

 

いまのところ開発も活発ですし、一般販売も近いそうなので、もっと盛り上がりを見せるかもしれません。また追加の拡張ボードもリリースされるようで、これも楽しみです。

 

Author

コイデマサヒロ

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

スポンサーリンク