How many audio I/O channels can Daisy handle?

Simple” question. How many audio I/O channels can Daisy handle?
The original Patch has additional audio converters added. Why not more? Why not 8 in and 8 out? 16 in and 4 out?
How many input and outputs, with minimal processing (just gain for argument’s sake) could the original Seed be able to connect through at 48k?

Your username is apt for this question :slight_smile:

There is the single SAI peripheral exposed on the seed (SAI2) that allows you to hook up your own external codec, and it should be possible to add multiple codecs. At that point the limiting factor would be how much data you can push through that peripheral, which depends on the clock speed of the peripheral, the target sample rate, sample bit depth, etc.

So the answer is “it depends” and it’s hard to provide a concrete number. But there should be room to create a project with a lot of I/Os or at least a reasonable amount for most applications. How much did you have in mind?

An 8x8 channel audio matrix mixer would be a simple implementation as a test case. At that amount the Daisy could definitely handle a few of biquads filters on each input, a delay effect, and a less complex reverb. Maybe?

Are you trying to build something like this? 8x8 Active Matrix Desktop Mixer — Low-Gain Electronics

What I would recommend is building a 4x4 prototype and measure the CPU to estimate how much you’ll be able to add more (inputs and effects). That would give you a more concrete answer to this question.

Also, perform a lot with that prototype too and see how much more you want to add. Maybe 5x5 could be the max in terms of how much most musicians’ brain processing power can handle. :wink:

Well, the Patch is already the prototype.

Ah I see, I completely misunderstand the matrix mixer. So 8x8 would be 8 inputs and 8 outputs. I thought it meant 64 inputs 2 stereo outs. :man_bowing:
Yes, 8x8 matrix should be very reasonable. Sorry about that.

Then definitely, the 4x4 prototype with the Patch should give you a good idea as to how much you can add (especially for testing out adding delay and reverb).

You can use the CpuLoadMeter class for measuring the CPU load. And theoretically, whatever you have for 4x4 would be twice the load for 8x8.

#include "daisy_seed.h"
#include "daisysp.h"
using namespace daisy;
DaisySeed hw;
CpuLoadMeter loadMeter;

void MyCallback(AudioHandle::InputBuffer in, 
                AudioHandle::OutputBuffer out, 
                size_t size) 
{
    loadMeter.OnBlockStart();
    for (size_t i = 0; i < size; i++)
    {
        // add your processing here
        out[0][i] = 0.0f;
        out[1][i] = 0.0f;
    }
    loadMeter.OnBlockEnd();
}
int main(void)
{
    hw.Init();

    // start logging to the serial connection
    hw.StartLog();

    // initialize the load meter so that it knows what time is available for the processing:
    loadMeter.Init(hw.AudioSampleRate(), hw.AudioBlockSize());

    // start the audio processing callback
    hw.StartAudio(MyCallback);

    while(1) {
        // get the current load (smoothed value and peak values)
        const float avgLoad = cpuLoadMeter.GetAvgCpuLoad();
        const float maxLoad = cpuLoadMeter.GetMaxCpuLoad();
        const float minLoad = cpuLoadMeter.GetMinCpuLoad();
        // print it to the serial connection (as percentages)
        hw.PrintLine("Processing Load %:");
        hw.PrintLine("Max: " FLT_FMT3, FLT_VAR3(maxLoad * 100.0f));
        hw.PrintLine("Avg: " FLT_FMT3, FLT_VAR3(avgLoad * 100.0f));
        hw.PrintLine("Min: " FLT_FMT3, FLT_VAR3(minLoad * 100.0f));
        // don't spam the serial connection too much
        System::Delay(500);
    }
}
1 Like