Globaler Timer

Begonnen von TomPro, 20. März 2015, 18:42:42

Vorheriges Thema - Nächstes Thema

TomPro

Und wieder ein spezielles Problem, und auch hier glaub ich nicht an eine Lösung, versuchen will ich es aber trotzdem.

Da ich viel Progrock höre habe ich etliche Titel welche in mehrere "Sätze" eingeteilt sind (wie in der Klassik auch). Aus diesm Grun gibt es bei mir ein SUBSHEET Tag, ähnlich dem LYRIC Tag, in dem die Informationen wie folgt angegeben sind:
Zitat[00:00.00]I}} Overture
[03:04.00]II}} Feel the Lightning {{Instrumental
[08:37.62]III}} Black Gold
[13:58.63]IV}} Walking the Road
[17:10.55]V}} Desolation Days
[22:51.05]VI}} Lemon Looking Glass {{Instrumental
[27:45.50]VII}} Feel the Lightning (Reprise)

Mit mehreren WSHMod Fenstern greife ich nun auf diesen Tag zu, dabei werden
a) die Zeit
b) die Satznummer (der Teil zwischen der Zeit und "}} ")
c) der Subtitle
d) eventuelle Zusatzinformationnen (alles nach dem " {{")
verarbeitet.

Da das Sriptig maximal kontinuierlich im Sekunden-Tagt abgefragt werden kann habe ich bei den "Zeitwichtigen" abfragen immer noch eine Messung zwischen der aktuellen gespielten Zeit und der nächsten Subtitle-Zeit eingebaut. Beträgt die differenz der Zeiten WENIGER als eine Sekunde wird ein CountdownTimer mit der differenz initiiert, welche dann auch in einem feineren Bereich als im Sekundenrythmus abgefangen werden kann.

        if(NextSubtitleTime - fb.PlaybackTime < 1) {
            var ms = Math.round((NextSubtitleTime - fb.PlaybackTime) * 1000);
            window.SetTimeout(function(){on_SubTitle()}, ms);
        }

Dieses Konstrukt nutze ich in allen relevanten Fenstern, also laufen immer mehrer Timer.

Meine Überlegung ist jetzt ob ich nicht nur in einem Fenster einen Timer generieren kann aber in allen Fenster das erreichen dieses Timers erfassen kann. Ich hoffe ich habe mich verständlich ausgedrückt.

Gruß TomPro

TomPro

So, eine Lösung ist gefunden, und sooooooooooooo einfach  :crazy2:

Ein WSH Fenster dient als Master für all zeitrelevanten Vorgänge. dieses und nur dieses wird im Sekundentakt abgefragt
on_playback_time(time) {} bzw. on_playback_seek(time) {}
Durch den Trick mit dem Timer (s.o.) kann ich auch ein Ereigniss zwischen zwei Abfragen Millisekunden genau ermitteln. Kommt es jetzt zu einem Ereigniss, welches ich in anderen Fenstern auch abfangen will, so sende ich im Master ein:
window.NotifyOthers(name, info);

Mit der Funktion:
on_notify_data(name, info) {}
kann ich jetzt auf dieses Ereigniss reagieren. Dabei kann ich mit dem Übergabeparameter "name" abfragen ob die übertragene Infpormation für mich relevant ist z.B.
if (name == "new Sub Title")
und wenn ja so kann ich die info für das script auswerten.

Auf diese Art und Weise erzeuge ich nur in einem WSH Fenster permanente abfragung, und alle anderen warten nur noch darauf das sie angetriggert werden und erzeugen keine weiter last (hoffe ich).

Ich muss zwar jetzt etliche Fenster umschreiben, aber bis jetzt sieht es ganz gut aus und ich habe schon einige funktionierende scrips fertig.

Vielleicht kann jemand anderes ja mit dieser Information etwas anfangen.

Gruß TomPro