• Modular audio engine running

    Matthias_H11/25/2014 at 16:10 0 comments

    ... DAC is playing digital noise through the modular structure.

    // Declare modules
    noise_white m1; // Signal generator module (0 inputs, 1 output)
    audio_out m2;   // Wrapper module for DAC (2 inputs, 0 outputs)
    // Connect both DAC inputs 0, 1 (left+right) to output 0 of noise module:
    m2.connect_input(0, &m1, 0); 
    m2.connect_input(1, &m1, 0);
    /* ... set up hardware ... */
    while (1) {
      if (refresh) { // Interrupt from I2S interface requests refresh when output buffer is less than half full.
        m1.render(); // Produce another buffer full of audio
        refresh = false;
      // Interrupt-driven I2S service routine takes audio data from m2

    ... Module class structure sadly still a bit fragmented. There is a base class, module, from which all other modules are derived. In the long run, I would love to have a self-registration mechanism in place, so new modules can be integrated more easily. Anyone care to give this a try?

  • Antti ladder filter implemented (float/fixed)

    Matthias_H11/20/2014 at 18:26 0 comments

    Just implemented Antti Huovilainen's 4-pole ladder filter (as described in http://dafx04.na.infn.it/WebProc/Proc/P_061.pdf, basic version without the extra tuning), and it sounds quite nice and smooth. No self-oscillation, though - hope that will come with the tuning. Fixed-point version, with hard saturation instead of tanh(), also operational and sounding good, but will require more tweaking.

    Note, this is not tested on the device yet - only on the host system, but using the same basic audio engine in a different build configuration. There likely is a lot of room for improving sound and compute efficiency.

  • Basic HW/FW functionality established

    Matthias_H11/20/2014 at 13:43 0 comments

    - Audio and control interfaces work fine

    - ADC can read up to 4 pots via aux/MIDI port

    - Defined module: base class for audio synthesis / processing units with signal flow via inputs, parameters and outputs

    - next up: interrupt-driven audio engine with audio_in and audio_out modules

    - Who wants to start working on USB MIDI functionality?