![]() |
Re: Metronom-Software -- Brauche Hilfe
Mit windows.beep kann man cool metronom machen
|
Re: Metronom-Software -- Brauche Hilfe
wie kann man mithile von QueryPerformanceCounter und QueryPerformanceFrequency ein Metronom realisieren?? Ich bin mir da irgendwie unklar
|
Re: Metronom-Software -- Brauche Hilfe
Das hier kannst du Dir mal anschaun; (für die Übung)
![]() Und hier Code für den QueryPerformanceCounter; (ungetestet, hab grad kein Delphi zur Hand!)
Delphi-Quellcode:
Hoffe das klappt.
var
TimeBetweenTicks: Integer; // TimeBetweenTicks in ms Abort: Boolean; Freq, Start, Stop: Int64; [..] Abort := false; QueryPerformanceFrequency(Freq); // Freq kann sich nur durch Neustart des PCs ändern! QueryPerformanceCounter(Stop); // Wert vernünftig initialisieren while not(Abort) do begin QueryPerformanceCounter(Start); while (((Stop - Start)/Freq) < TimeBetweenTicks) do begin QueryPerformanceCounter(Stop); // evtl: Application.ProcessMessages(); Keine Ahnung wie sich das auf die Genauigkeit auswirkt. end; //Beep, Klick oder andere Anzeige des Ticks // evtl: Abort := true; end; [..] Auch wenn ich glaube, dass ein PC ( noch ) zu ungenau ist für diese Aufgabe, MfG Thomas |
Re: Metronom-Software -- Brauche Hilfe
irgendwie funktioniert das nicht so... hat jemand weitere vorschläge??
|
Re: Metronom-Software -- Brauche Hilfe
Was funktioniert denn nicht?
|
Re: Metronom-Software -- Brauche Hilfe
naja also ich bin noch anfänger und ich kann den code von oben irgendwie nicht richtig anwenden. ich hab mal was probiert aber dann kommt:
Abort: Unbekannte Anweisung Hier meine Unit1:
Delphi-Quellcode:
wäre toll wenn mir jemand helfen kann
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; TimeBetweenTicks: Integer; // TimeBetweenTicks in ms Abort: Boolean; Freq, Start, Stop: Int64; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); Abort := false; QueryPerformanceFrequency(Freq); // Freq kann sich nur durch Neustart des PCs ändern! QueryPerformanceCounter(Stop); // Wert vernünftig initialisieren while not(Abort) do begin QueryPerformanceCounter(Start); while (((Stop - Start)/Freq) < TimeBetweenTicks) do begin QueryPerformanceCounter(Stop); // evtl: Application.ProcessMessages(); Keine Ahnung wie sich das auf die Genauigkeit auswirkt. end; //HIER die Anweisung für den Clickton abzuspielen windows.Beep(); // evtl: Abort := true; end; end. |
Re: Metronom-Software -- Brauche Hilfe
Niemals begin und end vergessen ;)
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; TimeBetweenTicks: Integer; // TimeBetweenTicks in ms Abort: Boolean; Freq, Start, Stop: Int64; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Abort := false; QueryPerformanceFrequency(Freq); // Freq kann sich nur durch Neustart des PCs ändern! QueryPerformanceCounter(Stop); // Wert vernünftig initialisieren while not(Abort) do begin QueryPerformanceCounter(Start); while (((Stop - Start)/Freq) < TimeBetweenTicks) do begin QueryPerformanceCounter(Stop); // evtl: Application.ProcessMessages(); Keine Ahnung wie sich das auf die Genauigkeit auswirkt. end; //HIER die Anweisung für den Clickton abzuspielen windows.Beep(); // evtl: Abort := true; end; end; end. |
Re: Metronom-Software -- Brauche Hilfe
wie definiere ich dann das tempo??
mit TimeBetweenTicks := 6000; ?? |
Re: Metronom-Software -- Brauche Hilfe
Definieren wir ein bpm für die QPC-Methode wie folgt:
Delphi-Quellcode:
Dann kannst du für eine beliebige bpm-Zahl einfach ausrechnen:
var
Frequency, TicksPerMinute: Int64; QueryPerformanceFrequency(Frequency); TicksPerMinute := Frequency * 60; // Frequency ist in Hz angegeben == Ticks pro Sekunde
Delphi-Quellcode:
div ist hier hinreichend genau, da bei neuen Rechnern Frequency etwas um 3 MHz ist, also ziemlich viel ;)
var
bpmTicks: Int64; bpmTicks := TicksPerMinute div Deine_bpm_Zahl; |
Re: Metronom-Software -- Brauche Hilfe
ich will ja aber in einem editfeld die bpm eingeben und dann einfach start drücken, damit die datei blop.wav in diesem abstand (edit1) abgespielt wird.
muss ich alles bei var oben reinschreiben?? also:
Delphi-Quellcode:
var
Form1: TForm1; TimeBetweenTicks: Integer; // TimeBetweenTicks in ms Abort: Boolean; Freq, Start, Stop: Int64; Frequency, TicksPerMinute: Int64; QueryPerformanceFrequency(Frequency); TicksPerMinute := Frequency * 60; // Frequency ist in Hz angegeben == Ticks pro Sekunde bpmTicks: Int64; bpmTicks := TicksPerMinute div Deine_bpm_Zahl; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz