Pure Data によるサウンドプログラミング

Pure Data というビジュアルサウンドプログラミング言語を試してみました。

サウンドデザインの代表的な専門書の「Designing Sound」[1]で使用されていたプログラミング言語でしたので、試しに使ってみました。

¥10,194 (2026/04/20 01:27時点 | Amazon調べ)

Pure Dataとは

Pure Dataは以下のようなシンプルなUIのビジュアルサウンドプログラミング言語になります。

図:Pure Dataのプログラミング
図:Pure Dataのプログラミング

オシレーター・フィルター・アンプなどをGUIで実装できて、各ブロックの結線も簡単に行うことができます。

1996年からMiller Pucketteによって開発されて、最近(2024年)でもツールのアップデートが行われています。

インストール方法

Pure Dataは以下のサイトからインストールできます。

最新版ダウンロードをクリックします。

図:インストーラーのダウンロード画面1
図:インストーラーのダウンロード画面1

「Get Pure Data for Windows64」をクリックすると、インストーラーを入手できます。

図:インストーラーのダウンロード画面2
図:インストーラーのダウンロード画面2

あとはダウンロードしたインストーラーを実行すれば、Pure Dataをインストールできます。

Pure Dataを使ってみる

まず、Pure Data を開き、「ファイル」>「新規」を押します。

図:新規作成
図:新規作成

新しくウィンドウが表示されます。元からあったウィンドウ(左)がログ、新しく出てきたウィンドウ(右)がプログラムするところ(パッチウィンドウ)です。

図:新しいウィンドウ
図:新しいウィンドウ

とりあえず、「配置」>「オブジェクト」でオブジェクトを置いていきます。

図:オブジェクトの配置
図:オブジェクトの配置

オブジェクトを配置すると、点線の囲みの中に文字を入力できます。

図:オブジェクト
図:オブジェクト

「osc~ 440」と入力すると、オシレーター(正弦波生成器)を置けます。

図:オシレーターの配置
図:オシレーターの配置

同じように「dac~」を置いて、「osc~ 440」と「dac~」を結線します。

図:DACの配置
図:DACの配置

「メディア」>「DSP オン」をクリックすると、440Hz の正弦波の音が出るようになります。

図:DSP オン
図:DSP オン

結構簡単ですね。

オブジェクト

よく使いそうなオブジェクトについて説明します。

音源

はじめから用意されている音源のオブジェクトは以下です。

図:音源の種類
図:音源の種類

それぞれ「osc~」が正弦波、「noise~」がホワイトノイズ、「phasor~」がのこぎり波です。

オブジェクトの上部に付いている「入力ポート」のことをインレットと呼ぶのですが、「osc~」と「phasor~」は左上が周波数、右上で位相の開始位置を入力できます。「noise~」の左上は乱数のシードです。

四則演算

四則演算については以下のオブジェクトで行うことができます。

図:四則演算
図:四則演算

左上と右上に値を入力することで計算結果がオブジェクトの下から出力されます。

数学関数

連続波形の数学関数を計算するオブジェクトは以下となります。

図:数学関数
図:数学関数

「cos~」は三角関数、「log~」は対数関数、「pow~」は累乗、「exp~」は指数関数、「sqrt~」は平方根、「abs~」は絶対値、「max~」は最大値、「min~」は最小値です。

「cos~」については入力範囲は0~1であり、「sin~」や「tan~」はないことに注意が必要です。単発の数字を計算する場合は「sin」や「tan」などがあります。

「log~」の左インレットは入力値、右インレットが対数の底です。「pow~」の左インレットは底、右インレットが指数です。

「max~」については2つのインレットの大きい値を出力、「min~」は小さい値を出力します。

これ以外の数学関数を使用したい場合は「expr~」を使う必要があります。「expr~」の使い方は以下です。

図:「expr~」の使い方
図:「expr~」の使い方

「expr~」のとなりに計算式を書くことができて、これで「tan」の計算などもできます。インレットの入力値を使いたい場合は「$v1」や「$v2」と書きます($v2を書くとインレットが増える)。

フィルター

フィルターのオブジェクトは以下となります。

図:フィルター
図:フィルター

「lop~」はローパスフィルター、「hip~」はハイパスフィルター、「bp~」はバイパスフィルターです。

「lop~」と「hip~」の1番目のインレットは入力値、2番目のインレットがカットオフ周波数となります。「bp~」の一番目のインレットは入力値、2番目のインレットは中心周波数、3番目のインレットはQ値となります。

カットオフ周波数の初期値、中心周波数の初期値、Q値の初期値については引数で指定することもできます(インレットに値が入ると上書きされる)。

他の機能

GUIコントロール

Pure Dataにおいて Ctrl+E で「編集モード」と「実行モード」を切り替えることができます。「実行モード」のとき、以下のUIの操作子を操作できます。

図:GUIコントロール
図:GUIコントロール

