Incremental Functional Reactive Programming for Interactive Music Signal Processing
Textual music programming languages offer greater expressive power than diagrammatic visual programming languages and semi-modular graphical user interfaces. However, textual music programming languages don’t allow fine-grained incremental updates to the signal flow graph—instead, they only allow course-grained updates at the statement level. In both the diagrammatic visual programming language and the graphical user interface paradigms, users can directly adjust a parameter by editing the value inline, and such an adjustment does not affect the state of any other part of the signal flow graph. For example, adjusting the attack time of an envelope does not affect the contents of a delay line. By contrast, users of textual music programming languages must either: 1) assign names to nodes and then later use a separate statement to adjust the parameter value, or 2) lose node states (eg. envelope positions, instantaneous LFO phases, and delay line contents) by reevaluating the entire original statement or program. We present a new paradigm in which users can directly edit programs without losing state. In our approach, time-varying programs evaluate to time-varying signal processing graphs, and incremental updates to the program result in incremental updates to the signal processing graph.