Zitat von
SirThornberry:
Hallo,
Hallo!
Zitat von
SirThornberry:
ich möchte zwei wave-Dateien mischen. Die Dateien haben das gleiche Waveformat (Samplerate etc.) und ich weiß das man letztendlich nur die Samples addieren muss um einen gemischten Ton zu erhalten.
Anfangs hab ich versucht den Mittelwert von 2 Samples zu bilden was natürlich unschön klingt weil die Stille mit verstärkt wird wenn man Stille mit Gesang mischt.
Diese Aussage verstehe ich nicht ganz. Meinst du, dass der Gesang leiser wird? Wenn du die 16-Bit Samplewerte als vorzeichenbehaftete Werte (SmallInt) interpretierst, sollte Stille (0) überhaupt keine Auswirkungen haben.
Zitat von
SirThornberry:
Wenn man einfach nur die Samples addiert und nicht durch die Anzahl der addierten Samples teilt klingt das ganze auch ordentlich. Allerdings habe ich meine Bedenken das dies auch gut klingt wenn ich 20 Dateien mische denn dann wird der Samplewert irgendwann so hoch das er nicht mehr in den 16bit wert passt (bei 16bit sound).
So macht's die Natur auch - die Wellen werden einfach überlagert. Allerdings gibt's da den Overflow nur in der jeweils betroffenen Membran (Lautsprecher oder Ohr) und nicht als "Digital Distortion" in einem Samplewert.
Zitat von
SirThornberry:
Und wenn ich dann den wert einfach abschneide müsste es ja übersteuert klingen. Wie macht man das also richtig?
Ich habe ein ähnliches Problem mal so gelöst:
1. Der Zielpuffer besteht aus 32-Bit Integer-Werten
2. Jeder Kanal (jede Wave-Datei) bekommt eine Lautstärke von 0-256, und der Sample-Wert multipliziert mit der Lautstärke wird jeweils zum Zielpuffer addiert
3. Die Werte im Zielpuffer dividiert durch 256 (also um 8 Bit nach Rechts geschoben) ergeben dann das Ergebnis. Hier musst du auf Überlauf prüfen (-32767 <= Samplewert <= 32767). Liegt der Wert außerhalb dann musst du Clippen, d.h. auf den Minimal- oder Maximalwert abschneiden.