Skip to content

第5回 信号処理・音源ファイル処理

今回のゴール

音源ファイルの操作方法を学び、micro:bitのセンサで音を操れるようになることを目指します。

具体的には、以下の内容を扱います。

  • 音源ファイルの再生・停止・ループ再生
  • ピッチシフト・タイムストレッチ
  • フェードイン・フェードアウト・クロスフェード
  • 録音

音源ファイルの再生・停止・ループ再生

Pdでは、else/play.file~ オブジェクトを使って音源ファイルを再生できます。WAVやAIFFなどの音声ファイルを読み込んで、再生・停止・ループ再生を制御することができます。

使い方

  1. else/play.file~ オブジェクトを作成します
  2. 音源ファイルを Pdパッチと同じディレクトリ に配置します
  3. メッセージオブジェクトを使って、以下のコマンドを送ります

基本コマンド

メッセージ動作
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~音声信号をファイルに録音する

手順

  1. adc~ でマイクからの音声信号を取得します
  2. else/rec.file~ に接続します
  3. open ファイル名 メッセージでファイル名を指定します
  4. start メッセージで録音を開始します
  5. 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 を順に送ります
  • 録音と再生で同じファイル名を使うようにしましょう