結論はコレ!PureDataでプリセット作成管理はシンプルにするのがベスト。値を保存する3つの方法とオススメの使い方
ナカジ(@cp_nakajun)です。
PureDataでプログラミングを作るにあたって
かなりざっくりですが大切な「ボックス」が3つあります。
- オブジェクトボックス:命令など
- メッセージボックス:文字列や数値(基本固定)
- ナンバーボックス:数値(変数)
プログラムをする中で、一度設定してしまえば以降変更する必要がない数値は「メッセージボックス」を使います。
ですが
プログラム実行の中で「変化させる値」は「ナンバーボックス」を使っていくことになります。
例えば、音楽だとボリュームとかシンセのパラメータとかですね。
ただ、「メッセージボックス」に設定した値はファイル保存と共に保存されますが、「ナンバーボックス」はそうはいきません。
値を保存する必要があるものが少なければ
毎回手で設定していくとか、メッセージボックスから「loadbang」オブジェクトで起動時に設定するとかで対応できるかもしれませんが
パッチ(プログラム)が複雑化するほど、管理が難しくなります。
そこで今回はPureDataでプリセット(初期値)を保存する方法を3つと
その中で現状僕が気に入ってる方法、「これがシンプルで分かりやすい」と思って使っているやり方を紹介します。
PureData プリセット(初期値)保存する3つの方法
1.メッセージボックスを利用
1つ目はメッセージボックスを利用する方法です。
ナンバーボックスはファイル(パッチ)を閉じてしまうと、次に開いた時は「0」になります。
メッセージボックスは「保存」さえしてあれば、その値はファイル(パッチ)を閉じてしまっても保存されます。
これを利用してプリセット(初期値)を保存します。
上記の画像の一番左の流れ【bang → メッセージボックス → ナンバーボックス】が基本の流れになります。
メッセージボックスに保存した値を「bang」を叩くことでナンバーボックスに流し込む。
起動時にプリセット(初期値)を設定するには「loadbang」で値の入ったメッセージボックスを叩けば良いと言う事です。
2.TableもしくはArrayを利用
2つ目はTableもしくはArrayを利用します。
「X」をパラメータの種類、「Y」をその値として保存、読み込む方法です。
テーブルサイズは保存したいパラメータの数です。
書き込みと読み出したあとの分岐に工夫が必要ですが(routeなどを利用するとか)
外部のファイルに書き出しできるメリットがあります。
3.textfile(オブジェクト)を利用
3つ目は「textfile」というオブジェクトを利用します。
これは美山さんのPureData本の「qlist」オブジェクトを使うやり方とほぼ同じです。
このやり方もメリットは外部のファイルに書き出せることですが
TableやArrayを利用する方法と同様に、読み出しと書き込みに工夫が必要です。
管理するには直感的でシンプルが良い
プリセットを保存する方法を3つ紹介しました。
色々な方法がありますが、僕自身は実は「1」のメッセージボックスを使う方法しか使ってません。
(あくまでも、僕の現状の用途においてです)
なぜか??
この方法が一番シンプルで直感的に使えるからです。
設定したいパラメーターの近くで処理すればいいだけなので
ただし、便利に使うには少しコツがあります
上の画像をみてください。
まず、メッセージボックスは「set $1 $2 〜」とすることでメッセージボックスの値を設定することができます。
一番「右」のインレットのはパラメータのリアルタイム値が常に入力されるようにします。
(インレットの前に「pack」でまとめておく)
そうすると上から2番目のメッセージボックスが常に「リアルタイム値」に書き換えられ続けます。
気に入ったパラメーターバランスが見つかったら、「真ん中」のインレットからbangを受け取ることで
「outlet」の上のメッセージボックスがその値に書き換わります。
これで「保存」されたことになります。
この「outlet」の上のメッセージボックスがプリセットを保存する場所になります。
保存したあとでパラメーターを動かしたとしても、一番「左」のインレットからbangを受け取れば
先ほど保存した値を送りだしますので、パラメータは元に戻ります。
「outlet」の後は「unpack」でバラします。
この方法の流れが僕としては一番わかりやすいと思います。オススメです。
よかったら試してみてください。