AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi C++ C++ nach Delphi. (Bass.dll code Übersetzung)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Wishmaster · begonnen am 3. Aug 2006 · letzter Beitrag vom 12. Aug 2006
Antwort Antwort
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#1

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

  Alt 3. Aug 2006, 00:31
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
    }
}
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#2

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

  Alt 5. Aug 2006, 04:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

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

  Alt 5. Aug 2006, 04:27
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#4

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

  Alt 6. Aug 2006, 00:45
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.
Miniaturansicht angehängter Grafiken
snap_920.jpg  
  Mit Zitat antworten Zitat
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
Wishmaster

Registriert seit: 14. Sep 2002
Ort: Steinbach, MB, Canada
301 Beiträge
 
Delphi XE2 Architect
 
#6

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

  Alt 10. Aug 2006, 02:21
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.
  Mit Zitat antworten Zitat
paelesoft

Registriert seit: 3. Jul 2004
37 Beiträge
 
Delphi 7 Professional
 
#7

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

  Alt 12. Aug 2006, 07:51
Hallo Wishmaster,
müsste in Deinem Code statt
inc(s) nicht
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);
  ...
Gruß Erik
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz