Dominik Walter schrieb:
>>> Alle Sounds enden im Loop für das Grundrauschen (Sieden).
>
> Das heißt im Grunde genommen werden die anderen Sounds nur in das
> Grund-Rauschen "eingekoppelt"
Naja, eher "ersetzt"... Das gilt aber nur für die Dampf-Variante. Beim
Diesel hat jedes Geräusch seine eigene "Spur", der Motor (und Anlasser)
auch noch seinen eigenen Timer-Interrupt wegen der Drehzahländerung
(Änderung der Ausgaberate).
> mathematisch? also in den jeweiligen
> Buffer?
Es laufen (beim Dampf) 4 Spuren. Jede Spur gibt das Grundrauschen (sehr
geringe Lautstärke, also Werte um die 128) aus, solange sie nichts "zu
tun" hat. Die Zeiger auf die Streams (laufende Adresse und Endadresse)
liegen in einem Array. Dies ermöglicht Gleichbehandlung aller Spuren
(durch Unterprogramm, das nur den Index übergeben bekommt) bei der
Ausgabe, reduziert also den Programmcode. Erreicht die (im Array
gehaltene) laufende Adresse einer Spur die (auch im Array liegende)
Endadresse, so wird die laufende Adresse auf Anfang des Grundrauschens
"gefälscht".
Um einen Sound zu starten, wird nur Anfangs- und Endadresse (Flash) des
entsprechenden Sounds in das Array geschrieben. Den Rest macht die
Ausgaberoutine dann selbst.
Der Start wird über Steuerleitungen ausgelöst, die softwaremäßig
entprellt werden. Für die Glocke läuft ein eigener Zähler, der über die
Steuerleitung auf Startwert gesetzt wird. Bei Auslösung durch
Fernsteuerung (DCC, Funk) wird dieser auf 1 gesetzt. Soll die Glocke
über einen am Gleis "vergrabenen" Magneten ausgelöst werden, wird der
Zähler auf die Anzahl der gewünschten Glockenschläge gesetzt.
Ich habe vor, das Ganze irgendwann noch mal mit einem Mega1284
umzusetzen, um mit höherer Samplerate und mehr (und längeren) Sounds
arbeiten zu können. Mich stört dabei aber etwas, dass es keine PLL für
Timer gibt, die PWM-Frequenz des als DAC genutzten Timers also begrenzt
ist. Ein externer DAC macht die Sache ja wieder komplizierter. Mit dem
Tiny85 erreicht man ja ohne Klimmzüge 250 kHz PWM-Frequenz, was die
Ansprüche an den Tiefpass erheblich reduziert. Ideal dafür wäre ein
Tiny25 mit 1 oder 16 MB internem EEP (der auch gut als Datenlogger
geeignet wäre). Aber den haben wir leider nicht... 8-(
...