Autor Beitrag
Styler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58

WinXP Home
Delphi 7 Studio Enterprise german
BeitragVerfasst: Mi 08.06.05 15:38 
Hallo,
ich will ein Metronom programmieren oder bessergesagt habe es schon und vom Quelltext her gibts keine Fehler nur geht halt nicht was ich will...
Kann sich jemand denken was ich im nachfolgenden Code falschgemacht habe??
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ExtCtrls, Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    MediaPlayer1: TMediaPlayer;
    Edit1: TEdit;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  TimeBetweenTicks: Integer;
  Abort: Boolean;
  Freq, Start, Stop: Int64;
     bpmTicks: Int64;
       Frequency, TicksPerMinute: Int64;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  TempTicks, LastBeatTicks: Int64;
  bpm: Integer;
begin
bpm := StrToInt(Edit1.Text);

QueryPerformanceCounter(LastBeatTicks);
MediaPlayer1.play; // Am Anfang gleich den ersten Schlag abspielen
while Panel1.Caption='ON' do // solange wie das Metronom laufen soll..
begin
  QueryPerformanceCounter(TempTicks);
  if SameValue(LastBeatTicks - TempTicks, bpmTicks div bpm, Frequency div 10000) then
  begin
    MediaPlayer1.Play;
    LastBeatTicks := TempTicks;
  end;
end;
  end;
end.


In Edit1 soll die gewünschte bpm zahl eingegeben werden, nach starten des metronoms soll in den zeitabständen eine sounddatei abgespielt werden mithilfe von mediaplayer1.play;

hoffe mir kann jmd. helfen!
vielen dank

_________________
Die Rechtschreibfehler habe ich extra gemacht und dienen zur allgemeinen Belustigung.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 08.06.05 16:04 
ausblenden Delphi-Quelltext
1:
if SameValue(LastBeatTicks - TempTicks, bpmTicks div bpm, Frequency div 10000) then					

Da wäre ich mir nicht so sicher, das das immer zutrifft, wenn Du das haben willst. Du meinst, wenn eine bestimmte Zeit erreicht wurde. Die kann aber nie erreicht, aber immer überschritten werden...
Styler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58

WinXP Home
Delphi 7 Studio Enterprise german
BeitragVerfasst: Mi 08.06.05 16:19 
könntet ihr mir mal helfen oder tipps geben wie es gehen könnte?

_________________
Die Rechtschreibfehler habe ich extra gemacht und dienen zur allgemeinen Belustigung.
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 08.06.05 19:01 
na, anstatt "If (abs (a-b) < c)" fragt man einfach "if a>b". Zum Beispiel.
ManuelGS
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 173

Win XP HE, Suse Linux
D6, D7, D2005 Personal
BeitragVerfasst: Mo 13.06.05 17:27 
hi!
ich denke, du solltest erstmal in deine while-schleife den befehl "application.processmessages" einbauen, damit dein programm überhaupt beendbar ist, bzw. damit du überhaupt noch die möglichkeit hast dein panel1 auf "off" zu stellen.

ansonsten: was läuft denn nicht?

Gruß, Manuel

_________________
"Leben ist gänzlich Bühne und Spiel; so lerne denn spielen
und entsage dem Ernst - oder erdulde das Leid." - Palladas von Alexandria
Styler Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 58

WinXP Home
Delphi 7 Studio Enterprise german
BeitragVerfasst: Mi 29.06.05 17:54 
naja wenn ich auf start drücke dann kommt einmal der clickton, dann ist fertig... das metronom funktioniert also nicht wie es soll
hier der code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, MPlayer, ExtCtrls, Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    MediaPlayer1: TMediaPlayer;
    Edit1: TEdit;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  TimeBetweenTicks: Integer;
  Abort: Boolean;
  Freq, Start, Stop: Int64;
     bpmTicks: Int64;
       Frequency, TicksPerMinute: Int64;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  TempTicks, LastBeatTicks: Int64;
  bpm: Integer;
  metronomrunning: String;
begin
metronomrunning:='ON';
bpm := StrToInt(Edit1.Text);

QueryPerformanceCounter(LastBeatTicks);
MediaPlayer1.play; 
while Metronomrunning='ON' do 
begin
  application.processmessages;
  QueryPerformanceCounter(TempTicks);
  if SameValue(TempTicks - LastBeatTicks, bpmTicks div bpm, Frequency div 10000) then
  begin
    MediaPlayer1.Play;
    LastBeatTicks := TempTicks;
  end;
end;
  end;
end.


was mach ich falsch!?

_________________
Die Rechtschreibfehler habe ich extra gemacht und dienen zur allgemeinen Belustigung.
ManuelGS
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 173

Win XP HE, Suse Linux
D6, D7, D2005 Personal
BeitragVerfasst: Mi 29.06.05 18:13 
du hast vergessen bpmticks einen wert zuzuweisen!

_________________
"Leben ist gänzlich Bühne und Spiel; so lerne denn spielen
und entsage dem Ernst - oder erdulde das Leid." - Palladas von Alexandria