第3回 Pure Data 基礎
Pure Data(Pd)の基本操作を学び、音を生成・加工する方法をマスターしましょう。
今回のゴール
- Pd の基本操作(オブジェクトの配置、接続)を身につける
- 正弦波を生成し、周波数・音量を制御できるようになる
- エンベロープ、フィルタ、ディレイなどの音響処理を理解する
- 練習問題を通じて、学んだ内容を定着させる
準備
Pd のインストール
前回の手順で Pd をインストール済みであることを確認してください。起動して Pd コンソールが表示されれば OK です。
ライブラリのインストール
この授業では cyclone と else という外部ライブラリを使います。以下の手順でインストールしてください。
- Pd を起動する
- メニューから ヘルプ(Mac の場合は Tools)→ external を探す(Find externals) を選択する
- 検索欄に
cycloneと入力して検索する - 検索結果から cyclone を選択する
- Install ボタンをクリックしてインストールする
- 同様に
elseを検索してインストールする
plugdata を使う場合
この授業で使用する plugdata には cyclone・else ともにあらかじめ組み込まれているため、上記のインストール作業は不要です。
インストール後の再起動(Pure Data を使う場合)
ライブラリをインストールしたら、Pd を一度終了して再起動してください。再起動しないとライブラリが読み込まれないことがあります。
Pd の基本操作
| 操作 | Windows | Mac |
|---|---|---|
| オブジェクトを配置 | Ctrl+1 | Cmd+1 |
| メッセージを配置 | Ctrl+2 | Cmd+2 |
| ナンバーボックスを配置 | Ctrl+3 | Cmd+3 |
| 編集モード切替 | Ctrl+E | Cmd+E |
| DSP オン/オフ | Ctrl+/ | Cmd+/ |
編集モードと実行モード
- 編集モード(カーソルが矢印): オブジェクトの配置・接続・移動ができる
- 実行モード(カーソルが指): スライダやナンバーボックスを操作できる
Ctrl+E(Cmd+E)で切り替えます
正弦波の生成
音の基本は 正弦波(サイン波) です。Pd で正弦波を生成してみましょう。
使用するオブジェクト
| オブジェクト | 機能 |
|---|---|
osc~ | 正弦波オシレータ。指定した周波数の正弦波を生成する |
output~ | Pd 標準の出力オブジェクト(音量スライダ付き) |
else/out~ | else ライブラリの出力オブジェクト(より高機能) |
~(チルダ)の意味
オブジェクト名の末尾に ~ が付いているものは シグナル(オーディオ信号) を扱うオブジェクトです。~ が付いていないものは 値(数値やメッセージ) を扱います。この区別は非常に重要です。
手順
- 新しいパッチを作成する(
Ctrl+N/Cmd+N) Ctrl+1(Cmd+1)でオブジェクトを配置し、osc~ 440と入力する- 同様に
output~を配置する(またはelse/out~) osc~の出力(下辺)からoutput~の入力(上辺)へ線を引く- DSP をオンにする(
Ctrl+//Cmd+/、またはコンソールの DSP チェックボックス) - 440 Hz の正弦波が聞こえれば成功

音量に注意
DSP をオンにする前に、PC のスピーカー音量を下げておきましょう。大きな音が突然出ることがあります。ヘッドホンを使用している場合は特に注意してください。
周波数のコントロール
正弦波の周波数(音の高さ)をリアルタイムに変更する方法を学びます。
方法1: メッセージで変更
- メッセージボックス(
Ctrl+2/Cmd+2)を配置する - メッセージに
440と入力する - もう1つメッセージを作り
880と入力する - それぞれのメッセージから
osc~の左インレット(入力)へ接続する - 実行モードに切り替え、メッセージをクリックすると周波数が変わる
方法2: ナンバーボックスで変更
- ナンバーボックス(
Ctrl+3/Cmd+3)を配置する osc~の左インレットに接続する- 実行モードでナンバーボックスをドラッグすると、値を連続的に変更できる
方法3: スライダで変更
- メニュー 配置 → Hスライダ(または Vスライダ)を選択する
- スライダを
osc~の左インレットに接続する - スライダの範囲を設定する:
- 編集モードでスライダを 右クリック → プロパティ を選択
- 下限(lower) を
100、上限(upper) を2000に設定する
- 実行モードでスライダを動かすと、100〜2000 Hz の範囲で周波数が変わる

MIDI ノートナンバーと周波数の変換
音楽では MIDI ノートナンバー を使って音程を指定することが一般的です。mtof オブジェクトで MIDI ノートナンバーを周波数(Hz)に変換できます。
| MIDI ノート | 音名 | 周波数 (Hz) |
|---|---|---|
| 60 | C4(中央のド) | 261.6 |
| 69 | A4(ラ) | 440.0 |
| 72 | C5(高いド) | 523.3 |
手順
- ナンバーボックスを配置する
mtofオブジェクトを配置する- ナンバーボックス →
mtof→osc~の順に接続する - ナンバーボックスに
69を入力すると 440 Hz(ラの音)が出る

ftom
逆に周波数から MIDI ノートナンバーに変換するには ftom を使います。
音量のコントロール
音量を制御するには、シグナルに数値を 掛け算 します。
使用するオブジェクト
| オブジェクト | 機能 |
|---|---|
*~ | シグナルの掛け算。音量調整に使う |
toggle | オン/オフスイッチ(0 と 1 を切り替え) |
方法1: トグルで音のオン/オフ
toggle(配置 → Toggle)を配置する*~オブジェクトを配置するosc~ 440→*~→output~と接続するtoggle→*~の右インレットに接続する- トグルをクリックすると音のオン/オフができる

方法2: メッセージで音量を指定
output~ や else/out~ はメッセージで音量を制御できます。
level $1スライダやナンバーボックスの値を $1 に代入して音量を変更できます。

音量・値の自動変化(エンベロープ)
音を自然に聞こえるようにするには、音量を時間的に変化させる エンベロープ が重要です。
line~ - 直線的な変化
line~ は、指定した時間で値を直線的に変化させます。
- メッセージ
1 1000: 1000 ミリ秒かけて値を 1 まで変化させる - メッセージ
0 500: 500 ミリ秒かけて値を 0 まで変化させる
vline~ - より正確な変化
vline~ は line~ より高精度なタイミングで動作します。
vline~ のメッセージ形式
vline~ では、カンマ , を使って複数の変化を1つのメッセージにまとめられます。
1 10, 0 1000 500この例は「10ms で 1 に上げ、500ms 後から 1000ms かけて 0 に下げる」という意味です。カンマの前後にスペースを入れることに注意してください。
delay - 遅延実行
delay オブジェクトは、指定したミリ秒後にバン(bang)を出力します。
delay 10001000 ミリ秒(1秒)後に bang を出力します。
エンベロープジェネレータ
else ライブラリには便利なエンベロープオブジェクトがあります。
| オブジェクト | 機能 |
|---|---|
else/asr~ | Attack-Sustain-Release エンベロープ |
else/adsr~ | Attack-Decay-Sustain-Release エンベロープ |
else/envgen~ | 自由にカーブを描けるエンベロープジェネレータ |
else/envgen~ は -curve オプションでカーブの形状を変えられます。



四則演算
Pd で数値の計算を行うオブジェクトです。
| オブジェクト | 機能 | 例 |
|---|---|---|
+ | 加算 | + 10 → 入力に 10 を加える |
- | 減算 | - 5 → 入力から 5 を引く |
* | 乗算 | * 2 → 入力を 2 倍にする |
/ | 除算 | / 3 → 入力を 3 で割る |
expr | 数式を記述 | expr $f1 * 2 + 100 |
* と *~ の違い
*(チルダなし): 値(数値)の掛け算*~(チルダあり): シグナル(オーディオ信号)の掛け算
値とシグナルは別物です。混同しないように注意しましょう。
expr を使うと、複雑な数式を1つのオブジェクトで書けます。$f1 は1番目の入力(float)を表します。


センド/レシーブ
パッチが複雑になると、線が多くなって見にくくなります。センド(s) と レシーブ(r) を使うと、線を引かずにデータを送受信できます。
使い方
s freqオブジェクトを配置する(送信側)r freqオブジェクトを配置する(受信側)- 同じ名前(この例では
freq)で対応する
ナンバーボックスから直接送信
ナンバーボックスのプロパティから直接センドできます。
- 編集モードでナンバーボックスを 右クリック → プロパティ を選択
- 「シンボルを送る(Send symbol)」 に名前を入力する(例:
freq) - これで、ナンバーボックスの値が変わるたびに
r freqに値が送られる

ワイヤレス接続
センド/レシーブを使うと、パッチを整理しやすくなります。特に大きなパッチでは積極的に活用しましょう。
和音の生成
複数の osc~ を使って和音を鳴らしてみましょう。
手順
- 3つの
osc~を配置する(例:osc~ 261,osc~ 329,osc~ 392)- C4(ド)、E4(ミ)、G4(ソ)の和音(Cメジャー)
- 3つの音を
+~で混合する *~ 0.3で音量を下げる(3音混ぜると大きくなるため)output~に接続する

加算合成
加算合成 は、複数の正弦波を重ね合わせて複雑な音色を作る技法です。基本周波数の 倍音(整数倍の周波数)を加えると、さまざまな楽器の音色に近づけられます。
倍音列
| 倍音 | 周波数(基本周波数 = 440 Hz) |
|---|---|
| 第1倍音(基音) | 440 Hz |
| 第2倍音 | 880 Hz |
| 第3倍音 | 1320 Hz |
| 第4倍音 | 1760 Hz |
各倍音の 音量比 を変えることで、異なる音色が作れます。

その他のオシレータ
正弦波以外の波形を生成するオシレータも用意されています。
| オブジェクト | 波形 | 特徴 |
|---|---|---|
osc~ | 正弦波(サイン波) | 最も基本的な波形。柔らかい音 |
phasor~ | のこぎり波 | 明るく豊かな倍音を含む |
noise~ | ホワイトノイズ | すべての周波数を含むランダムな信号 |
else/tri~ | 三角波 | 正弦波に近いが、奇数倍音を含む |
else/square~ | 矩形波 | 中空的な音。奇数倍音が強い |


波形と音色の関係
音色の違いは 倍音の構成 で決まります。さまざまな波形を聞き比べて、音色の違いを体感してみましょう。
ディレイ(遅延効果)
ディレイは音を遅らせて繰り返す効果で、エコーやリバーブのような空間的な広がりを作れます。
使用するオブジェクト
| オブジェクト | 機能 |
|---|---|
delwrite~ | ディレイバッファに書き込む |
delread~ | ディレイバッファから読み出す |
cyclone/delay~ | シンプルなディレイ |
else/delay.m~ | else ライブラリのディレイ |
基本的な使い方
delwrite~ $0-delay 1000を配置する(1000ms のバッファを作成)delread~ $0-delay 500を配置する(500ms 遅れた音を読み出す)- 原音と遅延音を
+~でミックスする
$0-delay の意味
$0 はパッチごとに固有の番号に置き換えられます。これにより、同じパッチを複数開いてもバッファ名が衝突しません。$0-delay は「このパッチ専用の delay という名前のバッファ」という意味です。

シグナルと値の変換
Pd には シグナル(オーディオ信号、太い線)と 値(数値やメッセージ、細い線)の2種類のデータがあります。これらを相互に変換する必要がある場面があります。
シグナル → 値
| オブジェクト | 機能 |
|---|---|
snapshot~ | シグナルの現在の値を取得(metro と組み合わせて使う) |
else/s2f~ | シグナルを値に変換(else ライブラリ) |
else/numbox~ | シグナルの値を表示するナンバーボックス |
snapshot~ は metro(メトロノーム)と組み合わせて使います。metro 100 は 100ms ごとに bang を出力し、そのタイミングでシグナルの値を取得します。
値 → シグナル
| オブジェクト | 機能 |
|---|---|
sig~ | 値をシグナルに変換 |
else/f2s~ | 値をシグナルに変換(else ライブラリ) |
DSP をオンにする
シグナル関連のオブジェクトは DSP がオン でないと動作しません。値が表示されない・変化しない場合は、まず DSP がオンになっているか確認してください。


フィルタ
フィルタは特定の周波数帯域を強調したり、削ったりするオブジェクトです。
基本フィルタ
| オブジェクト | 種類 | 機能 |
|---|---|---|
lop~ | ローパスフィルタ | 指定周波数より 低い 音を通す |
hip~ | ハイパスフィルタ | 指定周波数より 高い 音を通す |
bp~ | バンドパスフィルタ | 指定周波数の 周辺だけ を通す |
使い方
noise~ → lop~ 1000 → output~この例では、ノイズから 1000 Hz 以下の成分だけを取り出します(こもった音になる)。
フィルタと vline~ の注意
lop~ は右インレットに vline~ を接続してカットオフ周波数を滑らかに変化させることができますが、hip~ と bp~ は右インレットに vline~ を直接接続できません。代わりに sig~ で値をシグナルに変換してから接続してください。
値とシグナルの線の違い
パッチを接続するとき、細い線(値)と 太い線(シグナル)の違いに注目してください。シグナルオブジェクト同士はシグナル(太い線)で接続されます。値のオブジェクトとシグナルのオブジェクトを混在させると、思った通りに動かないことがあります。



練習問題
以下の練習問題に挑戦してみましょう。ここまで学んだオブジェクトを組み合わせて作ってください。
問題1: 1000 Hz の正弦波を出力
1000 Hz の正弦波を output~ から出力するパッチを作ってください。
ヒント
osc~ 1000 と output~ を接続するだけです。
問題2: 2つのメッセージで周波数を切り替え
2つのメッセージボックス(500 と 1000)を作り、クリックで osc~ の周波数を 500 Hz と 1000 Hz に切り替えられるパッチを作ってください。
ヒント
メッセージボックスを2つ作り、それぞれ osc~ の左インレットに接続します。
問題3: ボタンで1秒間だけ音を鳴らす
bang(ボタン)をクリックすると、1000 Hz の正弦波が 1秒間だけ 鳴って自動的に止まるパッチを作ってください。
ヒント
vline~ を使って音量を制御します。bang → メッセージ 1 10, 0 10 990 → vline~ → *~ のように接続します。10ms でフェードイン、990ms 後に 10ms でフェードアウトします。
問題4: フェードインして1秒後に停止
bang をクリックすると、0 から徐々に音量が上がり(フェードイン)、1秒後に音が止まるパッチを作ってください。
ヒント
vline~ のメッセージで 1 500, 0 10 1000 のように記述すると、500ms かけてフェードインし、1000ms 後から 10ms でフェードアウトします。
問題5: エコーを追加
問題3のパッチに、0.5 秒後にエコー(繰り返し音)がかかるように delwrite~ と delread~ を追加してください。
ヒント
delwrite~ $0-echo 1000 で1秒分のバッファを作り、delread~ $0-echo 500 で 500ms 遅れた音を読み出します。遅延音の音量を *~ 0.5 で半分にして原音と混ぜると自然なエコーになります。
問題6:【発展】放送チャイム(ピンポンパンポーン)
「ピンポンパンポーン」のようなチャイム音を作ってみましょう。
ヒント
4つの音を順番に鳴らします。例えば:
- ピン: G5(784 Hz)
- ポン: E5(659 Hz)
- パン: C5(523 Hz)
- ポーン: G4(392 Hz、長め)
delay オブジェクトで各音のタイミングをずらし、それぞれの音に vline~ でエンベロープをかけると、チャイムらしくなります。最後の音は長めに鳴らしましょう。