<div dir="ltr"><div><font size="2">The manual is here: <br>Around page 21 is the MIDI spec, which tells you all the controls it has.<br>Quite impressive given the chip<br><br><a href="http://waldorf-music.info/downloads/Streichfett/Streichfett%20Manual%20EN.pdf">http://waldorf-music.info/downloads/Streichfett/Streichfett%20Manual%20EN.pdf</a><br></font></div><font size="2"><br></font><div style="font-size:14.8px;font-family:sans-serif"><font size="2">Warning: "Do not leave your Streichfett near children, mothers-in-law or pets. This could lead to critical interactions"<br><br><br></font></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 12, 2016 at 8:11 PM, Olivier Gillet <span dir="ltr"><<a href="mailto:ol.gillet@gmail.com" target="_blank">ol.gillet@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So many of these string machines have a terrible noise floor! I'm not<br>
surprised that a 12-bit DAC is good enough, and could still be<br>
perceived as an improvement in terms of stability/noise compared to<br>
the original machines.<br>
<br>
The most impressive thing for me is how they did with so little<br>
computational power - given that Waldorf claims this thing has full<br>
128-note polyphony!<br>
<br>
I wonder how it's done. Here is my theory...<br>
<br>
* a big bank of 128 sawtooth oscillators from 8 Hz to 12kHz (all MIDI notes).<br>
* an array of 128 amplitudes for each of these.<br>
<br>
The amplitudes array depends on the currently played notes and the<br>
octaves and registration knob. The CPU load is constant - the<br>
oscillators are always rendered even if they have an amplitude of 0.<br>
<br>
Assuming the MCU is clocked at 72 MHz, the audio at 32kHz, 5% of the<br>
computational budget is for the filter/FXs and another 5% for<br>
bookkeeping (MIDI decoding, envelopes, modulations, but most<br>
importantly keeping track of the 128 amplitudes), this leaves about 16<br>
CPU cycles per oscillator, including mixing.<br>
<br>
That's quite low for a band-limited sawtooth oscillator!<br>
<br>
But maybe there's a way of coding a polyBlep oscillator (the simplest<br>
band-limiting scheme I can think of) that makes clever use of the fact<br>
that the frequency is fixed, and known in advance. Firstly, we don't<br>
have to do the costly division by frequency when evaluating the<br>
polyblep function - we can multiply by its reciprocal which would be<br>
precomputed. Secondly, after a phase reset has occurred, we will know<br>
for sure that the next fs/f0 samples will be identical to a naive<br>
sawtooth and won't have any discontinuity, so we can jump to a branch<br>
of code that is specialized for rendering long chunks of samples<br>
without any phase counter overflow check, and no reset handling. This<br>
trick would bring a huge computational gain for the lowest octaves: if<br>
the phase counter is currently at 0.2, the period is 200 samples<br>
(phase increment of 0.005), and we have 64 samples to render, that's<br>
64 samples that can be rendered with naive code, simple enough for an<br>
unrolled loop. Load a few registers, and then go for a long sequence<br>
of two instructions: 1/ increment phase counter, 2/ multiply by<br>
amplitude and store in audio buffer. Now that's fast!<br>
<br>
This trick wouldn't allow vibrato/pitch bend. But assuming that the<br>
vibrato rate and amount are sufficiently low - only small wobbles in<br>
pitch - vibrato/bend could be done simply at a global level by messing<br>
with the DAC frequency (easy to do with a built-in DAC, less so if you<br>
use an external audio DAC - another argument for keeping it simple and<br>
do everything with the MCU peripherals).<br>
<span class="HOEnZb"><font color="#888888"><br>
Olivier<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Fri, Feb 12, 2016 at 7:43 AM, Loscha <<a href="mailto:loscha@gmail.com">loscha@gmail.com</a>> wrote:<br>
> Markus Fuller just uploaded another of his great series of teardown videos.<br>
><br>
> Today's victim was the Waldorf Streichfett<br>
> <a href="https://www.youtube.com/watch?v=umXnCuVBwf0" rel="noreferrer" target="_blank">https://www.youtube.com/watch?v=umXnCuVBwf0</a><br>
><br>
> The entire synthesizer string machine is a single ARM STM32F303 chip.<br>
> There is a power supply chip, an op amp for the audio outs, crystal, but the<br>
> only computational device is the ARM<br>
><br>
> <a href="http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1576/LN1531" rel="noreferrer" target="_blank">http://www.st.com/web/en/catalog/mmc/FM141/SC1169/SS1576/LN1531</a><br>
><br>
> Notable for Audio considerations is that the DACs are 12 bit. Given the<br>
> amount of beloved instruments that use 12 bit DACs, and the quality of this<br>
> machine, it hardly seems a limitation.<br>
><br>
> /Edward<br>
><br>
</div></div><div class="HOEnZb"><div class="h5">> _______________________________________________<br>
> Synth-diy mailing list<br>
> <a href="mailto:Synth-diy@dropmix.xs4all.nl">Synth-diy@dropmix.xs4all.nl</a><br>
> <a href="http://dropmix.xs4all.nl/mailman/listinfo/synth-diy" rel="noreferrer" target="_blank">http://dropmix.xs4all.nl/mailman/listinfo/synth-diy</a><br>
><br>
</div></div></blockquote></div><br></div></div>