Pure Data ( Pd ) は、1990年代にミラー・パケットによって開発された、インタラクティブなコンピュータ音楽やマルチメディア作品を作成するためのビジュアルプログラミング言語です。パケットがプログラムの主要開発者ですが、Pd は多くの開発者が新しい拡張機能の開発に取り組むオープンソースプロジェクトです。BSD - 3-Clauseライセンスでリリースされています。Linux 、macOS、iOS、Android、Windowsで動作します。FreeBSDとIRIX用の移植版も存在します。
Pd は、 IRCAMに在籍していた Puckette 氏が開発したオリジナルのMaxプログラムと範囲と設計が非常に似ており、Max 言語の商用後継である Max/MSP とある程度相互運用可能です。これらはまとめて Patcher [ 2 ]言語ファミリーのメンバーとして議論されることがあります。
Graphics Environment for Multimedia (GEM) 外部モジュール、およびそれと連携するように設計された外部モジュール ( Linux、Mac OS X用のPure Data Packet / PiDiPなど)、Windows 用のframestein 、 GridFlow (n 次元行列処理として、Linux、Mac OS X 、Windows 用) を追加することで、ビデオ、 OpenGLグラフィックス、画像などをリアルタイムで作成および操作することが可能になり、オーディオ、外部センサーなどとのインタラクティブ性も大幅に向上します。
Pdは、ネットワークやインターネットを介したリアルタイムコラボレーションを可能にするように設計されており、LANで接続されたミュージシャンや、世界各地にいるミュージシャンがリアルタイムで一緒に音楽を制作できます。PdはネットワークプロトコルとしてFUDIを使用しています。
Pure DataとMaxはどちらもデータフロープログラミング言語の例です。データフロー言語は、操作間で流れるデータの有向グラフとしてプログラムをモデル化します。Pure DataとMaxでは、関数または「オブジェクト」が、制御とオーディオの流れをモデル化するグラフィカル環境でリンクまたは「パッチ」されます。ただし、Maxのオリジナルバージョンとは異なり、Pdは常に、サウンド合成と信号処理をデジタル信号プロセッサ(DSP)ボード(Max/FTSで使用されたAriel ISPWなど)にオフロードするのではなく、ホストの中央処理装置(CPU)で制御レートとオーディオ処理を実行するように設計されていました。Pdコードは、ソフトウェアオーディオ処理を行うためのDavid ZicarelliによるMax言語のMSP拡張機能の基礎となっています。 [ 3 ]
Maxと同様に、Pdは外部オブジェクトまたはモジュール化されたコードベースを持ち、これらはソフトウェアで記述されたプログラムの構成要素として使用されます。これにより、公開APIを介してプログラムを任意に拡張でき、開発者はC言語で独自の制御ルーチンやオーディオルーチンを追加したり、他の外部オブジェクトの助けを借りてPython、Scheme、Lua、Tclなど多くの言語で追加したりすることができます。しかし、Pdはプログラミング言語でもあります。Pdでネイティブに記述されたモジュール化された再利用可能なコード単位は、「パッチ」または「抽象化」と呼ばれ、スタンドアロンプログラムとして使用され、Pdユーザーコミュニティ間で自由に共有されます。Pdを効果的に使用するために、他のプログラミングスキルは必要ありません。

