第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 が宛先、c・d・e… が送るテキストです。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 | 先頭に戻る |
手順
text defineにテキストデータ(宛先 値;の形式。ファイル名や音階データなど)を書き込みますtext sequenceを作成し、text defineの名前と-gフラグを引数に指定します(例:[text sequence kaeru -g])。各行の宛先は[r 宛先]で受け取りますautoメッセージを送ると、先頭の数字(ミリ秒)に従って各行を自動的に順番に送り出しますbangメッセージを送ると、1行ずつ手動で送り出します(待ち時間の数字は無視されます)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 | 速い(ドラムンベース) |
リズムマシンの組み立て方
else/drum.seqを作成し、GUIでリズムパターンを打ち込みますelse/tempoでBPMを設定しますrouteで各トラック(キック、スネア、ハイハットなど)の出力を振り分けます- 各トラックに音源(
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 define と text 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 sequenceのbangメッセージを使って、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などで滑らかにすることも検討しましょう