Einzelnen Beitrag anzeigen

Benutzerbild von Fussel9
Fussel9

Registriert seit: 25. Mai 2009
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Mein Computer pfeift Lapaloma - Aber wie? -->Windows.

  Alt 9. Feb 2010, 20:20
Zitat von implementation:
Delphi-Quellcode:
begin
  AssignFile(f, 'Lieddatei');
  Reset(f);
  while not eof(f) do begin
    Read(f,t)
    SetLength(l,Length(l)+1);
    l[Length(l)-1] := t;
  end;
  CloseFile(f);
end;
Ich versteh das Read nicht ganz:
Aus F (also z.B. Test.mp3) wird in T gelesen (Also TTon)

Wo wird denn bestimmt was er wo einließt also wo Steht, dass er t.Frequenz einen wert zuweisen soll?

!€!D!|!T :

Ab einem bestimmten Punkt derden Frequenz und Length nur noch 0 zugewiesen obwohl das lied noch nicht vorbei ist....

EDIT2:

Ok, ich habe es jetzt so programmiert:
Delphi-Quellcode:
unit UMain;

interface

uses
  IniFiles, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    BLoad: TButton;
    PB: TProgressBar;
    TWait: TTimer;
    BSave: TButton;
    procedure BLoadClick(Sender: TObject);
    procedure TWaitTimer(Sender: TObject);
    procedure BSaveClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure Laden;
    procedure Speichern;
  end;

type
  TTon = record
    Frequenz: Word;
    BPM: Word;
  end;

TLied = array of TTon;
TNotenblatt = file of TTon;

var
  f: TNotenblatt;
  l: TLied;
  t: TTon;
  Save: TIniFile;
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.BLoadClick(Sender: TObject);
begin
Laden;
end;

procedure TForm1.BSaveClick(Sender: TObject);
begin
Speichern;
end;

procedure TForm1.Laden;
begin
PB.Position:=0;
  AssignFile(f,'Test.mp3');
  Reset(f);
  while not eof(f) do begin
    PB.StepBy(1);
    Read(f,t);
    SetLength(l,Length(l)+1);
    l[Length(l)-1] := t;
  end;
  CloseFile(f);
PB.Position:=100;
TWait.Enabled:=TRUE;
end;

procedure TForm1.Speichern;
begin
PB.Position:=0;
Save:=TIniFile.Create('save.ini');
  while not (Length(l)=0) do
    begin
      PB.StepBy(1);
      Save.WriteInteger('Lied','Frequenz',l[1].Frequenz);
      Save.WriteInteger('Lied','BPM',l[1].BPM);
      SetLength(l,Length(l)-1);
    end;
Save.Free;
PB.Position:=100;
TWait.Enabled:=TRUE;
end;

procedure TForm1.TWaitTimer(Sender: TObject);
begin
PB.Position:=0;
TWait.Enabled:=False;
end;

end.
Das dauert schon ziehmlich lange bis der mit Laden fertig ist,
aber noch SEHR viel länger um mit Speichern fertig zu werden....

Warum ist das so, mache ich was falsch?

Ps: Was genau meintest du damit das ich es Binär abspeichern sollte?
  Mit Zitat antworten Zitat