Posted at

PureDataで値のプリセットを外部ファイルで管理する方法

More than 5 years have passed since last update.

Pd使っててたまに困るのが、プリセット機能が充実してない無いことです。たとえばライブでPdを使う場合、リハーサルでパッチをいろいろいじったあと、「この値のまま保存しておきたい!」ってときは絶対あると思います。

最も簡単な方法は、[message]を使う方法です。

kobito.1392891629.615165.png

右のvaluesにある3つの値(X, Y, Z)が保存したい値です。値を調整して、左にあるbangボタンを押せば[message]に値をセットできます。[message]に書き込んだ値はパッチと一緒に保存されるので、値を呼び出したいときは[message]を押すことで[r x][r y][r z]にそれぞれ値が飛んで復元します。

これは[message]にsetやaddなどでパッチから直接書き込めるのと、セミコロンを頭につけると[receive]に一括で値を送れるという機能を使った方法ですね。美山さんの本でも説明されていました。

しかし、この方法だとプリセットを複数用意したいときに不便です。例えば下の画像みたいに1個ずつ増やしていくという手もありますが、ちょっと面倒だし、前のプリセットを書き換えたいときも面倒です。

kobito.1392892246.909485.png


Tableを使ってプリセットを作成し外部ファイルに書き出す

そこで、[table](アレイでも可)を使って外部ファイルに書き出す方法があります。

kobito.1392892584.669902.png

(1)は先ほどと同じ保存したい値X, Y, Zです。

(2)のsave preset numberとかかればやつに数値を入れると、上の3つの値がテーブル[table $0-bank 1024]に書き込まれます。

また、このとき保存したい値の数分乗算してインデックスを指定する必要があります。その辺の処理が(2)の下の部分ですね(この辺もっとシンプルに改善したい…)

(3)はプリセットを読み込む処理です。load preset numberというところに読み込みたいプリセットのインデックス番号を指定します。ここでも保存した値の数分インデックスをインクリメントして読み込む必要があるのですが、ここでは適当に[tabread]を3つ用意して読み込んでます(もっといい方法があるはず笑)

要するに、[table]とかアレイは"write"メッセージを送ることでテキストファイルとして外部ファイルに保存する機能があります。そこで、保存したい値の数分テーブルのインデックス値をインクリメントしながらテーブルに値を書き込み、読み込むときはその最初の値から保存した数分のインデックスを読みこめばいいわけです。

実際に保存したファイルはこんな感じになります(赤文字は説明用)

kobito.1392893521.765037.png

今回のパッチは保存した値が3つだったので、1つのプリセット毎に3つずつ値が書き込まれています。これはこれでテキストファイルとして保存されるので、後からプリセットの値だけ書き換えることもできます(その場合は、何行目がどのプリセット番号のどの値なのかわかりにくいのでおすすめしませんが…)

また、テーブルのサイズは(保存したい値の数×保存したいプリセット数)で指定すればOKです。

そのうち時間があればオリジナルのPdオブジェクト作りたいです。プリセット用の。