我正在使用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的内容,但我不清楚它是如何有用的。
我觉得有一些我不知道的基本内容。