Maxと同様に、Pdはデータフロープログラミング言語です。ほとんどのDSPソフトウェアと同様に、データの伝送速度には主に2つの種類があります。1つはサンプル(オーディオ)レートで、通常は毎秒44,100サンプル、もう1つは制御レートで、64サンプルごとに1ブロックです。制御メッセージとオーディオ信号は、一般的に、入力と出力で接続された「オブジェクト」間を画面上部から下部へと流れます。
Pd は、メッセージ、オブジェクト、アトム、コメントという 4 つの基本的なテキストエンティティをサポートしています。アトムは Pd における最も基本的なデータ単位であり、浮動小数点数、シンボル、またはデータ構造へのポインタのいずれかで構成されます (Pd では、すべての数値は 32 ビット浮動小数点数として格納されます)。メッセージは 1 つ以上のアトムで構成され、オブジェクトに指示を与えます。イベントを開始し、データフローにデータを送り込むために、ボタンを押すのと同様に、内容が null の特殊なタイプのメッセージであるbangが使用されます。
Pd のネイティブオブジェクトは、多くのプログラミング言語に見られる基本的な数学演算子、論理演算子、ビット演算子から、ウェーブテーブル発振器、高速フーリエ変換(fft~)、さまざまな標準フィルタなどの汎用および特殊なオーディオレート DSP 関数 (チルダ (~) 記号で指定) まで多岐にわたります。データはファイルからロードしたり、オーディオボード、 MIDI、FireWire、USB 、またはネットワーク接続を介したOpen Sound Control (OSC)から読み込んだり、オンザフライで生成してテーブルに保存したりできます。保存されたデータは、後で読み戻してオーディオ信号または制御データとして使用できます。
Pdが前バージョンに比べて大きく進化した点の1つは、グラフィカルデータ構造の導入です。これは、楽譜の作成、イベントのシーケンス化、Pdパッチに付随するビジュアルの作成、さらにはPdのGUIの拡張など、さまざまな用途に利用できます。
Pdの名にふさわしく、データ構造によってPdユーザーは、音楽データの任意の複雑な静的表現だけでなく、動的またはアニメーション化されたグラフィカル表現も作成できます。C言語の構造体と同様に、Pdの構造体は、浮動小数点数、シンボル、配列データの任意の組み合わせで構成され、データ構造の視覚的な外観を記述するためのパラメータとして使用したり、逆にPdパッチ内のメッセージやオーディオ信号を制御したりすることができます。Puckette氏の言葉を借りれば、次のようになります。
Pdは、データ構造とそのグラフィカルな外観を記述するための、極めて非構造的な環境を提供するように設計されています。その根底にある考え方は、ユーザーが表示したいあらゆる種類のデータを、表示方法に応じて自由に関連付けられるようにすることです。これを実現するために、Pdはグラフィカルなデータ構造を導入しています。これはC言語のデータ構造に似ていますが、データに形状や色を付加できる機能を備えているため、ユーザーはデータを視覚化したり編集したりできます。データ自体は、ゼロから編集することも、ファイルからインポートすることも、アルゴリズムで生成することも、入力される音声やその他のデータストリームの分析から導き出すことも可能です。
—ミラー・パケット[ 4 ]

Pdは強力な言語ではありますが、オブジェクト指向の概念の実装にはいくつかの制限があります。[ 5 ]例えば、コンストラクタ関数がないため、オブジェクトの大きなリストをインスタンス化して操作(生成など)することが不可能なため、大規模並列プロセスを作成することは非常に困難です。さらに、パッチインスタンスIDを渡すのは余分な手順であり、場合によっては実行が難しいため、Pdの配列やその他のエンティティは名前空間の衝突の影響を受けやすいです。
Pure Dataは、プロトタイピング言語やサウンドエンジンとして、数多くのプロジェクトの基盤として使用されてきました。Reactable [ 6 ] と呼ばれるテーブルインターフェースと、開発が中止されたiPhoneアプリRjDjは、どちらもサウンドエンジンとしてPdを組み込んでいます。
Pdは、多くのオーディオデザイナーによってビデオゲームのオーディオのプロトタイプ作成に使用されてきました。たとえば、EAPdはエレクトロニック・アーツ(EA)で使用されているPdの内部バージョンです。EA Sporeにも組み込まれています。[ 7 ]
Pdは、ネットワーク化されたパフォーマンスにも使用されており、共同即興演奏のためのネットワークリソース(NRCI)ライブラリにも含まれています。[ 8 ]
