|
Figure 3 shows another example, where a LISP-skilled user applies a Humdrum command in a LISP style. From a given input text in Humdrum format the patch extracts two columns (e.g. two voices). It builds and returns a list of the outputs for column numbers (1,2), (1,3) and (1,4). The user applies more advanced language features of OpenMusic, namely the lambdafication of a function, where input slots that have a connection are bound at lamdafication time and the remaining slot is bound at calling time. The mapping of such a construct to a shell script is not trivial, it would also comprise decisions about how to represent a list of texts in the target environment (the shell script or the file system) and how to pass it back to OpenMusic, if the patch is called from another patch. 5.6 Wrapping up FunctionalityA good user experience is often coupled with an intuitive packaging of functionality. This is especially true when, as in the integrated system of OpenMusic, Humdrum and Rubato, there is a lot of functionality. Since the underlying usage paradigms are quite different, adequate programming patterns will be needed for their access (though the programming language is the same visual language). Luckily, in OpenMusic it is easy to wrap functionality by defining a function with the help of patches (nameless) or generic functions (nameable). Users not interested in their details can use them as »black boxes«. It follows that expert users of a package like Rubato can wrap up functionality like the best path calculation of the HarmoRubette for pure OpenMusic users in a patch without the help of developers.
5.7 User Gains of Existing Integration ComponentsThere are different components of the integration system which are helpful for different users. Because the integration of OpenMusic, Humdrum and Rubato is |