The hardware specs of the board are impressive but I would like to take a step back and create a user story first to see if we are talking about a similar user case.
I've tried a lot of Arduino audio libs but the one that i liked the most is the Teensy Audio Library with its patcher. So i as a VidorAudio user i would love to write code like this to create a simple synth for example.
!!! FAKE PSEUDOCODE BELOW !!!
#include "VidorAudio.h"
Vidor_SYNTH synth;
Vidor_PATCHER patch;
Vidor_USB out;
Vidor_OSC osc1;
Vidor_OSC osc2;
Vidor_NOISE noise;
Vidor_MIX mix;
Vidor_SVF svf;
Vidor_ENV env1;
Vidor_ENV env2;
Vidor_AMP amp;
// Setup VidorAudio
void setup() {
Serial.begin(115200);
while (!Serial){}
// Initialize the FPGA
if (!FPGA.begin()) {
Serial.println("Initialization failed!");
while (1) {}
}
delay(4000);
Serial.println("Power ON");
// Patch the synth & blocks
mix.init(3);
patch.init(8 );
synth.init(patch, out);
patch.set(1, osc1.out(1), mix.in(1));
patch.set(2, osc2.out(1), mix.in(2));
patch.set(3, noise.out(1), mix.in(3));
patch.set(4, mix.out(1), svf.in(1));
patch.set(5, svf.out(1), amp.in(1));
patch.set(6, amp.out(1), out.in(1));
patch.set(7, env1.out(1), swf.in(2));
patch.set(8, env2.out(1), amp.in(2));
}
// Main loop
void loop() {
// listen to midi events
if (midi) {
// Do midi stuff
if (midi.on) {
synth.play(frequency, velocity);
} else if (midi.off) {
synth.stop(frequency, velocity);
} else {
synth.change(id, value);
}
}
// Listen to pot / button / switch changes
if (controls) {
// Do hardware stuff
osc1.set(mode, pitch, glide);
osc2.set(mode, pitch, glide);
noise.set(mode);
svf1.set(mode, freq, q, envAmount);
mix1.set(level1, level2, level3);
env1.set(attack, decay, sustain, release);
env2.set(attack, decay, sustain, release);
amp1.set(volume);
}
}
The first question is. Is something like this possible or do we need bigger blocks with a less patchable structure. If it is possible we should first define what a block is and how it exposes its type and connections.