「トグル」は0と1を出力、「ナンバーボックス」は入力した値を出力、「スライダ」はノブの位置の値を出力、「ラジオボタン」はボタンの位置に応じた値を出力(左から0~7)します。

「バン(bang)」は少し特別で、ボタンを押すとトリガ信号を出力します。オブジェクトによってはトリガ信号の入力で起動するものもあるので、そのときに使用します。

グラフ描画

グラフ描画については以下の構成で行うことができます。

図:グラフ描画
図:グラフ描画

「グラフ」を置いて、「配列」をグラフに入れれば描画準備ができます。「tabwrite~」の引数に配列名を記載して、インレットにトリガ信号を入力することでグラフ描画がされます。

グラフ描画を連続で行いたいので、「metro~」を使用して100ms に一回トリガ信号を出力するようにしています。

WAVファイルに書き出す

WAVファイルの書き出しを行う構成は以下です。

図:WAVファイルの書き込み
図:WAVファイルの書き込み

「バン(bang)」からトリガ信号を出力すると、「savepanel」で保存先のファイルパスを選択するダイアログが出ます。ファイルパスを選択後、「open」でそのファイルを開き、「writesf~ 2」でインレットに入力された2CHのオーディオデータをファイルに書き出します。

書き出しの開始と停止については、メッセージボックスという機能で「start」で開始、「stop」で停止できます。

自作オブジェクトの作成

自作オブジェクト(サブパッチ)で三角波を作りたい場合、以下のようにします。

図:サブパッチの作成
図:サブパッチの作成

サブパッチを使いたいオブジェクトに「pd <サブパッチ名>」と入力します。入力すると、別のウィンドウが開きますので、そこに処理を記載します。

サブパッチ内の処理の書き方は以下です。

図:サブパッチにおける処理の書き方
図:サブパッチにおける処理の書き方

「inlet」オブジェクトを作ると、インレットが1つ増えます。連続信号のインレットを作りたい場合は「inlet~」とします。「inlet」の引数に「freq」や「amp」と書かれていますが、ただのラベル(可読性のため)となっており、コード的に意味はないです。複数の「inlet」がある場合、左から順に親の1番目のインレット、2番目のインレット…となります。

引数を使いたい場合、「$1」や「$2」を記載すると、それが第1引数、第2引数となります。

「outlet~」オブジェクトでサブパッチの出力ができます。

Pure Data の調べ方

Pure Dataの調べ方は以下になると思います。

  • Pure Dataの本を参照する
  • Pure Dataの日本語サイトを見る
  • GhatGPT、Geminiに聞く
  • ヘルプでオブジェクトを調べる

参考文献[2]がPure Dataの初級者向けの本となっており、Pure Dataを始める場合は買っておいたほうが良いと思います。ただし、開発停止した Pd-extended の情報のため、現在使用できるPure Data Vanillaの情報と異なることに注意が必要です。

あとは日本語サイト(https://puredatajapan.info/)にチュートリアルがありますが、十分な情報はあまりないです。

一番おススメの方法はGhatGPT、Geminiに聞くことだと思います。使ってみた感じ、かなり正確な情報をくれます。ただ、オブジェクトの使い方が文章だとわかりにくいときがあります。

あとはオブジェクトの名称がわかっている場合、右クリック>「ヘルプ」でそのオブジェクトのインレットや引数の説明がありますので、これも参考になると思います。ただし、説明は英語になってます。

感想

Pure Dataを使った感想としてはシンプルで使いやすいという印象です。

ただ、いくつか痒い所に手が届かないところもありました。その箇所を以下にあげます。

  • ズームイン・アウトが使いづらい
  • Pure Dataの使い方がわかりづらい
  • 1つのインレットに複数のものを接続するときがあってわかりづらい
  • 現在、オーディオ ON にしているかわかりづらい

ズームイン・アウトが Ctrl+ホイール でできず、倍率もとびとびなので、結構使いづらいです。

使い方はやはりわかりづらいです。ネットに情報はなく、参考書もあまりないため、ChatGPTがなければ使わないと思います。

WAVファイルの書き出しのときのように、1つのインレットに信号と一緒にメッセージをいれることもあり、結構わかりづらい。

あとは、パッチウィンドウではオーディオのON/OFFがわからないため、結線したときに急に音がなったりして驚くことがあります。

おわりに

本記事ではビジュアルサウンドプログラミング言語である Pure Data を試してみました。若干使いづらいところはありますが、シンプルで良かったと思います。

Pythonでは複雑になる音源合成についてはPure Dataを使いたいかなと思います。

■参考文献
[1] A.Farnell,  Designing Sound,  MIT Press,  2010.
[2] 松村 誠一郎, 「Pd Recipe Book-Pure Dataではじめるサウンドプログラミング」,  ビー・エヌ・エヌ,  2022.

¥3,366 (2026/04/20 01:24時点 | Amazon調べ)