1

我正在使用 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 的文章,但我不清楚它有什么帮助。

我觉得有一些我不知道的基本东西。

4

0 回答 0