Architektur ----------- Sehr simpel: Es gibt 11 Synthesizer-Kanäle (für mehr war keine Rechenzeit) die jeweils aus einem DDS-Sinusgenerator (10 Bit) und einem Hüllkurven-Provider (8 Bit) bestehen. Der Kram wird einfach für jeden Kanal miteinander multipliziert (das ist das Hauptproblem, denn das kann ein Tiny einfach nicht gut) und dann das Ergebnis der einzelnen Kanäle aufaddiert. Zum Schluß gibt es noch eine Skalierung, um im Wertebereich der 10 Bit-PWM zu bleiben, die hier hier aus dem vorhandenen 8 Bit-Highspeed-Timer per Software-Nachhilfe konstruiert wurde. Diese 10 Bit-Ausgabe war für den Glockenkram leider unverzichtbar, bei nur 8 Bit ertrinkt das letzte Drittel des Decay komplett im Quantisierungsrauschen. DAS will sich wirklich niemand anhören... Das war's schon fast. Algorithmisch wesentlich weniger spannend als die Signalanalyse im ersten Buddelschiff (viel weniger Chancen zum Tricksen ;o). Ach so, was noch fehlt: zwischen Synthesizer-Output und Input des Ausgabedevice gibt es noch eine Queue. Satte 128 Samples. Nicht viel, aber definitiv absolut unverzichtbar, die Queue schluckt die Lastspitzen, wenn die Hüllkurven-Provider neue Samples bereitstellen müssen und wenn sich die gespielte Note ändert. Da ist das System kurzzeitig weit außerhalb der Echzeit. Im Mittel über die Laufzeit einer Note ist die MCU-Auslastung im ungünstigsten Fall (gespielte Note GIS1) bei 99,4%, die Queue wird hier zeitweise bis auf nur noch ca. 10 Restsamples geleert. Uff, insgesamt also gerade noch so: ECHTZEIT. Und nun noch die Kompromisse: die elf Synthesizer-Kanäle (weniger geht nicht für auch nur halbwegs überzeugende Glockenklänge) waren leider nur bei 15625Hz Samplefrequenz machbar. Die PWM-Rate der Ausgabe ist aber immerhin 32150Hz. Das schluckt zwar die Samplefrequenz selber, aber leider nicht deren Mischprodukte mit dem Nutzsignal... Der Hardwarefilter am Ausgang unterdrückt das auch nur ein wenig. Ist bloß 2. Ordnung. Wirklich schön ist anners...