Playerstate change interrupt handler in falscher Reihenfolge

Hallo Torben,

mir ist aufgefallen, dass die Playerstates empty, stop und loaded nicht in der korrekten Reihenfolge ausgelöst werden. Das geschieht so schnell, dass die durcheinander sind. Habe das auch über einen TCP abgegriffen und mit Timestamps verifiziert.
Kann man da noch was machen, damit die Playerstates dann korrekt sind?

LG Julian

Gibt es hierzu etwas Neues?

Nein, keine Zeit gehabt mir das anzuschauen. Ich kann es mir auch nicht erklären, da die internen Nachrichten, die dann auch zu den Scripts gelangen, eigentlich immer in der richtigen Reihenfolge zugestellt werden sollten.

Kannst du mal das Script posten, mit dem du meinst den Fehler festgestellt zu haben?

[quote=“JuneMox, post:1, topic:11913”]Hallo Torben,

mir ist aufgefallen, dass die Playerstates empty, stop und loaded nicht in der korrekten Reihenfolge ausgelöst werden. Das geschieht so schnell, dass die durcheinander sind. Habe das auch über einen TCP abgegriffen und mit Timestamps verifiziert.
Kann man da noch was machen, damit die Playerstates dann korrekt sind?

LG Julian[/quote]
das ist genau mein Problem, hinzu kam bei mir, dass im Assist Modus die gespielten Songs nicht in den Papierkorb landeten und der Player so zwischen dem Titel 30.-35 Minute an den Anfang der Playliste rutschte und den Anfang nochmal abspielte.

Windows 10 … Mairlist 6.1.8 Homestudio

Wir benutzen für die Verbindung mit Midi-Geräten eine eigene Software, das Script kann ich hier leider nicht veröffentlichen. Wir haben die vom TCP eingegangenen Playerstates aber in Echtzeit abgegriffen, mit Timestamps versehen und festgestellt, dass mairlist die Playerstates nicht in der korrekten Reihenfolge sendet, sondern beispielsweise loaded, stop, empty. Die Reihenfolge veriiert immer.

Kommst du damit weiter oder brauchst du noch mehr Infos?

Alles, was ich brauche, ist ein 48-Stunden-Tag…

Bitte verwende mal dieses Hintergrundscript…

function StateToString(iState: TPlayerState): string;
begin
  case iState of
    psEmpty: Result := 'Empty';
    psLoading: Result := 'Loading';
    psLoaded: Result := 'Loaded';
    psPlaying: Result := 'Playing';
    psFading: Result := 'Fading';
    psEOF: Result := 'EOF';
    psError: Result := 'Error';
    psPaused: Result := 'Paused';
    psStopped: Result := 'Stopped';
  else
    Result := IntToStr(ord(iState));
  end;
end;


// Called when (playlist) player changes its state
procedure OnPlayerStateChange(PlaylistIndex: integer; PlayerIndex: integer; OldState: TPlayerState; NewState: TPlayerState; Item: IPlaylistItem);
begin
  SystemLog('Player ' + IntToStr(PlayerIndex) + ' old: ' +StateToString(OldState) + ', new: ' + StateToString(NewState));
end;

…und poste dann einen Auszug aus dem Systemprotokoll von einer Situation, von der du meinst, dass die Reihenfolge nicht stimmt. (Tipp: Man kann im Systemprotokoll-Fenster Einträge markieren und mit Strg+C als Text in die Zwischenablage kopieren.)

So richtig ans Laufen bringen konnte ich das Script von dir glaube ich nicht, das Systemprotokoll hat mir aber im Automationsmodus Folgendes ausgespuckt:

24.01.2019 23:17:57 Playlist Start: D:…\Fatboy Slim - Right Here Right Now.mp3
24.01.2019 23:18:23 Playlist Start: D:…\Uncle Kracker - Follow Me.mp3
24.01.2019 23:18:25 Playlist Stop: D:…\Fatboy Slim - Right Here Right Now.mp3 (28 seconds)

Die Zeiten vom Start/Stop sind leider nicht ganz richtig :frowning:

Das von mir gepostete Script als irgendwas.mls speichern und dann in der Konfiguration als Hintergrund-Script registrieren. Dann sollten die Meldungen erscheinen.

Es wird geladen, aber außer der oben genannten Playlistinformation steht leider nichts im Systemprotokoll. Lade ich das Script manuell kommt die Meldung “Error running script: [Error] (1:1): Unexpected end of file”.

Gibt es eine Lösung wie ich das Script zum Laufen bringen kann?

Das kann nicht sein, es MUSS etwas ausgeben. Tat es bei mir jedenfalls.

Mag jemand anders es testen bitte?

Hallihallo,

ich brauche kurz jemanden, der mit das folgende Script mal bitte bei sich ausführt. Das Script ist von Torben, funktioniert bei mir aber leider nicht. Liegt es an meinem mAirList oder dem Script?
Das hier ist der Code:

function StateToString(iState: TPlayerState): string; begin case iState of psEmpty: Result := 'Empty'; psLoading: Result := 'Loading'; psLoaded: Result := 'Loaded'; psPlaying: Result := 'Playing'; psFading: Result := 'Fading'; psEOF: Result := 'EOF'; psError: Result := 'Error'; psPaused: Result := 'Paused'; psStopped: Result := 'Stopped'; else Result := IntToStr(ord(iState)); end; end;

Das Script sollte Playerstates - also Start, Stopp, Empty und Loaded, sowohl im Assist- wie auch im Automationsmodus im Systemlog anzeigen.
Vielen Dank für deine Unterstützung!

Hier noch der Link zum originalen Beitrag: https://forum.mairlist.com/index.php/topic,10061.0.html

Liebe Grüße,
Julian

Warum ein neuer Thread dafür?

Und wenn ich mir deinen kopierten Text so anschaue, dann bin ich fast der Meinung, du hast nicht das komplette Script kopiert :wink: Scrollbalken beachten!

Ja, gut möglich, dass ich den Scrollbalken nicht gesehen habe im Browser. Irgendwo in meiner Wohnung muss aber noch dieser Internetführerschein aus der 3. Klasse liegen… :smiley:

Nehme ich denn dein Script als eigenständige .mls? Weil dann bekomme ich - selbst mit vollständigem Script - den o.g. Error. Habe das Script mal hochgeladen, oder fehlt da was?


playerstatechangetest.mls (788 Bytes)

In der Konfiguration als Hintergrund-Script registrieren.