AlgAudio

AlgAudio is a real-time audio procesisng and synthesis framework for live performances. The user creates a network of connections between modules that perform a simple audio operation.

Features:

  • Simple to learn yet efficient to use UI
  • High variety of built-in modules
  • Low latency, compatible with most audio hardware
  • MIDI input support
  • Scriptable custom modules
  • Plugin-based architecture
  • Cross-platform (Windows/Linux, OSX support planned)

I have developed AlgAudio during my internship in Audiovisual Technology Center, summer 2015.

AlgAudio Screenshot AlgAudio Screenshot

Various existing audio processing frameworks, like MAX/MSP or Puredata require their user to excel at math, which is generally fine, since it is not possible to design complex pathes without understanding at least core principles of signal theory. However, numerous musicians, who not necessarily wish to learn complex math in order to build audio pathes, consider this an obstacle. AlgAudio adresses this issue, by providing a workflow that is similar to MAX/MSP or Puredata, but uses a higher level of abstraction, so that all the details are hidden within building blocks, and thus it is much easier (and faster) to compose simple paths.

Experienced users may add custom modules as simple text files. Here is an example:

<module id="pan2" name="Panorama">
    <params>
        <inlet id="inbus" name="input"/>
        <outlet id="outbus1" name="left output"/>
        <outlet id="outbus2" name="right output"/>
        <param id="dir" name="Direction" defaultmin="-1.0" defaultmax="1.0" defaultval="0.0"/>
    </params>
    <description> Distributes a single signal to two outlets. </description>
    <sc>
        arg inbus, outbus1, outbus2, dir=0;
        var q = 0.5pi*((dir+1)/2);
        Out.ar(outbus1, cos(q)*In.ar(inbus));
        Out.ar(outbus2, sin(q)*In.ar(inbus));
    </sc>
    <gui type="standard auto"/>
</module>

The plugin architecture is designed to be very powerful (virtually any aspect of AlgAudio behaviour and UI can be modified with a plugin), but also simple and detailed. Here is an example plugin (compile it as a shared library and drop into modules directory):

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);
    }
}


extern "C"{
    void delete_instance(void* obj){
        delete reinterpret_cast<AlgAudio::Module*>(obj);
    }
    void* create_instance(const char* name){
        if(strcmp(name,"DataSum")==0) return new DataSum();
        return nullptr;
    }
}

Detailed module and plugin documentation is available here.

AlgAudio was written using modern C++ and SuperCollider, with the help of external libraries: SDL, rapidXML, and freetype.

Currently the development of AlgAudio is suspended due to lack of funds. If you are interested in this project, either contact me or Audiovisual Technology Center.