これまで、ゆるく関心を持ちつつも着手できていなかったものが、PureDataとユーロラックです。新年なので少し新しいこともしたい、ということで、ハードウェアはちょっと大変なのでPureDataを触ってみました。(記事にするのは今回が初めてですが、実は触ること自体はこれで何回目かになります。その都度中断してしまっていましたが。)
Pure Dataとは
Pure Dataはプログラミング言語の一種で、これを使って自分のオリジナルのシンセサイザを作ることができます。
PureData、通称pd、はPoor man’s MAXと言われることもある、MAXに似たオープンソースの音楽プログラミング環境です。(私はMAXを触ったことはありません。)pdは、MAXの真似とかいうことではなく、pdの作者は、IRCAMでMAXの原型となるPatcherというエディタを開発したミラー・パケット(Miller Smith Puckette)氏その人です。
プログラミング言語としては、pdはDataflow型言語の一種になります。「入力」と「出力」を持つモジュールをつなぎ合わせてデータを料理していき、最後にdacというモジュールに入力すると音が出ます。
下図はシンプルな例で、440Hzのサイン波をスピーカーから出力します。コンソールウインドウの「DSP」チェックボックスをオンにすると動作します。サウンドデバイスの割り当ては、MediaメニューのAudio Settings…から設定できます。(なお、モジュール名の後ろについている「~」は、そのモジュールが音声信号を扱うことを表します。)
マイクやWavファイルから音を取り込むこともできます。下記はマイクからの入力音声を1倍増幅してスピーカーから出力するものです。DSPチェックボックスをチェックするか、MediaメニューでDSPをONにすると、音声入出力が始まります。
Pure Dataのダウンロードとインストール
Pure Dataの公式サイトは下記です。各種プラットフォーム向けのバイナリがインストーラまたはzip形式でダウンロードできます。Pd-vanillaが大元のコードで、そこからの派生バージョンがありますが、現時点のお勧めはPd-vanillaです。
10年あまり前までは、PureDataはパケット氏が開発するコア部分と有志によるExtendedの両輪で開発が進められていました。当時の書籍やサイトでは、初心者にはExtendedをお勧めすることが多かったようです。しかし、現在はExtendedの更新は終了し、パケット氏が開発するPureData Vanillaにdekenというパッケージマネージャが組み込まれ、vanilla+拡張用のパッケージという形態で配布されています。
オープンソースですので、ソースコードも入手できます。GitHubのサイトはこちらです。
チュートリアルなど
日本語で読めるpdの書籍はいくつかあった(過去形)ようですが、現在入手可能なのは、下記の1番目のKindle版と下記2番目の版元からの通販のよう(2025/1/10追記:版元に確認したところ品切)です。私は1番目のKindle版を購入してみました。
Pd Recipe Book Pure Dataではじめるサウンドプログラミング 松村 誠一郎 (著)
「PureData」ではじめるサウンド・プログラミング: 「音」「映像」のための「ビジュアル・プログラミング」言語 (I/O BOOKS) – 2015/2/24中村 隆之 (著)
Pure Data -チュートリアル&リファレンス- – 2013/2/4美山千香士 (著)
グラフィカル言語PureDataによる音声処理: 信号発生から雑音除去まで簡単プログラミング – 2009/8/1中村 文隆 (著)
YouTube動画では、英語になりますが下記が良いと思います。PureDataの最低限の項目を紹介して、そのあとすぐシンセサイザの実装に進んでいるからです。あまり前置きが長いと飽きてしまいますよね。
他に、Interface誌で「Pure Dataではじめるサウンド信号処理(青木 直史,藍 圭介)」という連載が2015年12月号から2016年11月号まで1年間掲載されていましたが、書籍化はされていないようです。
Pure Dataを組み込み機器で動かす
PureDataが気になっていたのは、PureDataを組み込み機器で動作させている事例がいくつかあり、もしかしたらlogue SDK上で動かすことも可能ではないかと思っているからです。
組み込み機器で動かすには、
(1)Pure Dataのエンジン部分であるlibpdを組み込み向けにビルドしてファームウェアに組み込む
(2)Pure DataのパッチをCのコードにコンパイルし、そのCのコードをファームウェアに組み込む
という2つの手法が主なようです。
(1)の方法を採っている有名な製品はCritter&Guittariの「Organella」や「Pocket Piano」で、国内にも輸入販売されています。なかなかキュートな製品ですね。ハードウェアのメインコンポーネントはRaspberry Pi Compute Module IIIで、ArchLinuxが動作し、その上でlibpdを動作させているようです。
Organelleは、PureDataのコードを外部から与えて拡張することができるそうです。ちなみにOrganelleのファームウェアはGitHubで公開されていて、fw_dir/mother.pdというファイルがメインのPuraDataパッチになっています。これをPureDataで開くと以下のようになっています。
左側の箱はライブラリで、クリックするとさらに中を見ることができます。中身まできちんと見ていないのですが、かなりの部分がPureDataを使って実装されているようです。
(2)の方法を採っている製品としては、ElectroSmithのDaisyがあります。これはボードの形になっていて、MCUはSTM32H750です。このボードを組み込んだサードパーティ製品も出ているようです。ちなみに上のYouTubeのチュートリアルもElectroSmithの関係者の方によるもののようです。
実は以前、私もDaisy Podを購入したのですが、開発環境を整えたりする元気がなく、積みボードの1つとなっています。
この(2)の方法の場合は、PureDataのパッチをそのまま読み込ませることはできず、まずhvccというコンパイラを使ってPureDataのパッチをCに変換します。
当然、単体でビルドはできず、ハードウェアに合わせたライブラリとリンクしてビルドすることになります。逆にライブラリが用意できれば、ハードウェアはElectroSmithのもの以外でもよく、Teensy4.0で動作させている方もいるようです。
以上を踏まえてlogue SDKとの関連性は、ハードウェアの類似性から以下のように考えています。
drumlogueは(1)の方法が良さそうです。メモリの制約はあまり無いですし、処理能力の面でもなんとかなるのではないかと思います。
logue SDKのAPIとどのように接続すればよいのかは、Organelleの実機も調べたいところですが、Critter&Guittariの製品はお洒落ですけど調査用に買うにはちょっと高すぎるので、libpd移植の他の事例なども調べながら、かな・・・と思っています。
NTS-1 mkIIやNTS-3では、(2)の方法でPureDataパッチを動かせる可能性がありそうです。MPUはDaisyやTeensy4.0と同等なので、計算能力で不足することは無いでしょう。
ただ、NTS-1 mkII/NTS-3はオブジェクトサイズの制約が厳しいので、どの程度複雑なパッチが移植できるのかは、試してみないと何とも言えません。ここはDaisyやTeensyのようにファームウェアを丸ごと書き換えることができるプラットフォームとはだいぶ違います。
まあいずれにせよ、それなりに時間を食いそうな話ですので、今年中にどちらかが実現できたらいいなあ・・・くらいに思っています。
コメント