Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Csgrouper musical software announcement

by emilbarton (Scribe)
on Mar 16, 2012 at 10:49 UTC ( #959958=CUFP: print w/replies, xml ) Need Help??

I'm pleased to announce the first release of the Csgrouper musical program at

(Let it not be said that I don't dare to show my work.)

What is it?

Csgrouper is a (badly written) Perl program that generates Csound score.

What's the need?

Many powerful sound shaping and sequencing programs exist nowadays but the western musical language in itself is almost completely worked up. The result is a repetition of well-known musical patterns in popular harmonies and a privilege for pure sound treatment in musical research.

Therefore there is an opportunity to investigate in musical language innovation that Csgrouper wants to grasp.

What are the means?

There are two related paths followed by Csgrouper.

  • Polytonality (meant in a special way):

On one hand, Csgrouper allows to produce musical sequences with a different number of intervals (from 2 to 24 against 12 in the traditionnal system). These sequences are generated from permutationnal functions that work on pure frequencies. The user must provides his or her code of compatible Csound instruments that are then integrated into the part managed by Csgrouper (some test instruments are provided in the package for a quick start).

  • Polymodality:

On the other hand Csgrouper can reduce the number of intervals in the selected sequence tonality so as to produce a mode. Classic modes are available as well as invented ones.

These basic tools together with a developable set of a dozen of serial sequence production functions permit the creation a list of sequence definitions, each of them having its proper number of intervals and/or mode and its own instrument, size, tempo, development rules etc...

In a later stage, sequences defined in this way can be grouped together into sections showing various rythmic and harmonic properties according to choices made by the user like grouping several sequences into a rythmic canon, or an ensemble section that will proceed on selected sub-sequences determined by inter-sequences note relations, or choosing a rythmic model (binary, ternary, mixed) etc..

Finally Csgrouper evaluates the proposed structure and prints its Csound unified score part in case the evaluation succeeds. The resulting sound file can be played directly from the GUI or recorded on disk. The Csgrouper and Csound parts and instruments are all saved into a Csgrouper .xml config file.

But this output (hear the 7 voices/18 tones raw example (note1)) is not yet music, it's just a computer aided inspiration that can serve to escape a culturally restricting inspiration context, often already entirely explored. The real music comes only as a creative act on Csgrouper output, like sculpture on stone or wood. Personally I treat Csgrouper-Csound output in another software, more convenient, like Blue.

What are the flaws?

Csgrouper could be improved in many ways. Csgrouper has bugs. For the time being it's not pure spaghetti code, but you have to appreciate tagliatelle somehow.

Csgrouper is not easy to use. The serial functions (particularly "train" functions) are difficult to understand and require prior analysis through provided subroutines (from the "Series" tab).

Csgrouper Tk GUI is inadequate, and looks outdated. Besides, the program can't be run properly without looking at some additionnal output from the terminal.

Csgrouper is processing slowly: count several dozens of seconds to load a short piece of a few minutes and another similar time to evaluate it before it's finally ready for audio output.

Csgrouper provides no test suite.

What is my proposal?

I offer this piece of code for sharing on Github, and I'd like programmers interessed by this project to invest their time in improving it. I'll be happy to see the project fork and become less redundant, smarter, have a better GUI, and reach quality standard to help musicians do music.

For now if Perl monks can give me a first stage evaluation before I post to the Csound mailing list, I'll be very glad.


1: Cf. ~/Csgrouper/run/sndout/xpace-flute_raw-csg.csd : This raw Csgrouper score (and related audio output) is made on a 18 notes scale which means thirds of tones. The serial material used was chosen for its tonal properties which yield a harmonious aspect in spite of the lack of dominant position in the 18 notes scale. Feel free to sculpt on it!


I replaced the .wav link on git by a lighter "xpace-flute_raw-csg.mp3" and added a quickly transformed (sculpted) version of the same part named "ballad.mp3".

120712: minor href fix.

  • Comment on Csgrouper musical software announcement

Replies are listed 'Best First'.
Re: Csgrouper musical software announcement
by emilbarton (Scribe) on Mar 26, 2012 at 21:05 UTC

    I really want to share the development of this program but I realize the absence of manual can be a serious problem for people who could be interested; so I've just included the following text as a first step towards an efficient documentation.

    General Introduction and quick start

    The aim of this program is to offer at the same time a way to produce musical sequences with interesting mathematical properties and to experiment various tonal, modal and serial settings. Thus everything depends primarily on the serial notation: if you want to work on dodecaphonic series you will be using the dodecaphonic row whose natural expression (the chromatic scale) is "0123456789AB". And every input you will enter will have to contain signs taken within this set. For instance you could choose to ask Csgrouper to produce the sequence corresponding to the gradual suite of one series, say "769801AB3254" (which is the row used by Webern in his Quartet op. 28) so you would have to create a new row, enter this series into the main field which is named "A", choose "Gradual suite" from the row menu, most of all set the "mode" field to the chromatic scale in base 12, i.e. "0123456789AB", and choose "exp" in order to see the expanded content, otherwise only the final state of the suite would be printed and it would equal its origin in this particular case (this is a bug because the final state of a gradual suite is not its origin but the chromatic scale, being understood that the gradual suite reproduces the same permutation on its output until it reaches the first row on which the permutation was applied that is always the chromatic scale - but we don't care since nobody wants to output the chromatic scale using the non-expanded mode of a Gradual suite).

    As things can reveal difficult to control while working on the "Sequences" tab, there is an analytic tab called "Series" that shows clearly the result of intended actions on serial content. So before creating a sequence it's always a good idea to check there (with help of the menu and button "Apply") that the transformation you are asking makes sense, and some most of the time do not. This is the case with static and dynamic "train" functions for which you need to input a key and a list of signs as well as a serial content. For them you will have the opportunity to introduce the two series that you want to interleaf into fields "A" and "B" of the "Series" tab and ask for "Dynana" (dynamic analysis) or "Inana" (static analysis) and these routines will output the choices of keys and signs you should input in the appropriate fields in order to obtain correct sequential "trains". Just putting any random content won't do and Csgrouper will fail, generally with some more or less instructive complaint.

    The various transformation routines proposed refer to dodecaphonic content but applied to various non dodecaphonic bases. The default part for example works in base 18. These routines which will be explained soon, do things like taking the schoenbergian opposite of a row (always relatively to the chosen base) and redo the same on the output till some cycle is attained (because permutations are cyclic) : this is Gradual(Opposite). There are several other variants of such routines, and ways to transpose and mix rows together. If you want to simply introduce your own melody, use Suite(): its content will be respected but some additionnal (neutral) filling may be added at the end, so as to respect the serial structure too.

    Once several sequences are created, you might want to either put some of them together, or to concatenate them. This last job is done by the "Pre" field, that allows to choose a "previous" sequence for the one that is treated. The "Set" field permits the grouping of various sequences inside a ... set. This set can then be included into one or the other Xfun fields, and the concerned sequences will receive a postreatment (on duration, amplitude, attack etc.). Sets can also be placed into Yfun fields (Rythmic-canon and Ensemble) and that will produce a structural relation between sequences. Sets can also be grouped into sections.

    One thing that is impossible with Csgrouper, is to write a simple tune the way you hear it, because the duration of notes is always computed according to serial properties (or even randomness when it's chosen so). That's why I advise to use this software as a pre-composition tool, in order to hear how it would sound like to use this or that serial, tonal and modal content. Personally I use Csgrouper in order to produce some raw material that I can sculpt afterwards according to my taste.

    Last but not least one shouldn't underestimate the importance of the mode field: if not appropriately filled with the whole set of authorized notes (basically the chromatic scale of your base) and the right number of them (12 if you are in base 12) Csgrouper won't output what you are waiting for. When wanting to work in a particular mode, you can replace the notes you don't want to hear by some of the other notes producing various versions of the same mode, as long as you keep the right number of notes. For instance, the Dorian mode can be achieved by setting the "mode" field to "00224557799B" but also "022445797BB9" that will output a different dorian flavour. The secret is simple, at output time notes of the indice are replaced by their content: so in the first dorian flavour C# (1) will be replaced by C (0) but in the second it will be replaced by D (2).

    There are still many things to clarify but I think it will be OK for a start with Csgrouper.

    Have fun!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: CUFP [id://959958]
Approved by Ratazong
Front-paged by Arunbear
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (2)
As of 2018-08-20 18:28 GMT
Find Nodes?
    Voting Booth?
    Asked to put a square peg in a round hole, I would:

    Results (193 votes). Check out past polls.