Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   C++ C++ nach Delphi. (Bass.dll code Übersetzung) (https://www.delphipraxis.net/74423-c-nach-delphi-bass-dll-code-uebersetzung.html)

Wishmaster 3. Aug 2006 01:31


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

Wer kennt sich mit C++ aus. Ich brauche ne Übersetzung C++ nach Delphi.


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
    }
}

Wishmaster 5. Aug 2006 05:05

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

Hat wirklich keiner en plan davon?

Das habe ich bis jetzt gemach.
Delphi-Quellcode:
var Pan : integer; //  -100  < 0 > 100

procedure PanDSP(handle: HDSP; channel: DWORD; buffer: pointer; length: DWORD; user: DWORD); stdcall;
var
 i : DWORD;
 S : PSmallint; //Short
begin
    S:= PSmallint(Buffer);
  for i := 0 to (Length div 2) - 2 do
   begin
     if (Pan < 0) then S^:= trunc(S^ * (100 + Pan) /100)   // pan left = reduce right
  else
     if (Pan > 0) then S^:= trunc(S^ * (100 - Pan) /100);  // vice versa

     inc(s);
   end;
end;
das Problem ist, wen ich Pan Richtung -100 oder 100 setze werden beide Kanäle leiser
und da ist statisches rauschen.

Luckie 5. Aug 2006 05:27

Re: C++ nach Delphi. (Bass.dll code Übersetzung)
 
Warum der Umstand. Zur Bass.dll gibt es doch eine Delphi Unit. Ist das da nicht deklariert? Ansonsten ist das bass.dll Forum auf http://www.un4seen.com/ der erste Anlaufpunkt für Fragen der bass.dll betreffend.

Wishmaster 6. Aug 2006 01:45

Re: C++ nach Delphi. (Bass.dll code Übersetzung)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi

@Luckie ich weis das da ne Delphi Unit dabei ist, ich arbeite mit der bass.dll schon seit ca. 3 Jahren. Ich bin auch seit kurzem Mitglied beim un4seen.com Forum.

Leider sind meine C++ Kenntnisse sehr beschränkt.

Den Code den ich zu übersetzen versuche stammt aus der Bass Hilfe.
BassHilfe Channels/Collback functions/DSPProc

Leider ist es nicht möglich beim RecChannel die panning Position zu ändern, abgesehen mit einer DSP Funktion.

Ich habe mein Programm soweit fertig nur mit dieser DSP Funktion komme ich nicht weiter.

JasonDX 6. Aug 2006 02:24

Re: C++ nach Delphi. (Bass.dll code Übersetzung)
 
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

Wishmaster 10. Aug 2006 03:21

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

Sorry das ich mich nicht schon früher gemeldet habe.

Ich hatte das auch mal so ähnlich gemacht, leider ohne erfolg. Ich werde diese Funktion erstmal aus dem Programm entfernen bis ich ne Lösung gefunden habe.

Trotzdem danke für deine Hilfe.

paelesoft 12. Aug 2006 08:51

Re: C++ nach Delphi. (Bass.dll code Übersetzung)
 
Hallo Wishmaster,
müsste in Deinem Code statt
Delphi-Quellcode:
inc(s)
nicht
Delphi-Quellcode:
inc(s,2)
stehen, da ein SmallInt doch 2 Bytes lang ist.

Oder wolltest Du einen ShortInt (1-Byte-Array) verwenden?
Dann müsste es doch IMHO heißen:
Delphi-Quellcode:
type
  S : ^ShortInt;
begin
  Move(Buffer,S,4);
  ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz