Delphi-PRAXiS
Seite 3 von 3     123   

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)

Stresslein 5. Jun 2005 19:00

Re: Metronom-Software -- Brauche Hilfe
 
man könnte auch genauso sagen wie wende ich deine Definition der bpm von oben an??

Dax 6. Jun 2005 10:30

Re: Metronom-Software -- Brauche Hilfe
 
Also, du hast die Definition eines bpm. Entspricht wie gesagt einem Schlag pro Minute. Die Variable "bpmTicks" speichert, wie viele Ticks eines Taktgebers im Rechner einer Minute entsprechen. Oder wir stellen eine Frage: Wenn ich zwischen zwei Schlägen (1 bpm) eine Minute warten will, wie groß muss der Unterschied zwischen dem QueryPerformanceCounter-Wert des letzten Schlags und jetzt sein? Nun, ganz genau "bpmTicks". Willst du 2 Schläge (2 bpm) haben, wäre es dann logischerweise "bpmTicks div 2" ;)

Hier mal ein kleiner Code, der ungefähr tun sollte, was du willst.

Delphi-Quellcode:
var
  TempTicks, LastBeatTicks: Int64;
  bpm: IntegerM

bpm := StrToInt(Edit.Text); // bpm enthält nun deine gewünschte bpm-Zahl
QueryPerformanceCounter(LastBeatTicks);
DoBeat; // Am Anfang gleich den ersten Schlag abspielen
while MetronomeRunning do // solange wie das Metronom laufen soll..
begin
  QueryPerformanceCounter(TempTicks);
  if SameValue(LastBeatTicks - TempTicks, bpmTicks div bpm, Frequency div 10000) then
  // mit SameValue (unit Math) überprüfen wir, ob die Zeitdifferenz zwischen dem letzten Beat
  // und jetzt ungefähr mit der Zeit übereinstimmt, die zwischen 2 Beats liegen soll.
  // Frequency div 10000 heißt hier: Selbst, wenn die Werte noch 100µs auseinander liegen,
  // wird angenommen die Werte seien gleich
  begin
    DoBeat;
    LastBeatTicks := TempTicks;
  end;
end;
Der Code ist ungetestet, sollte aber funktionieren.

Stresslein 7. Jun 2005 15:34

Re: Metronom-Software -- Brauche Hilfe
 
also ich nehme an DoBeat ist dann meine Funktion dass die Wavdatei "Klick" abgespielt werden soll. Ebenso ist (while) MetronomRunning die Schleife, wie lange alles gemacht werden soll, also wenn ich reinschreib while panel1.caption='Metronom ON' do... wird solange alles in der schleife gemacht, bis panel1.caption irgendeinen anderen Wert hat. Geh ich davon richtig aus?? Weil ich habs jetzt so ausprobiert aber irgendwie passiert garnix wenn ich auf button1 drücke. es werden keine fehlermeldungen beim compilen angezeigt nur es geht halt nix^^ woran kann das liegen? ich werde gleich mal die unit zeigen!

Stresslein 8. Jun 2005 14:14

Re: Metronom-Software -- Brauche Hilfe
 
Delphi-Quellcode:
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.
Bitte nicht lachen wenn ich irgendwelche saublöden Fehler gemacht habe^^ bin noch im anfängerstadium und möchte jetzt soviel programmieren wir möglich (learning by doing...)
naja also ich hoffe ihr könnt mir helfen! wie gesagt es kommen keine fehlermeldungen aber irgendwie gehts trotzdem nicht

Stresslein 10. Jun 2005 15:17

Re: Metronom-Software -- Brauche Hilfe
 
gibts eigentlich noch ne bessere möglichkeit den click-sound abzuspielen?

Stresslein 29. Jun 2005 17:37

Re: Metronom-Software -- Brauche Hilfe
 
ich habe immer noch keine lösung warum das nicht geht, vllt kann mir jemand helfen?? wäre sehr dankbar...


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Seite 3 von 3     123   

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