Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Comment on

( #3333=superdoc: 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.

In reply to Csgrouper musical software announcement by emilbarton

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?

    What's my password?
    Create A New User
    [vrk]: Aha, there's a reference to "bug report 82719" in NetAddr/'s sub _splitref.
    [moritz]: wow, that's their idea of an "improved error message"
    [moritz]: how about "This network is too large to enumerate all host addresses." or so?
    [vrk]: Well, there's a call to notcontiguous() before the error, whose description is "counts the bit positions remaining in the mask when the rightmost '0's are removed"
    [vrk]: Clear as mud!

    How do I use this? | Other CB clients
    Other Users?
    Others avoiding work at the Monastery: (9)
    As of 2017-04-25 07:44 GMT
    Find Nodes?
      Voting Booth?
      I'm a fool:

      Results (449 votes). Check out past polls.