AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Timing problem

Ein Thema von EWeiss · begonnen am 7. Apr 2011 · letzter Beitrag vom 8. Apr 2011
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Timing problem

  Alt 8. Apr 2011, 16:27
Missvertändniss! Playnotes meine ich im Timer evtl überflüssig! Weil Du damit nur "die Melodie" spielst, hat aber mit der Anzeige im eigentlichen nichts zu tun
Denn abspielen kannst Du auch ohne graphic das meint ich damit!

alfold
Nein .. Ohne Grafik geht gar nichts das Programm ist so aufgebaut das x,y Koordinaten mit der AbtastLeiste
aufgenommen werden und mit einem array verglichen werden wo einmal der erste eintrag für die Spur von 0..7 steht
und der zweite 0..1000 für die maximale eingabe an noten pro Spur.

gruss
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Timing problem

  Alt 8. Apr 2011, 18:15
Da hast Du dir aber selbst das Problem gebaut!
Nenne mal Qauntisierung, ist reine Mathematik bei MIDI.
Die Graphic selber dient mir ja nur um evtl die Note genauer zuplatzieren. Taktanfang zb. oder wenn ich sie zu kurz gespielt habe ebend mal zu verlängern von 1/8 auf 1/4 zb ist also nur Hilfsmittel bei MIDI.
Das Du das Problem Lösen wirst da hab ich volles Vertrauen, nur der Ansatz, die Graphic in den Vordergrund zu setzen, anstatt auf das Eigentlich die MIDIEEVENTS (MIDIFILE)für den Aufbau der Graphic zu nutzen, halte ich nicht für gut!

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#3

AW: Timing problem

  Alt 8. Apr 2011, 18:34
Ich möchte dann doch noch mal auf #1 zurückkommen:
Zitat von EWeiss:
Delphi-Quellcode:
  // Starte den Song
  while PlayingSong do
  begin
    //Weiterlaufen bis die 16.tel Note (Pause) abgelaufen ist
    while GetTickCount < Tick + TempoWait do
      Winprocessmessages;

    Tick := GetTickCount;
    PlayNotes;
    DrawGraphics(WinHandle);
    hsi.nPos := StartX + XSizeMid;
    SetScrollInfo(WinHandle, SB_HORZ, hsi, True);
  end;
Du versuchst also die restliche Zeit damit abzuwarten, indem du immer wieder das System frägst, ob nicht irgendwelche Fensternachrichten da sind. Hier in der Mitte dieses Threads wurde auf die "richtige" nonvcl-übersetzung des Delays hingewiesen. Jetzt kannst du ganz einfach dein ressourcenfressendes while GetTickCount < Tick + TempoWait do Winprocessmessages; durch ein simples Delay(Tick + TempoWait - GetTickCount); ersetzen. Dann sollte sich das ganze mit der Warterei gelöst haben.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Timing problem

  Alt 8. Apr 2011, 19:17
Da tut sich rein gar nichts..
Das mag zwar resourcen schonender sein aber mein Window kann ich trotzdem nicht schließen während der Song
am spielen ist.

Delphi-Quellcode:
procedure TMidiTracker.Delay(Milliseconds: Integer);
var
  Tick: DWord;
  Event: THandle;
begin
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWord(Milliseconds);
    while (Milliseconds > 0) and
          (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Winprocessmessages;
      if PlayingSong = False then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
  finally
    CloseHandle(Event);
  end;
end;

Delphi-Quellcode:
  // Starte den Song
  while PlayingSong do
  begin
    //Weiterlaufen bis die 16.tel Note (Pause) abgelaufen ist
    //while GetTickCount < Tick + TempoWait do
    // Winprocessmessages;

    Delay(Tick + TempoWait - GetTickCount);

    Tick := GetTickCount;
    PlayNotes;
    DrawGraphics(WinHandle);
    hsi.nPos := StartX + XSizeMid;
    SetScrollInfo(WinHandle, SB_HORZ, hsi, True);
  end;
Danke trotzdem..

EDIT:
OH sorry doch tut sich mehr als gedacht..
Von 25% CPU runter auf 1%

Aber warum kann ich mein Window nicht schließen.
grrrrr....
gruss

Geändert von EWeiss ( 8. Apr 2011 um 19:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#5

AW: Timing problem

  Alt 8. Apr 2011, 19:19
Und du setzt auch sobald die Schließen-Nachricht kommst dein "PlayingSong" auf FALSE?

Bernhard

ADD:
if PlayingSong = False then Exit;
Iiihhh. Da muss ein if not PlayingSong then hin.
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Timing problem

  Alt 8. Apr 2011, 19:29
Und du setzt auch sobald die Schließen-Nachricht kommst dein "PlayingSong" auf FALSE?

Bernhard

ADD:
if PlayingSong = False then Exit;
Iiihhh. Da muss ein if not PlayingSong then hin.
Jup habe es auch gerade bemerk
Danke für den Hinweis.

Jo wenn der Song zu ende ist bzw der Button Stop gedrückt wird
dann wird die False gesetzt

EDIT:
Muss jetzt noch mal genau die Windows Messagen prüfen
Warum das Window nicht schließt.
Geht erst wenn der Song beendet ist (sagte ich aber schon)


gruss

Geändert von EWeiss ( 8. Apr 2011 um 19:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: Timing problem

  Alt 8. Apr 2011, 19:35
Das war ja nicht die Frage. Die Frage war, ob PlayingSong auf FALSE gesetzt wird, wenn WM_CLOSE bei dem entsprechenden Fenster ankommt?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 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