AudioProcessorValueTreeState以外のUndo/Redoに関して

Undo/Redoに関してです。
現在、スライダーのUndo/Redoは完璧に動作します。

しかしUI上で変更したカラーやテキストやプリセットNo.などはUndo/Redoが出来ません。
つまりAudioProcessorValueTreeStateに設定したスライダーなどしか
Undo/Redoが動作しません。

AudioProcessorValueTreeStateに設定した以外の値(カラーやテキストやプリセットNo.など)を
Undo/Redoさせる方法はありますでしょうか?
宜しくお願い致します。

私も同じ課題に取り組んでいましたので、情報が共有できればと思います。

先ず、カラーやテキストやプリセットNo.などを保存するValueTreeオブジェクトを用意します。
このValueTreeオブジェクトに対してプロパティの変更(カラーやテキストやプリセットNo.などの状態の変更)を行う際に、ValueTree::setProperty()を呼び出して実行します。
ValueTree::setProperty()関数には引数にUndoManagerのオブジェクトへのポインタを渡すことができるので、Undo/Redoを管理しているUndoManagerを引数に渡します。

なお、UndoManagerは1つのインスタンスをAudioProcessorValueTreeStateとGUI用のValueTreeとで共通のものを使うことができます。共通のUndoManagerを使うことで、GUIの変更とDSPパラメータの変更を1つのUndoスタックに積むことができます。
また、GUIの状態変更とDSPパラメータの変更をそれぞれ分けて管理したい場合は、ValueTree::setProperty()関数を実行する直前でUndoManager::beginNewTransaction()を実行するようにして、Undoスタックに積むジョブの切り分けを行うようにします。

1 Like