| Autor |
Beitrag |
Styler
      
Beiträge: 58
WinXP Home
Delphi 7 Studio Enterprise german
|
Verfasst: 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??
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 public 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; while Panel1.Caption='ON' do 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 08.06.05 16:04
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 
      
Beiträge: 58
WinXP Home
Delphi 7 Studio Enterprise german
|
Verfasst: 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
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 08.06.05 19:01
na, anstatt "If (abs (a-b) < c)" fragt man einfach "if a>b". Zum Beispiel.
|
|
ManuelGS
      
Beiträge: 173
Win XP HE, Suse Linux
D6, D7, D2005 Personal
|
Verfasst: 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 
      
Beiträge: 58
WinXP Home
Delphi 7 Studio Enterprise german
|
Verfasst: 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:
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 public 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
      
Beiträge: 173
Win XP HE, Suse Linux
D6, D7, D2005 Personal
|
Verfasst: 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
|
|
|