Shipping will be unavailable from Dec 21 to Jan 3. Orders placed during that time will be shipped the week of Jan 3.

Second Hardware Prototype

Prototyping is still moving along. We have a prototype built of the main board which contains all of the input and output interface circuitry including output level conversion and drivers, input level conversion, protection circuits, and so forth. The arduino mounts directly to this board on one side, and the panel PCB mounts to the other side. We've got a couple of final tweaks to go on the panel layout before sending away for a prototype of that. Once that's done, then we'll also send off the panel PCB for a test run. We'll soon be ready for pre-orders and will know how much this beast will cost! I needed to test the unit's ability to playback audio from the microSD card through the AC coupled DACs while at the same time, controlling a few modular pieces. > ### A note about microSD usage > To set expectations, the nw2s::b is not intended to be a full-featured sampler. It's only got 96kB of storage for your entire program's heap - which includes not only memory allocated for things like samples, but also your global variables, sequences, and so forth. > > The SD card is much better suited to storing things like single cycle waveforms for audio-rate wavetable synthesis or complex LFO generation. In the future, we'll also be able to store scripted program data so that you don't need to compile and upload code with every program change. Samples are loaded from the microSD card and I'll provide a tutorial for creating samples in the next few days. Until then, here's a little code and some noises produced by that code. There are two samples. The first is a free running mechanical sounding drone and the second is a short acoustic drum loop which is synced to a regular beat clock. There are two other synth voices - a Z3000 and a Morphing Terrarium which are being modulated by a couple of CV outputs as well. [soundcloud params="auto_play=true"][/soundcloud] I make no claims as to the artistic value of this patch! But as a demonstration of what you can do with 6 outputs and a few lines of code, it works wonders! [The full code can be downloaded on github.]( Serial.begin(19200); Serial.print("\n\nStarting...\n"); EventManager::initialize(); /* VOICE 1 */ /* VOICE 1 */ /* VOICE 1 */ Clock* dropoutclock = RandomDropoutClock::create(128, 16, 20); SequenceNote notelist[34] = { {1,1}, {1,1}, {1,5}, {1,1}, {1,1}, {1,3}, {1,3}, {1,5}, {2,1}, {2,1}, {2,5}, {2,1}, {2,3}, {2,3}, {2,1}, {2,1}, {1,1}, {3,1}, {3,1}, {3,5}, {3,1}, {3,1}, {3,3}, {3,1}, {2,5}, {2,5}, {2,1}, {2,3}, {2,3}, {2,1}, {2,1}, {2,3} }; std::vector* notes = new vector(notelist, notelist + 34); Sequencer* sequencer = MorphingNoteSequencer::create(notes, A, MINOR, 25, DIV_SIXTEENTH, DUE_SPI_4822_00); sequencer->seteg(ADSR::create(10, 250, 254, 1250, 1200, false, DUE_SPI_4822_01)); dropoutclock->registerdevice(sequencer); EventManager::registerdevice(dropoutclock); /* VOICE 2 */ /* VOICE 2 */ /* VOICE 2 */ Clock* randomclock = RandomTempoClock::create(40, 100, 8); SequenceNote notelist2[4] = { {0, 1}, {1, 1}, {0, 1}, {1, 1} }; std::vector* notes2 = new vector(notelist2, notelist2 + 4); Sequencer* sequencer2 = NoteSequencer::create(notes2, A, MINOR, DIV_WHOLE, DUE_SPI_4822_02); sequencer2->setslew(LinearSlew::create(50)); Sequencer* cvsequencer = CVSequencer::create(800, 1000, DIV_QUARTER, DUE_SPI_4822_03); cvsequencer->setslew(LinearSlew::create(50)); randomclock->registerdevice(cvsequencer); EventManager::registerdevice(randomclock); /* MECHANICAL NOISE */ /* MECHANICAL NOISE */ /* MECHANICAL NOISE */ /* Setup the mechanical noise as a free running loop */ SignalData* mechanicalnoise = SignalData::fromSDFile("loops/mech01.raw"); Looper* looper2 = Looper::create(DUE_DAC0, mechanicalnoise); /* DRUM LOOP */ /* DRUM LOOP */ /* DRUM LOOP */ /* Set up the drum loop as a clocked loop. It will reset every two beats */ FixedClock* loopclock = FixedClock::create(128, 16); SignalData* drumloop = SignalData::fromSDFile("loops/loop01.raw"); ClockedLooper* looper1 = ClockedLooper::create(DUE_DAC1, drumloop, 2, DIV_QUARTER); loopclock->registerdevice(looper1); EventManager::registerdevice(loopclock);

Leave a comment

Please note, comments must be approved before they are published