... und da obige procedure eine Schutzverletzung verursachen konnte, und außerdem bei manchen Dateien geknackt hat, hier ddie richtige Lösung:
Delphi-Quellcode:
procedure StereoToMono (
handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD);
stdcall;
var
pl, pr: pSingle;
// pl, pointer auf den linken Kanal, pr den rechten.
a: DWORD;
// Samplezaehler
mono: single;
begin
a := 1;
length := length
div SizeOf (single);
// Length sind jetzt die Anzahl der Samples.
pl := pSingle(buffer);
pr := pSingle (Cardinal(buffer) + SizeOf(single));
while a < length
do
begin
mono := (pl^ + pr^) / 2;
pl^ := mono;
pr^ := mono;
inc (pl, 2);
inc (pr,2);
a := a + 2;
// weil zwei Samples verändert wurden.
end;
end;