Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi rand und Random Delphi (https://www.delphipraxis.net/91872-rand-und-random-delphi.html)

EWeiss 11. Mai 2007 08:42


rand und Random Delphi
 
Hallo

Wieder mal ich ;)

Code:
{
  Random rand = new Random();
  int x = 0;

  for (int i = 0; i < 1024; i++)
  {
    audioData[x] = (byte)rand.Next(0, 127);
    audioData[x + 1024] = (byte)rand.Next(128, 255);
    x++;
  }
}
In dieser schleife werden zufällige WaveDaten generiert.
Wie könnte ich diese nach Delphi übersetzen in verbindung mit Random
bzw. ist das mit Random überhaupt zu verwirklichen ?
Da Random ja nur über einen parameter verfügt.

gruss Emil

marabu 11. Mai 2007 08:48

Re: rand und Random Delphi
 
Hallo Emil,

first try:

Delphi-Quellcode:
const
  N = 1024;
  AMP = 128;
var
  i: Integer;
begin
  Randomize;
  for i := 0 to Pred(N) do
  begin
    audiodata[i] := Random(AMP);
    audiodata[i + N] := Random(AMP) + AMP
  end;
end;
Freundliche Grüße

EWeiss 11. Mai 2007 08:51

Re: rand und Random Delphi
 
Zitat:

Zitat von marabu
Hallo Emil,

first try:

Delphi-Quellcode:
const
  N = 1024;
  AMP = 128;
var
  i: Integer;
begin
  Randomize;
  for i := 0 to Pred(N) do
  begin
    audiodata[i] := Random(AMP);
    audiodata[i + N] := Random(AMP) + AMP
  end;
end;
Freundliche Grüße

Aber sicher doch.. ;)
Danke mal wieder für deine Supi Hilfe.

Gruss Emil

EWeiss 11. Mai 2007 09:02

Re: rand und Random Delphi
 
Nochmal ein kleines mit FFT :mrgreen:

EDIT:

Übersetzt bis auf rand

Delphi-Quellcode:
function GetFreqData(audioData: array of byte): boolean;
Var
  fft      : array of single;
  stepValue : single;
  val      : single;

begin
  SetLength(fft, 1024);
  stepValue := 1.0 / 1024;

  Randomize;

  for i := 0 to Length(fft) do
  begin
    val := (float)rand.Next(0, (1024 / 2)) * stepValue;
    fft[i] := val;
  end;

  for i := 1  to 1024 do
  begin
    try
       val := fft[i] * 255;
       if (val < 0) then
         val := 0;

       if (val > 255) then
         val := 255;

         audioData[i] := byte(val);
         audioData[i + 1024] := byte(val);
     except
       Result := false;
     end;
     Result := true;
  end;

end;
dann kann ich testen..
Sorry mit einigen sachen komme ich noch nicht zurecht.


gruss Emil

marabu 24. Mai 2007 06:46

Re: rand und Random Delphi
 
Hallo Emil,

ich bin spät dran und du hast das bestimmt lösen können, aber trotzdemhier mein Versuch:

Delphi-Quellcode:
uses
  Types;

procedure GetFreqData(var audioData: TByteDynArray);
var
  i: Integer;
  n, range: Word;
  b: Byte;
begin
  n := Length(audioData) shr 1;
  range := SizeOf(b) shl 8;
  for i := 0 to Pred(n) do
  begin
    b := Random(range);
    audioData[i] := b;
    audioData[i + n] := b;
  end;
end;
Randomize() darfst du aber nur einmal beim Start der Anwendung aufrufen, z.B. im OnCreate() der MainForm oder im Projektquelltext vor dem Eintritt in die Nachrichtenschleife. Nicht dass dir sonst der Himmel auf den Kopf fallen würde, aber der mehrmalige Aufruf von Randomize() kann unschöne Auswirkungen auf die Pseudo-Zufälligkeit der generierten Zahlen haben.

Nebenbei: War audioData nicht ein array of ShortInt?

Freundliche Grüße

EWeiss 24. Mai 2007 07:47

Re: rand und Random Delphi
 
Hallo marabu
Werde mir den Thread mal als PDF herunterladen.
Allerdings hat sich der Thread schon erledigt da ich diese abfrage nur temporär benötigt habe.

Da mein Sample jetzt fertig ist kann ich reale Daten übergeben und auswerten.

Trotzdem Danke für deine Infos.
Kann sie sicher noch brauchen ;)

gruss EMil


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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