我正在使用 Euterpea 开发 FRP 应用程序,但在理解如何做这件事方面遇到了重大问题。
我有自己的信号功能,我想在特定事件发生时触发。现在我的 SigFun 刚刚从程序开始运行。
假设我有一个函数可以在图表上显示信号的傅立叶变换,并且效果很好:(字符串 1 是负责生成吉他弦波形的函数。)
d <- clockedSFToUISF 1 $ toFFT $ string 1
-< ()
let (s,fft) = unzip d
(a1,b1) = unzip s
_ <- realtimeGraph graLay 1 Black -< zip a1 fft
我在 toFFT 函数中尝试了 if-then-else 表达式:
toFFT :: SigFun CtrRate b Double -> SigFun CtrRate b (Double, SEvent [Double])
toFFT sf = proc input -> do
sfOut <- sf -< input
fourierData <- fftA 100 256 -< sfOut
outA -< if ______ then (sfOut, fourierData) else (0.0, Nothing)
当 if-flag 为 True 时,一切都正确显示并且程序资源正常。当标志为假时。FFT 是平坦的(没关系),但程序开始消耗大量内存:
我知道在 Yampa 中有一些称为开关的功能,但我在 Euterpea 中找不到它们。
是否有可能以我认为的方式“触发”信号功能?我读了一些关于 ArrowChoice 的文章,但我不清楚它有什么帮助。
我觉得有一些我不知道的基本东西。