Einzelnen Beitrag anzeigen

Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#5

Re: C++ nach Delphi. (Bass.dll code Übersetzung)

  Alt 6. Aug 2006, 01:24
Code:
int pan; // panning position, set as you would with BASS_ChannelSetAttributes

void CALLBACK PanDSP(HDSP handle, DWORD channel, void *buffer, DWORD length, DWORD user)
{
    short *s=buffer;
    for (;length;length-=4,s+=2) {
        if (pan<0) s[1]=s[1]*(100+pan)/100; // pan left = reduce right
        else if (pan>0) s[0]=s[0]*(100-pan)/100; // vice versa
    }
}
"aus dem Bauch heraus", also keine Garantie auf kompilierbarkeit bzw. inhaltlich korrekte Uebersetzung:
Delphi-Quellcode:
procedure PanDSP(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD);
type
  PShortInt = array of ShortInt;
var
  s: PShortInt;
  IndexOfS: integer;
begin
  s := PShortInt(buffer);
  IndexOfS := 0;
  while (length > 0) do
  begin
    if (pan < 0) then
      s[1 + IndexOfS] := s[1 + IndexOfS] * (100 + pan) div 100
    else
      if (pan > 0) then
        s[IndexOfS] := s[IndexOfS] * (100 - pan) div 100;
    dec(length, 4);
    inc(IndexOfS);
  end;
end;
Ist eine etwas direktere Uebersetzung als die Variante mit der For-Schleife, kommt allerdings zu keinem Ende, wenn Length mod 4 > 0

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat