第5回 信号処理・音源ファイル処理
今回のゴール
音源ファイルの操作方法を学び、micro:bitのセンサで音を操れるようになることを目指します。
具体的には、以下の内容を扱います。
- 音源ファイルの再生・停止・ループ再生
- ピッチシフト・タイムストレッチ
- フェードイン・フェードアウト・クロスフェード
- 録音
音源ファイルの再生・停止・ループ再生
Pdでは、else/play.file~ オブジェクトを使って音源ファイルを再生できます。WAVやAIFFなどの音声ファイルを読み込んで、再生・停止・ループ再生を制御することができます。
使い方
else/play.file~オブジェクトを作成します- 音源ファイルを Pdパッチと同じディレクトリ に配置します
- メッセージオブジェクトを使って、以下のコマンドを送ります
基本コマンド
| メッセージ | 動作 |
|---|---|
open ファイル名 | 音源ファイルを開く |
start | 再生を開始する |
stop | 再生を停止する |
loop 1 | ループ再生を有効にする |
loop 0 | ループ再生を無効にする |
注意
音源ファイルは必ずPdパッチと同じフォルダに置いてください。別のフォルダに置くと、ファイルが見つからずエラーになります。
パッチの例

start メッセージを送ると再生が始まり、stop で停止します。loop 1 を送ってから start すると、音源が繰り返し再生されます。
ピッチシフト・タイムストレッチ
else/stretch.shift~ オブジェクトを使うと、音源のピッチ(音の高さ)やテンポ(再生速度)をリアルタイムに変更できます。
インレットの説明
else/stretch.shift~ には複数のインレットがあり、それぞれ異なるパラメータを制御します。
| インレット | パラメータ | 説明 |
|---|---|---|
| 第1インレット | バッファサイズ | 処理に使用するバッファの大きさ |
| 第2インレット | ピッチ | 音の高さの変更量(セント単位) |
| 第3インレット | テンポ | 再生速度(パーセント) |
ピッチの設定
ピッチはセント単位で指定します。
- 0 : 元の高さ(変化なし)
- 1200 : 1オクターブ上
- -1200 : 1オクターブ下
- 700 : 完全5度上
ピッチの目安
100セント = 半音1つ分です。1200セント = 12半音 = 1オクターブとなります。
テンポの設定
テンポはパーセントで指定します。
- 100 : 元の速さ(変化なし)
- 200 : 2倍速
- 50 : 半分の速さ
パッチの例

フェードイン・フェードアウト・クロスフェード
複数の音源を滑らかに切り替えたり、音量を徐々に変化させるには、フェード系のオブジェクトを使います。
使用するオブジェクト
| オブジェクト | 機能 |
|---|---|
else/xselect~ | 複数の入力から1つを選択して出力する |
else/xfade~ | 2つの音源をクロスフェードする |
else/xgate~ | ゲートの開閉で音を通す・止める |
クロスフェードの仕組み
クロスフェードとは、ある音源の音量を徐々に下げながら、別の音源の音量を徐々に上げることで、滑らかに音を切り替える技法です。
else/xfade~ を使うと、0から1の値で2つの音源の混合比率を制御できます。
- 0 : 入力1のみが聞こえる
- 0.5 : 入力1と入力2が同じ音量で混ざる
- 1 : 入力2のみが聞こえる
パッチの例

録音
Pdでは、マイクからの入力を録音してファイルに保存することもできます。
使用するオブジェクト
| オブジェクト | 機能 |
|---|---|
adc~ | オーディオ入力(マイク)からの信号を受け取る |
else/rec.file~ | 音声信号をファイルに録音する |
手順
adc~でマイクからの音声信号を取得しますelse/rec.file~に接続しますopen ファイル名メッセージでファイル名を指定しますstartメッセージで録音を開始しますstopメッセージで録音を停止します
ファイルの保存場所
録音されたファイルは、Pdパッチの保存場所と同じディレクトリに保存されます。パッチを保存していない場合、ファイルの保存場所が不定になるので注意してください。
パッチの例

練習問題
以下の練習問題に取り組んでみましょう。前回までに学んだmicro:bitとの連携を活用します。
練習1: ドラムループの再生・停止
micro:bitのAボタンとBボタンを使って、ドラムループの再生と停止を制御するパッチを作成してください。
ヒント
else/play.file~を使ってドラムループ音源を読み込みます- micro:bitのAボタン(ボタンの値が変化したとき)で
startメッセージを送ります - micro:bitのBボタンで
stopメッセージを送ります loop 1を設定しておくと、ループ再生になりますselectオブジェクトを使ってボタンの値に応じてメッセージを切り替えましょう
練習2: 傾きでテンポ変化
練習1のパッチに、micro:bitの傾き(加速度センサ)でテンポが変化する機能を追加してください。
ヒント
else/stretch.shift~を使って再生速度を制御します- micro:bitの傾きの値を、テンポのパーセント値(例: 50〜200)に
scaleなどでマッピングします - 傾きの値の範囲を確認してから、適切な範囲に変換しましょう
練習3: 明るさセンサでクロスフェード
明るさセンサの値に応じて、以下のように音源を切り替えるパッチを作成してください。
| 明るさセンサの値 | 動作 |
|---|---|
| 70以上 | 停止(音が鳴らない) |
| 30〜70 | 音源1を再生 |
| 30未満 | 音源2を再生 |
ヒント
else/xfade~またはelse/xselect~を使ってクロスフェードを実現します- 明るさセンサの値を
mosesオブジェクトなどで分岐させます - 値の範囲に応じて、クロスフェードのパラメータ(0〜1)にマッピングします
- 70以上のときは
else/xgate~などで音を止める方法もあります
練習4: 明るさセンサで録音、Aボタンで再生
明るさセンサの値で録音の開始・停止を制御し、Aボタンで録音した音を再生するパッチを作成してください。
ヒント
adc~とelse/rec.file~で録音機能を作ります- 明るさセンサの値が一定以下になったら
start、一定以上になったらstopを送ります else/play.file~で録音したファイルを再生します- Aボタンが押されたら
open ファイル名とstartを順に送ります - 録音と再生で同じファイル名を使うようにしましょう