Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Metronom-Software -- Brauche Hilfe (https://www.delphipraxis.net/42100-metronom-software-brauche-hilfe.html)

sandraeberlein 13. Mär 2005 18:49

Re: Metronom-Software -- Brauche Hilfe
 
Mit windows.beep kann man cool metronom machen

Stresslein 26. Apr 2005 18:06

Re: Metronom-Software -- Brauche Hilfe
 
wie kann man mithile von QueryPerformanceCounter und QueryPerformanceFrequency ein Metronom realisieren?? Ich bin mir da irgendwie unklar

tn249 26. Apr 2005 19:26

Re: Metronom-Software -- Brauche Hilfe
 
Das hier kannst du Dir mal anschaun; (für die Übung)

http://www.delphipraxis.net/internal...ormancecounter

Und hier Code für den QueryPerformanceCounter;
(ungetestet, hab grad kein Delphi zur Hand!)

Delphi-Quellcode:
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;
[..]
Hoffe das klappt.

Auch wenn ich glaube, dass ein PC ( noch ) zu ungenau ist für diese Aufgabe,
MfG
Thomas

Stresslein 4. Jun 2005 16:49

Re: Metronom-Software -- Brauche Hilfe
 
irgendwie funktioniert das nicht so... hat jemand weitere vorschläge??

Stanlay Hanks 4. Jun 2005 17:30

Re: Metronom-Software -- Brauche Hilfe
 
Was funktioniert denn nicht?

Stresslein 5. Jun 2005 16:33

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:
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.
wäre toll wenn mir jemand helfen kann

Dax 5. Jun 2005 16:47

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.

Stresslein 5. Jun 2005 16:59

Re: Metronom-Software -- Brauche Hilfe
 
wie definiere ich dann das tempo??
mit
TimeBetweenTicks := 6000; ??

Dax 5. Jun 2005 17:17

Re: Metronom-Software -- Brauche Hilfe
 
Definieren wir ein bpm für die QPC-Methode wie folgt:
Delphi-Quellcode:
var
  Frequency, TicksPerMinute: Int64;

QueryPerformanceFrequency(Frequency);
TicksPerMinute := Frequency * 60; // Frequency ist in Hz angegeben == Ticks pro Sekunde
Dann kannst du für eine beliebige bpm-Zahl einfach ausrechnen:
Delphi-Quellcode:
var
  bpmTicks: Int64;

bpmTicks := TicksPerMinute div Deine_bpm_Zahl;
div ist hier hinreichend genau, da bei neuen Rechnern Frequency etwas um 3 MHz ist, also ziemlich viel ;)

Stresslein 5. Jun 2005 17:44

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.
Seite 2 von 3     12 3      

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