AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Algorithmus von C99 in Delphi übersetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Algorithmus von C99 in Delphi übersetzen

Ein Thema von Rer · begonnen am 18. Nov 2009 · letzter Beitrag vom 19. Nov 2009
Antwort Antwort
Rer

Registriert seit: 7. Apr 2007
13 Beiträge
 
#1

Algorithmus von C99 in Delphi übersetzen

  Alt 18. Nov 2009, 19:36
Hi @all,
ich wollte fragen ob mir jemand folgenden Algorithmus von C99 in Delphi übersetzen kann:
Wikipedia - ADX (file format) (beim Abschnitt ADX Decoding)
Ich hab mich schon ein wenig dran versucht, bin jedoch nicht mit der Syntax dieser Sprache vertraut... Daher dachte ich mir, dass ich mal in diesem Forum nachfrage. Der Codeausschnitt ist ja auch nicht übermäßig lang
mfg
Rer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#2

Re: Algorithmus von C99 in Delphi übersetzen

  Alt 18. Nov 2009, 19:49
Wie sieht denn dein Versuch derzeit aus?

Einfach den Code soweit wie möglich übersetzen und dann können wir ja mal sehn, wie wir dir bei den fehlenden bzw. noch nicht übersetzten Stellen helfen können
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Algorithmus von C99 in Delphi übersetzen

  Alt 18. Nov 2009, 20:24
Ich sehe es wie himitsu. Ein Forum ist da um zu helfen und nicht um für andere die komplette Arbeit zu machen.
Vor allem lernst du rein gar nichts wenn es immer Andere machen statt das du es selbst versuchst und dann nur bei konkreten Problemen nachfragst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Rer

Registriert seit: 7. Apr 2007
13 Beiträge
 
#4

Re: Algorithmus von C99 in Delphi übersetzen

  Alt 19. Nov 2009, 16:04
so weit bin ich bis jetzt^^
Delphi-Quellcode:
type
  ADX_HEADER = packed record
    Begin_0x80 : Byte;
    Begin_0x00 : Byte;
    crOffset : Word;
    encType : Byte;
    blockSize : Byte;
    smplbitdpth: Byte;
    NumChannels: Byte;
    sampleRate : LongWord;
    totalSamples: LongWord;
    hpfrequency: Word;
    Version : Byte;
    flags : Byte;
  end;

  ADX_LOOP_V3 = packed record
    loopEnabled: LongWord;
    loopBegSamInd:LongWord;
    loopBegBytInd:LongWord;
    loopEndSamInd:LongWord;
    loopEndBytInd:LongWord;
  end;

  ADX_LOOP_V4 = packed record
    loopEnabled: LongWord;
    loopBegSamInd:LongWord;
    loopBegBytInd:LongWord;
    loopEndSamInd:LongWord;
    loopEndBytInd:LongWord;
  end;
{...}

var
  Form1 : TForm1;
  adxhdr : ADX_HEADER;
  adxloopv3 : ADX_LOOP_V3;
  adxloopv4 : ADX_LOOP_V4;

function READ_HEADER(efile:string):boolean;
function read_loopv3(efile:string):boolean;
function read_loopv4(efile:string):boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  M_PI : double;
  a,b,c : double;
  coefficient: array [0..1] of double;

begin
  READ_HEADER('c:\MeineDatei.adx');

  if adxhdr.Version=3 then
    read_loopv3('c:\MeineDatei.adx')
  else if adxhdr.Version=4 then
    read_loopv4('c:\MeineDatei.adx');

  //-------> coefficients must be calculated

  M_PI:=ArcCos(-1.0);
  a := sqrt(2.0) - cos(2.0 * M_PI * (adxhdr.hpfrequency/adxhdr.sampleRate));
  b := sqrt(2.0) - 1.0;
  c := (a - sqrt((a + b) * (a - b))) / b;

  // double coefficient[2];
  coefficient[0] := c * 2.0;
  coefficient[1] := -(c * c);


end;

function READ_HEADER(efile:string):boolean;
var
  edat : file;
  buffer : array [0..$FFFF] of byte;
  gelesen : integer;
begin
  result:=false;
  assignfile(edat,efile);
  reset(edat,1);
  blockread(edat,buffer,sizeof(adxhdr),gelesen);
  move(buffer[0],adxhdr,sizeof(adxhdr));
  if (adxhdr.Begin_0x80=128) and (adxhdr.Begin_0x00=0) then begin
    result:=true;
  end;
  closefile(edat);
end;

function read_loopv3(efile:string):boolean;
var
  edat : file;
  buffer : array [0..$FFFF] of byte;
  gelesen : integer;
begin
  result:=false;
  try
    assignfile(edat,efile);
    reset(edat,1);
    seek(edat, 24);
    blockread(edat,buffer,sizeof(adxloopv3),gelesen);
    move(buffer[0],adxloopv3,sizeof(adxloopv3));
  finally
    result:=true;
    closefile(edat);
  end;
end;

function read_loopv4(efile:string):boolean;
var
  edat : file;
  buffer : array [0..$FFFF] of byte;
  gelesen : integer;
begin
  result:=false;
  try
    assignfile(edat,efile);
    reset(edat,1);
    seek(edat, 36);
    blockread(edat,buffer,sizeof(adxloopv3),gelesen);
    move(buffer[0],adxhdr,sizeof(adxloopv3));
  finally
    result:=true;
    closefile(edat);
  end;
end;

end.
Nun steht in den nächsten Zeilen bei wikipedia:
Code:
static int32_t*      past_samples;
 static uint_fast32_t sample_index = 0;
 static ADX_header*   adx_header;
Sieht für mich wie eine Variablendeklaration aus. Ich weiß jedoch nicht was da genau gemacht wird.
Außerdem werden zwischendurch die funktionen "ntohs" und "sign_extend" verwendet... mit denen kann ich ebenfalls nichts anfangen. Gibt es gleichbedeutende funktionen bei Delphi?
Code:
scale[i] = ntohs( bitstream_read( 16 ) );
sample_error = sign_extend( sample_error, adx_header->sample_bitdepth );
fortsetzung folgt
mfg
Rer
  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 06: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