Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

openmusic:reactive [2019/03/14 08:29]
Jean Bresson [How to Use It:]
— (Version actuelle)
Ligne 1: Ligne 1:
-====== Reactive visual programs in OM ======  
- 
- 
-Reactive programming in OM is an intermediate model for visual programming inheriting both the off-line, demand-driven, computation paradigm of OpenMusic, and the reactive features of interactive/real-time systems.  
-The objective is to integrate and control the interactions between the calculi denoted by CAC programs and their external context.  
-In this model visual programming components are capable of "listening" to the environment or to other components, updating contents or triggering calculations accordingly, and propagating changes in a determined way in the program.  
-This "dataflow-oriented" approach implies new semantic definitions, implementation and corresponding user interactions.  
-It is based on the existing OM semantics and conservative with regard to this semantics, so that existing programs created in the environment remain valid in the reactive framework. 
- 
-Implementations of the OM reactive model are available  
- 
-  * as a prototype library to load on top of OM 6.7/6.8. => [[http://forge.ircam.fr/p/efficace/downloads/267/|[Download]]] 
-  * an a native feature in OM >= 6.9 
- 
- 
-===== How to Use It: ===== 
- 
-{{ .:reactive:reactive-boxes.png?150|}} 
- 
-   * **Activate reactivity in OM "General" Preferences window.** 
- 
-   * Select boxes and type 'r' to set their reactive status on/off.\\ //Reactive boxes are displayed with a coloured frame. Note that at the moment, not all boxes can be made reactive.// 
- 
-   * Any modification to a reactive box will propagate downstream to the connected boxes that are also reactive.\\ Modifications can be: 
-     * Evaluation ('v') [=> the box has a new value] 
-     * Edition in the graphical editors or in the text field (for simple value boxes). 
-     * Modification of an input value 
-     * Action of an "interface" box (e.g. slider, etc.) 
-     * External update (e.g. //receive// boxes -- see below) 
- 
-==Notes:== 
-{{ .:reactive:print.png?100|}} 
- 
-  * Reactivity applies to the first-order visual program, that is, not //inside the sub-patches//. A sub-patch (even if it contains reactive boxes) is still considered as an atomic function in the reactive context. 
- 
-  * In order to check what is going on, you can use a reactive //print// or //text-box// and connect it to your patch. 
- 
-===Receiving from external applications:=== 
- 
-{{ .:reactive:om-receive.png?300|}} 
- 
-Reactivity can make particular sense for receiving data from external applications and updating/computing OM visual programs accordingly. 
- 
-  * Set an **osc-receive** or **midi-in** (OM 6.9) box reactive and the data will be propagated at every incoming message.\\ This feature is compatible with the existing "lambda pre-processing" of incoming messages.\\ **Note:** OSC-receive/MIDI-in might need to be turned off and on again if an error occurs during the propagation of an incoming event. 
-   
-  * The **route** **route-osc** boxes can help routing incoming messages and notification. **Route-osc** is a **route** which default test is a string comparison of the OSC messages' address. 
- 
-  * Several dedicated tools will allow to collect or group incoming data, such as **coll**, **group** or **timed-coll**. 
-    * **coll** has a temporary memory and allow to collect incoming data (can be seen as the reactive equivalent of an omloop //collect//. On update request, it behaves differently depending on the input:  
-      * //in// collects the data in a list 
-      * //push// propagates the updates with the current contents of the list 
-      * //init// reinitializes the memory 
-    * **group** has a configurable //delay// (in ms). Within //delay//, updates are collected in a list before to propagate.  
-    * **timed-coll** combines **coll** and **group** and uses a //delay// parameter to collect lists of list from incoming data. 
- 
-**Note:** if an error occurs in the the processing of an incoming event, the MIDI-IN / OSC-IN receive loop might stay stuck in a disabled state. In this case, you might need to turn off and on (R+R) the receive process. 
-\\ 
- 
-===== Example: Collecting/processing incoming MIDI using MIDI-IN ===== 
- 
-{{ :openmusic:reactive:midi-in.png?700 |}} 
- 
- 
- 
-===== Resources ===== 
- 
-  * J. Bresson, J.-L. Giavitto (2014) [[http://www.sciencedirect.com/science/article/pii/S1045926X14000330|A reactive extension of the OpenMusic visual programming language]], Journal of Visual Languages and Computing. {{:bresson:papers:bresson-jvlc14-update.pdf|[PDF]}}\\ //This paper gives a formal semantics of the reactive model in OM, as well as preliminary orientation for its implementation. An extended state of the art and study of related works is given.// 
- 
- 
-  * J. Bresson (2014) [[https://hal.archives-ouvertes.fr/hal-01055239|Reactive Visual Programs for Computer-Aided Music Composition]]. IEEE Symposium on Visual Languages and Human-Centric Computing -- VL/HCC, Melbourne, Australia, 2014.\\ //This paper presents the reactive programming framework in OpenMusic, highlighting some characteristics of the programming and computation paradigms involved. It describes its implementation, and shows some preliminary extensions and applications.// 
- 
-  * [[https://hal.archives-ouvertes.fr/hal-01142078|EFFICACe project report]] including semantics, implementation and preliminary applications. 
-