![]() |
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 } } |
Re: C++ nach Delphi. (Bass.dll code Übersetzung)
Hi
Hat wirklich keiner en plan davon? Das habe ich bis jetzt gemach.
Delphi-Quellcode:
das Problem ist, wen ich Pan Richtung -100 oder 100 setze werden beide Kanäle leiser
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; und da ist statisches rauschen. |
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
![]() |
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. |
Re: C++ nach Delphi. (Bass.dll code Übersetzung)
Code:
"aus dem Bauch heraus", also keine Garantie auf kompilierbarkeit bzw. inhaltlich korrekte Uebersetzung:
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 } }
Delphi-Quellcode:
Ist eine etwas direktere Uebersetzung als die Variante mit der For-Schleife, kommt allerdings zu keinem Ende, wenn Length mod 4 > 0 ;)
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; greetz Mike |
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. |
Re: C++ nach Delphi. (Bass.dll code Übersetzung)
Hallo Wishmaster,
müsste in Deinem Code statt
Delphi-Quellcode:
nicht
inc(s)
Delphi-Quellcode:
stehen, da ein SmallInt doch 2 Bytes lang ist.
inc(s,2)
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