![]() |
AW: Timing problem
Zitat:
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 |
AW: Timing problem
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 |
AW: Timing problem
Ich möchte dann doch noch mal auf #1 zurückkommen:
Zitat:
Delphi-Quellcode:
durch ein simples
while GetTickCount < Tick + TempoWait do Winprocessmessages;
Delphi-Quellcode:
ersetzen. Dann sollte sich das ganze mit der Warterei gelöst haben.
Delay(Tick + TempoWait - GetTickCount);
Bernhard |
AW: Timing problem
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:
Danke trotzdem..
// 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; 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 |
AW: Timing problem
Und du setzt auch sobald die Schließen-Nachricht kommst dein "PlayingSong" auf FALSE?
Bernhard ADD: Zitat:
Delphi-Quellcode:
hin.
if not PlayingSong then
|
AW: Timing problem
Zitat:
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 |
AW: Timing problem
Das war ja nicht die Frage. Die Frage war, ob PlayingSong auf FALSE gesetzt wird, wenn WM_CLOSE bei dem entsprechenden Fenster ankommt?
Bernhard |
AW: Timing problem
Zitat:
Muss das nochmal setzen gestern hat es aufgrund der langen wartezeit durch den Loop nicht funktioniert. Gebe gleich bescheid ;) EDIT: Ich behandle die WM_CLOSE Message nicht. Unter ..
Delphi-Quellcode:
funktioniert es nicht.
WM_DESTROY:
begin if MidiTracker.PlayingSong then MidiTracker.PlayingSong := False; SaveINI; PostQuitMessage(0); Result := 1; Exit; end; Das Lied läuft noch währen PostQuitMessage(0); ausgeführt wurde. gruss |
AW: Timing problem
Du hast doch sicherlich irgendwo PLaystart und Playstop Procdure!
Du musst natürlich auch die Playstop Procedure aufrufen bevor du was beendest!:wink: alfold |
AW: Timing problem
Zitat:
Ich habe nur eine Play Procedure welche den Status False/True setzt die kann ich aber beim beenden der anwendung nicht verwenden weil dann ein neuer Zugriff auf meine DLL stattfindet und das Caption des Button auf Play gesetzt wird. Also muss ein SongPlaying = False reichen. Da ist irgendwas anderes im Bush Habe jetzt
Delphi-Quellcode:
WM_CLOSE Message noch hinzugefügt was eigentlich nicht notwendig ist..
ID_CLOSE:
begin // Anwendung beenden Sendmessage(WinHandle, WM_CLOSE, 0, 0); Sendmessage(WinHandle, WM_DESTROY, 0, 0); //PostQuitMessage(0); Result := True; Exit; end; Jetzt schließt das Fenster aber die IDE von Delphi hängt. Ist ein zeichen das irgendwas noch nicht richtig beendet wurde. Nach PostQuitMessage PS: Die Probleme habe ich aber nicht wenn der Song nicht läuft. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 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