Current progress on AlgAudio

… or “what I’ve been working on for the past three months”.

So this summer I have participated in a programming internship at Audiovisual Technology Center – CeTA in Wrocław. CeTA is developing a number of very exciting projects, and the one I had the pleasure to work on is AlgAudio.

screenshot

(download links available below)

AlgAudio is a new signal processing framework that we’ve been developing from scratch. The user builds an audio processing network by placing “building blocks” of simple operations, connecting them together, configuring their parameters, and defining how the parameters should influence each other. The network works in real time, so any changes to the parameters are immediately reflected in the outputted audio. This makes AlgAudio a perfect tool for live performances.

The general concept was inspired by Max/MSP, but AlgAudio is intended to provide a higher-level interface. It is supposed to be used by musicians, so we do our best to make it easy to work with without any programming or mathematical skills. The building blocks usually represent a more complex operation (comparing to Max or PureData), and expose a number of parameters that can be manually configured, or controlled live via an external controller.

At this stage, AlgAudio is ready to be tried out. Most core features are already implemented, so you can actually build really interesting synthesizers. However, there is still a lot to be done. Most importantly, the module collections need expansion (currently only the very basic modules are available, for example there are no audio filtering blocks available ATM), the module browser needs a better hierarchical structure, we are missing a number of parameter connecting modes, the UI needs various improvements, subpatching and polyphonic features need improvements, and we need a test framework to ensure top quality.

We also believe that creating external modules should be very simple, so that third-parties can provide their own module collections. The API is not quite stable yet, but we’re getting there. This is what an example module looks like:

  <module id="mix3" name="3ch mixer">
    <params>
      <inlet id="in1"/>
      <inlet id="in2"/>
      <inlet id="in3"/>
      <outlet id="out"/>
    </params>
    <description> This module mixes three channels together. </description>
    <sc>
arg in1, in2, in3, out;
var sum = In.ar(in1) + In.ar(in2) + In.ar(in3); 
Out.ar(out, sum);
    </sc>
    <gui type="standard auto"/>
  </module>

It’s that simple!

But what if you would like to inject custom features? AlgAudio has a built-in plugin system. Each module may come with custom logic. The C++ interface allows interaction with literally any other AlgAudio component (you might even get as far as to, say, get your module to modify how other modules are displayed!). Below is the source of a simple module that sums the values of two parameters, and outputs the result as a third parameter.

class DataSum : public AlgAudio::Module{
  void on_param_set(std::string name, float value){
    float v  = GetParamControllerByID("input1")->Get();
          v += GetParamControllerByID("input2")->Get();
    GetParamControllerByID("output")->Set(v);
  }
};

This source code should be pretty self-explanatory. Does it get much more complex? Here’s a sequencer module that outputs a hard-coded sequence:

class SimpleSeq : public AlgAudio::Module{
public:
  int i = 7;
  int seq[8] = {60, 62, 64, 65, 64, 62, 69, 67};
  const  float fill = 0.8;
  void on_init(){
    step();
  }
  void step(){
    i = (i+1)%8;
    int note = seq[i];
    float period = GetParamControllerByID("period")->Get();
    GetParamControllerByID("freq")->Set( AlgAudio::Utilities::mtof(note) );
    GetParamControllerByID("gate")->Set(1.0f);
    timerhandles += AlgAudio::Timer::Schedule(period * fill, [this](){
      GetParamControllerByID("gate")->Set(0.0f);
    });
    timerhandles += AlgAudio::Timer::Schedule(period, [this](){
      step();
    });
  }
  
};

You can browse the API here.

We are releasing AlgAudio under the terms of the Lesser GNU General Public License, so you’ll be free to use it however you like. We host AlgAudio source code on Github.

At this moment the development of AlgAudio will significantly slow down, as we are looking for funds and contributors. We will be thankful if you could notify us about your interest in AlgAudio (contact either me or CeTA).

Download

AlgAudio will be getting an official website soon, but before that you can download binaries for Linux and Windows from Github (OS X support is planned). Downloads for 1.99.1

Please keep in mind that this is not a stable release, and we cannot guarantee that AlgAudio won’t crash sometimes. If you find any bugs, please report them here.

One Response to “Current progress on AlgAudio”

  1. Jörg Starkmuth Says:

    This looks extremely promising! Have you tried compiling it on a Raspberry Pi?


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: