Pure Data

Pure Data（Pd）は、1990年代にミラー・パケット(Miller Puckette) が開発したデスクトップミュージックとマルチメディア作成用のビジュアルプログラミング言語である。Puckette が主に開発したが、Pd はオープンソースプロジェクトであり、多数の開発者が参加している。BSD License に似たライセンス条件でリリースされている。

**概要**
Pd はその対象領域も設計も Puckette が以前（IRCAM在籍時）に開発した Max に似ており、Max の商用の後継である Max/MSP とある程度相互運用が可能である。Pd も Max も典型的なデータフロープログラミング言語である。グラフィカルな環境で関数や「オブジェクト」が相互にリンクされ、制御フローや音響の流れを表す。Pd では音声処理などもホストCPU上で行われる。これは、Max/FTS においてDSPボード（Ariel ISPW）に信号処理や合成を任せていたのと対照的である。Pd のコードは David Zicarelli による Max の MSP 拡張（ソフトウェア音声処理）のベースとなった。
Max と同様、Pd はソフトウェアで部品として利用できるモジュールコードベース（外部および内部）を備えている。拡張可能なAPIを備え、C言語で書かれた部品を流用したり、他の外部部品を活用することでPython、Ruby、Schemeなどの言語で書かれたモジュールも活用できる。ただし、Pd 自身もプログラミング言語である。Pd で書かれた流用可能なコードは「パッチ」または「アブストラクション」と呼ばれ、フリーなプログラムとして流通している。また、他のプログラミング言語の知識が無くとも Pd の利用には何の問題もない。
外部リンクの節には Pure Data の様々な外部モジュールがリストアップされている。GEM（Graphical Environment for MultiMedia）は他の外部モジュール（Pure Data Packet、PiDiPi、Framestein、GridFlow）のベースとなっていると同時に、OpenGL画像や動画のリアルタイム操作を可能としている。
また、Pd はネットワークやインターネット上での共同作業が可能であり、リアルタイムで遠隔にいる人々が共同で音楽を作成するといった利用が可能である。
Pd はデジタル信号処理ソフトウェアとして、44100 サンプル毎秒のサンプリング周波数と64サンプル毎に1ブロックの制御レートを実現している（いずれも設定の変更が可能である）。制御メッセージや音声信号は一般に画面の上から下に繋がっているオブジェクト間を流れていく。
フリーウェアであるため無料で利用できるが、商用のMax/MSPと比較すれば処理速度・機能面・安定性では劣ると評価されている。日本では、作曲家の美山千香士がPdを広めた先駆者として知られている。

**言語機能**
Pd は、アトム、メッセージ、オブジェクト、コメントという4種類の基本テキストをサポートする。

**アトム**
アトムとは、 Pd における基本データ単位のことで、浮動小数点数かシンボルか他のデータ構造へのポインタのいずれかである。なお、Pd では全ての数値は 32ビットの浮動小数点数である。入力データは、ファイルから読み込んだり、FireWire、USB、ネットワークなどから OpenSound Control (OSC) 経由で何らかのオーディオボードやMIDIを読み込んだり、その場で生成したりする。結果をテーブルに保持して、それを新たな入力に使用することもできる。

**メッセージ**
メッセージとは、1つ以上のアトムから構成され、オブジェクトへの命令として働く。中身のない特別なメッセージを bang と呼び、データの流れを開始させるスタートボタンのような役目を持っている。

**オブジェクト**
Pd の基本オブジェクトは、算術演算、論理演算、ビット演算といった通常のプログラミング言語にある演算子のようなものから、波形発信器や高速フーリエ変換や各種デジタルフィルタなどの音声処理DSP機能に特化したもの（チルダ(~)が付いていて区別される）まである。

**データ構造**
Pd の特筆すべき機能は、データ構造を視覚的に表現できることである。これには様々な応用が考えられ、作曲やイベントの順序付けから、視覚的な作品を作ったり、Pd 自体のGUIを拡張したりできる。
Pure Data（純粋なデータ）の名の通り、Pd のデータ構造は音楽データを静止画としても動画としても表現できる。C言語の構造体のように Pd のデータ構造は様々なデータで構成でき、データ構造の視覚化をデータ構造でパラメータ指定することで制御したり、Pd のパッチ内でのメッセージや音声信号を制御したりできる。Puckette は以下のように記している。
Pd はデータ構造とそのグラフィカルな外観を記述するために全く構造化されていない環境を提供するよう設計されている。根底にある考え方は、ユーザーが任意のデータを任意の見せ方で表示できるようにすることである。このため、Pd では C言語などとは全く異なる、データに形や色を与える視覚的なデータ構造を導入し、ユーザーがデータを視覚的に編集できるようにした。データは内部で編集することも、ファイルから読み込むことも、アルゴリズムによって生成することも、入力音声やデータを解析することで作成することもできる。
:— Miller Puckette、 Pd Documentation Chapter 2 — 2.9. Data structures

**サンプルコード**
#パッチ1は"Hello world"を端末にプリントする。
#パッチ2は、入力チャンネル1からの信号にリバーブを適用し、出力チャンネル1と2に出力する。
#パッチ3の例はより複雑で、まず最初にホワイトノイズに9000ヘルツのバンドパスフィルターを掛け、続いて1秒間に0.5秒のフェードイン/フェードアウト(line~)が合成(*~)される。Pdでは、時間はミリ秒の単位で計測されるため、'1000'は1秒を表し、'500'は0.5秒を表す。

**脚注**

**関連項目**
 Max/MSP- reacTable- Jeskola Buzz

**参考文献**
 Danks, M. (1996). The graphics environment for max. In: Proceedings of the International Computer Music Conference, pp. 67-70. International Computer Music Association.- Danks, M. (1997). Real-time image and video processing in Gem. In: Proceedings of the International Computer Music Conference, pp. 220-223. International Computer Music Association.- Puckette, M. S. (1997). Pure data. In: Proceedings of the International Computer Music Conference, pp. 224-227. International Computer Music Association.- Puckette, M. S. (2004?-). The Theory and Technique of Electronic Music. オンライン版は こちら

**外部リンク**
 name=Pure Data — Pd Community Site 公式ウェブサイト-  Software by Miller Puckette — Pd の最新版、文書、ソースコード-  Pure Data Japan — Pure Dataの日本語ポータル、チュートリアル、フォーラム、リンク集など（日本語）- date=20190101000000 Pure Dataで作るソフトウェア・ラジオ（日本語）- date=20100417105602 アマチュア無線用パッチ等（日本語）-  Pure Data Oss4Art（日本語）-  PureDataLab（日本語）-  pddoc（日本語）-  Pure Data Portal-  PD Webring-  Pd forum-  rradical pd by Frank Barknecht-  RTC-lib — Karlheinz Essl の Pd 用 Real Time Composition Library-  Pure Data External Repository-  GEM — Graphics Environment for Multimedia（Pd 用プラグイン）-  netpd Pd-ベースのネットワーク接続リアルタイム共同作業環境-  GridFlow-  Pure Data Packet-  PiDiP Is Definitely In Pieces-  Framestein — Pure Data を使った静止画/動画処理ソフトウェア-  pure:dyne — Pure Data 環境を含む GNU/Linux liveCD-  Obiwannabes tutorials — Pure Data による音響設計のチュートリアル