Oh mir fällt gerade auf, dass ich im Eingangspost einen Fehler habe;
anstatt 1kHz nutze ich 11 kHz.
Das Fade-In/Out nach 127 habe ich bereits probiert und es hat leider
nicht zum Erfolg geführt. Seltsamerweise wird das "ploppen" übrigens
dann verzögert, wenn ich den letzten Wert des Soundsamples noch eine
Weile "halte". Dieser Wert ist z.B. 0x82 (130) hat also eine Abweichung
von 3 zu 127.
Meine Fade-Out Implementierung muss einen Fehler haben, hier mal der
Quellcode davon:
1 | #define FADEVAL 1100
|
2 | #define NOTHINGVAL 0x82//127//2048
|
3 |
|
4 | if (cnt > 0) {
|
5 | /*val /=cnt;*/
|
6 | fadedown = FADEVAL;
|
7 | } else {
|
8 | #if 0
|
9 | if (fadedown > 0) {
|
10 | fadedown--;
|
11 | } else {
|
12 | if (lastval > NOTHINGVAL) lastval--; else if (lastval < NOTHINGVAL) lastval++;
|
13 | fadedown=FADEVAL;
|
14 | }
|
15 | val = lastval;
|
16 | #else
|
17 | val = 0x82;
|
18 | #endif
|
19 | }
|
20 | lastval = val;
|
fadedown, lastval und val sind alles uint16_t. lastval und fadedown sind
static. Der Buffer wird in der Mainloop gefüttert, weshalb ein volatile
nicht nötig ist.
FADEVAL ist der Verzögerungswert in Samples für die Fade-Funktion.
lastval ist immer der zuletzt gesetzte Wert für den DAC, val ist der
Wert welcher genau nach diesem Code in den Buffer für den DAC
geschrieben wird.
NOTHINGVAL ist der Wert für die Stille, also wenn kein Sound abgespielt
werden soll; diesem wird sich langsam angenähert.
Das if/else/endif vom Preprozessor ist die Stelle die mich stutzig
machte: bei if 1 "ploppt" es, bei if 0 nicht. Eigentlich sollte bei if 1
ja aber auch nichts passieren, da lastval ja bereits == NOTHINGVAL ist.
@travelrec: der DAV hat 12 Bit, also müsste ich dann die 2048 nehmen
anstatt der 127?
Des weiteren zu deiner Ausgangsbeschaltung: bisher habe ich nichts
weiter als direkt den Klinkenstecker der Aktiv-Boxen beschaltet. Wozu
benötige ich den Tiefpass und was für Werte sollten die Kondensatoren
und der Widerstand haben?
Eim weiterer eventuell systematischer Fehler ist mir aufgefallen, was
daran liegt, dass mir nicht ganz klar ist, was diese 8bit unsigned PCM
Daten genau bededeuten. Wenn diese, wovon ich ausgehe, die "Wellenform
sind, wobei 127 der Nullwert ist, so ist meine schlichte Addition
insofern problematisch, da Werte < 127 sich beim addieren vergrößern und
nicht verkleinern. Ist diese Annahme korrekt?