diff --git a/content/関数型信号処理プログラミング言語のソース変更時に内部状態を差分保持するシステム.md b/content/関数型信号処理プログラミング言語のソース変更時に内部状態を差分保持するシステム.md index 510c6988..36be510a 100644 --- a/content/関数型信号処理プログラミング言語のソース変更時に内部状態を差分保持するシステム.md +++ b/content/関数型信号処理プログラミング言語のソース変更時に内部状態を差分保持するシステム.md @@ -105,7 +105,11 @@ fn dsp(){ 上のサンプルでは、はじめlfoを使って周波数をモジュレーションしている状態から、周波数は固定にして音量をモジュレーションする処理へと切り替えた例である。myfreq()とmyamp()はそれぞれどちらもosc関数を1度だけ呼び出すため、dsp関数の内部状態ツリーの構成は共通しており、再コンパイル時にデータが引き継がれる。 この時、myampにはmyfreqの最後の位相が引き継がれることになるが、これは特に望ましいというわけではない(どうでもよさそうではあるけど) -myfreqとmyampをそれぞれselfを使って個別に実装していた場合、値の範囲がおかしくなるkのう +myfreqとmyampをそれぞれselfを使って個別に実装していた場合、値の範囲がおかしくなる可能性がある。 + +ツリー構築の際に、関数ラベルをつけるようにすればいいが、ラベルのネーミング方法に一貫性がないとダメ + +親の関数名+child1,2,3...みたいにすれば多分大丈夫。 ## 将来的な展望 @@ -113,6 +117,8 @@ myfreqとmyampをそれぞれselfを使って個別に実装していた場合 原理的にはFaustでも実現できるはず。 ディレイ、Feed以外に、外部定義の関数呼び出しにもこの仕組みを応用できるか?LuaのUserData的な仕組み。 - +Faustにおけるrwtableのように、単にCell的な仕組みを用意すればDelayやMemもこの上に乗っかる形で全部カバーできるはず + +rwtable(read_index:float,write_index:float,input:float,size:const-float)