Skip to content

第6回 自動演奏

今回のゴール

テキストデータやGUIを使った自動演奏の仕組みを学びます。

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

  • テキストデータを使った自動出力
  • テキスト出力による音源ファイルの自動再生
  • GUIによる打ち込み(リズムマシン)
  • MIDIを介したDAW連携の概要

テキストデータの自動出力

Pdでは、テキストデータを使って任意のタイミングでメッセージを順番に出力することができます。これにより、あらかじめ用意したデータに基づいて音を自動的に鳴らすことが可能になります。

使用するオブジェクト

オブジェクト機能
text defineテキストデータを定義・保持する
text sequenceテキストデータを順番に出力する

テキストデータのフォーマット

各行は「宛先(送り先)」と「送るテキスト」の組で書き、行末にセミコロン(;)を付けます。さらに行の先頭に数字(ミリ秒)を付けると、その時間が経過してから次の行へ自動で進みます(auto モード)。

note c;
500 note d;
500 note e;
500 note f;
500 note e;
500 note d;
500 note c;
1000 note e;

上の例(「かえるの歌」の冒頭)では、note が宛先、cde… が送るテキストです。1行目は数字がないのですぐに c が送られ、2行目以降は前の音から 500(ミリ秒)待ってから次の音が送られます。送られた値は [r note](receive)で受け取って使います。

テキストデータの書き方

  • 各行は 宛先 値;、または 待ち時間 宛先 値; の形で書きます
  • 宛先: 送り先の名前。Pd内の [r 宛先] に届きます(例の note なら [r note]
  • 待ち時間(任意): 行の先頭に置く数字。auto モードのとき、前の行からこのミリ秒だけ待ってから送出します(省くとすぐ送出。1行目は省略します)
  • : 宛先に送る内容(音階名やファイル名など)
  • 行末には必ずセミコロン(;)を付けます
  • 宛先を有効にするには、text sequence-g フラグを付けます(例: [text sequence kaeru -g]
かえるの歌の全データ
note c;
500 note d;
500 note e;
500 note f;
500 note e;
500 note d;
500 note c;
1000 note e;
500 note f;
500 note g;
500 note a;
500 note g;
500 note f;
500 note e;
1000 note c;
1000 note c;
1000 note c;
1000 note c;
1000 note c;
250 note c;
250 note d;
250 note d;
250 note e;
250 note e;
250 note f;
250 note f;
250 note e;
500 note d;
500 note c;

パッチの例

テキストファイル

text define -k kaeru の中にテキストデータを書き込み、text sequence kaeru -g で順番に送り出します。-g フラグにより各行の先頭シンボル(note)が宛先になり、[r note] で音階を受け取れます。


テキスト出力による音源ファイルの自動再生

text sequence の出力を else/play.file~ に接続することで、テキストデータに書かれた順番に音源ファイルを自動再生できます。

主なメッセージ

メッセージ動作
auto自動再生モードにする(テキストの待ち時間に従って自動的に次のデータを出力)
bang次のデータを1つ出力する(手動モード)
line 0先頭に戻る

手順

  1. text define にテキストデータ(宛先 値; の形式。ファイル名や音階データなど)を書き込みます
  2. text sequence を作成し、text define の名前と -g フラグを引数に指定します(例: [text sequence kaeru -g])。各行の宛先は [r 宛先] で受け取ります
  3. auto メッセージを送ると、先頭の数字(ミリ秒)に従って各行を自動的に順番に送り出します
  4. bang メッセージを送ると、1行ずつ手動で送り出します(待ち時間の数字は無視されます)
  5. line 0 メッセージで最初の行に戻ります

auto と bang の使い分け

  • auto : テキストデータに書かれた時間間隔で自動的に進みます。BGMや自動演奏に向いています。
  • bang : ユーザーの操作(ボタンを押すなど)で1音ずつ進めます。インタラクティブな演奏に向いています。

パッチの例

テキスト自動再生


GUIによる打ち込み

else/drum.seq オブジェクトを使うと、グラフィカルなインターフェースでリズムパターンを打ち込むことができます。マウスでクリックして直感的にリズムを組み立てられます。

使用するオブジェクト

オブジェクト機能
else/drum.seqリズムパターンのGUIエディタ
else/tempoテンポ(BPM)を設定する
route出力されたデータを楽器ごとに振り分ける

BPMの設定方法

else/tempo オブジェクトでBPM(Beats Per Minute: 1分あたりの拍数)を設定します。

  • 引数にBPMの値を指定します(例: else/tempo 120
  • 数値メッセージでBPMを動的に変更することもできます

BPMの目安

BPMテンポ感
60〜80ゆっくり(バラード)
100〜120普通(ポップス)
120〜140やや速い(ダンスミュージック)
140〜180速い(ドラムンベース)

リズムマシンの組み立て方

  1. else/drum.seq を作成し、GUIでリズムパターンを打ち込みます
  2. else/tempo でBPMを設定します
  3. route で各トラック(キック、スネア、ハイハットなど)の出力を振り分けます
  4. 各トラックに音源(else/play.file~ やシンセサイザー)を接続します

パッチの例

リズムマシン


MIDIを介したDAWによる自動演奏

参考情報

PdはMIDI(Musical Instrument Digital Interface)を使って、DAW(Digital Audio Workstation)ソフトウェアと連携することもできます。

概要

MIDIとは、電子楽器やコンピュータ間で演奏データをやり取りするための規格です。PdからMIDIメッセージを送信したり、外部のDAW(Ableton Live、GarageBandなど)からMIDIメッセージを受信したりできます。

PdでのMIDIの使い方

  • MIDI出力: noteout オブジェクトでMIDIノートを送信できます
  • MIDI入力: notein オブジェクトで外部からのMIDIノートを受信できます
  • 仮想MIDIバス: macOSの場合は「Audio MIDI設定」で仮想MIDIバスを作成して、PdとDAWを接続できます

本授業での扱い

MIDI連携は発展的な内容です。本授業では概要の紹介にとどめますが、作品制作で活用したい場合は相談してください。


練習問題

練習1: Aボタンで「かえるの歌」を1音ずつ再生

text definetext sequence を使って「かえるの歌」のメロディを用意し、micro:bitのAボタンを押すたびに1音ずつ再生するパッチを作成してください。

ヒント
  • text define にかえるの歌の音階データを 宛先 値; の形式で記述します(例: note c; 500 note d; 500 note e; ...)
  • text sequence には -g フラグを付けます(例: [text sequence kaeru -g])。宛先の音階は [r note] で受け取ります
  • text sequencebang メッセージを使って、1音ずつ出力します(Aボタンで進める場合、先頭の待ち時間は無視され1音ずつ進みます)
  • micro:bitのAボタンが押されたときに bang を送るようにします
  • 受け取った音階データを sel などで振り分け、osc~ や音源ファイルに接続して音を鳴らします
  • 曲の最後まで到達したら line 0 で最初に戻すことも考えましょう

練習2: リズムマシンにmicro:bitの傾きでテンポ変化

else/drum.seq を使ったリズムマシンを作成し、micro:bitの傾きでBPM(テンポ)を変化させるパッチを作成してください。

ヒント
  • else/drum.seq でリズムパターンを作成します
  • else/tempo でBPMを制御します
  • micro:bitの傾き(加速度センサ)の値を取得します
  • 傾きの値をBPMの範囲(例: 60〜180)にマッピングします
  • scale オブジェクトなどを使って値の範囲を変換しましょう
  • 値が急激に変化しすぎる場合は、else/lowpass などで滑らかにすることも検討しましょう