Also in deinem Beispiel mixt du zwei Mono-Streams zu einem Stereo-Stream zusammen.
Mono-Stream: jeweils ein 16-Bit-Wert je Sample
Stereo-Stream: jeweils zwei 16-Bit-Werte je Sample, abwechselnd links und rechts.
Das Zusammenmischen von Audiodaten ist normalerweise eine einfache Addition, wobei du aber auf Überlauf prüfen oder ggf. eine Anpassung der Lautstärke machen musst.
Delphi-Quellcode:
function TForm1.SoundStreamsMischenStereo(Stream1, Stream2: PSmallInt): PSmallInt;
var
i: integer;
Data2, Data3, Data4, Ziel, Ziel2: PSmallInt;
begin
GetMem(Ziel, Size);
Ziel2 := Ziel;
Data2 := Stream1;
Data4 := Stream2;
for i := Size - 1 downto 0 do
begin
ziel2^ := (Data2^ + Data4^) div 2; // Halbe Lautstärke -> kein Überlauf möglich
Inc(Ziel2);
Inc(Data2);
Inc(Data4);
end;
Result := Ziel;
end;
Frage: woher kommt die Variable
Size?