The Future of Csoundo

Now that I’ve pushed Csoundo out the door, it’s time for me to take a step back and look at where it’s at and where it’s going. As of this moment, Csoundo is nothing more than the bare Csound essentials. It can run a CSD, read and write to tables, generate score events, and push/pull information via chn busses. Even with near minimum functionality, so much is already possible, but that’s no reason to stay content.

Over the last 3-4 weeks, I’ve been learning the Csound API while trying to identify some of the big issues that need to be overcome in order for Csound to be a viable platform for Processing. And even more importantly, becoming intimately familiar with the Processing philosophy. If Csoundo had a mission statement, it would go something like this:

“Do everything the Processing way (or as close as possible)”

My vision for the design of Csoundo is that it will feel like Processing when you use it. A simple example of something I can do to achieve this goal is to study the naming conventions of Processing, and apply what I learn to Csoundo’s methods. Little details like this add up.

On the other side of the equation is Csound. I don’t want to hide that it’s Csound under the hood, or pile on unnecessary constraints. I want the full power of Csound to remain in the hands of users.

I’m going to post some notes I’ve made. They may not fully make sense, but it’ll hopefully give you the sense of where this project is heading.

  • Support for 32 and 64 bit Csound, though only 32 bit support initially.
  • Support for real time and non-real time Csound operations.
  • Support synchronized and non-synchronized audio.
  • Being able to defer redraw() to Csound. (optional)
  • In instances in which more than one Csound kblock is performed per Processing frame, have a method for collecting krate data into an array that can be scanned by Processing. For examples, scanning an rms signal for a peaked threshold value.
  • Protect Csound data so that memory isn’t being read and written to at the same time.
  • Ensure that a Csound operation is completed before moving onto the next.
  • Plays well with MIDI and OSC, including existing Processing libraries themidibus, proMidi and oscP5.
  • Set Csound command strings.
  • Include pre-built synths and class interfaces for plug-n-play support.
  • Get a list of f-tables in Csound’s memory.
  • Proper documentation.
  • Keep it simple.

9 thoughts on “The Future of Csoundo

  1. @Frederico Lopes: A couple people reported to me yesterday that they were successful in running Csoundo on Windows. They replaced the csnd.jar file that came with Csoundo with the csnd.jar that came with the Windows Csound binary installer at sourceforge. You might be able to get it up and running.

  2. Pingback: Create Digital Music » More Free Synthesis Goodness: QuteCsound Screencast, Csound with Processing

  3. Seems like it’s sort of hit or miss on Windows 7 for me thus far. I tried replacing the csnd.jar file with the one that came with the Csound installation and I can get one of the examples to work. The other two load up and then crash. I’ll look into it and see what I can find.

  4. @Grant Muller:
    Thanks to taking a look. Which example works? Are you running Csound floats or doubles?

    You can check to see if you are running floats or doubles in the console output. It’s printed near the top like this:

    PortMIDI real time MIDI plugin for Csound
    PortAudio real-time audio module for Csound
    virtual_keyboard real time MIDI plugin for Csound
    0dBFS level = 32768.0
    Csound version 5.12 (float samples) Jun 4 2010

  5. I’m running floats, that might be my problem. I tried to run the experiment_1 csd file directly in Csound on the commandline and it wasn’t happy with me :)

    The chInOut works flawlessly. The drawTables works, but when I close out it will throw a java error, should be easy to figure it out if I load up in Eclipse with a proper debugger. Experiment loads then dies before making any sound.

  6. Floats is what you need, as Doubles isn’t supported yet. But yeah, it does sound like a commandline issue. There’s a way to temporarily fix this by changing the CsOptions in the synth.csd files.

    <CsoundSynthesizer>
    <CsOptions>
    ; your command-line settings here.
    </CsOptions>

    Unfortunately, I don’t know what will work on windows. You might know already, and if you do, please do share.

    The Java exit error is a bug I’m aware of. I’ll hopefully have it fixed by next release. I think I know what the solution will be.

  7. I’ll mess with the CsOptions and get back to you. Doesn’t look like a processing/java problem, seems to be embedded somewhere in the csd. I’ve been using SuperCollider for everything lately so it’ll take a little bit for me to get used to Csound again, but it will be nice to come back…

  8. Let me know how things work out. It’ll help me fix things up for future releases. And please keep in mind that Csoundo is still highly unstable as this is an ALPHA release. :)