Cartwall ändert selbstständig die Belegung

Hallo,
ich nutze die Cartwall mit einer Miditastatur ( belegt sind 29 Tasten ).

Wen ich eine neue Cartwall mit Belegung erstelle diese abspeicher dann funktioniert alles bestens Stundenlang ohne Probleme.

Sobald ich aber das Programm beende und neustarte dann lädt das Programm zwar meine Cartwall mit der vorher gespeicherten Belegung aber dann geht das Chaos los…

Sobald ich über Tastatur einen Jingel spiele ersetzt das Programm anschließend den Platz mit irgendeinem anderen Jingel !!! und das wahllos.

Auch ein neues reinladen der Cartwall ändert dann nix mehr wieder das gleiche Problem der Speicherplat z.B. 12 wird dann einfach durch ein anderen Jingel ersetzt usw. usw.

Erst wen ich die Belegung wieder komplett NEU mache dann funktioniert alles bis ich das Programm wieder schließe.

Ist hier etwas bekannt ?

mfg
Mike

Ach so Version 4.2.o

Kann es sein, dass Du auf einem Jingle-Player mehrere Jingles hinterlegt hast?

zu erkennen an 1/2 oder 1/5 usw.

Hallo,
nein ist nicht der Fall.

Hab jetzt auch nur 1 Cartwall mit Belegungen auch hier das gleiche aber es ist kein Schema erkennbar mal wird Player 4 geändert dann 12 usw. usw. also nicht jedesmal das gleiche. Jedenfalls bekomme ich nach dem erneuten Programmstart meine eigentliche Cartwall nicht zurück. Und bei 29 Belegungen nervt es etwas diese immer neu zu machen.

cu
Mike

Von alleine tut mAirList das sicher nicht. So ein Fehler wäre sicher bekannt (und längst behoben).

Poste doch mal bitte den Inhalt einer deiner .mlc-Dateien, bei denen das passiert, hier im Forum als Text.

Hallo,
ich versuche mal das Problem mit 2 Bilder zu verdeutlichen.

Zunächst kurze Beschreibung, also ich habe die Player in der Cartwall mit versch. Jingel usw. belegt bis zur Zeit Pos. 22 und als Jingel.mlc gespeichert und als Favorit angelegt ebenfalls wurde die Datei beim Programmstart eingetragen.
Hinzufügen muss ich das es vorher mal andere Cartwalls gab die aber komplett gelöscht wurde, so das jetzt nur eine im Gebrauch ist.

Als die Cartwall " jingel.mlc " neu angelgt wurde ging alles wunderbar jeder einzelne Player konnte beliebig über Midi gesteuert werden.
Was nun allerdings passiert ist das beim neuen Programmstart zwar die Cartwall mit der Vorlage jingel.mlc geladen wird diese auch alle da sind nur wen ich jetzt einen Player per Midi starte passiert folgendes dazu Bild 1 Player Nummer 10 belegt mit " der Hit Tipp " ändert die Belegung nachdem er abgespielt wurde in " Die Hits von Gestern bis Heute " Bild 2 Der Jingel ist eigenlich schon im Player 17 vorhanden !

Hier nun Bild 2 mit geändertem Player 10

Und das passiert auch bei anderen Player in der Cartwall das nach dem abspielen ein neuer Jingel hinterlegt ist.

Da ich die Datei nicht als Text einfügen kann zu lang häng ich es als .pdf ran.

cu
Mike


jingel.pdf (311 KB)

Laut Screenshot aber sehr wohl…

Das mag ja sein aber ich habe nix doppelt belegt, hab doch geschrieben das es vorher andere Belegungen gab diese aber gelöscht wurden.

Also noch einmal es gibt zur Zeit nur eine Cartwall mehr nicht ! Keine Ahnung wo das Programm die anderen Informationen her nimmt. Mehr als löschen und Neuanlegen kann ich nicht wen das Programm dann mit irgendwelchen alten Leichen arbeitet wie soll ich das Wissen ?

cu
Mike

P.S. Ein Lösungsansatz wie man das abstellt wäre mal hilfreich !

Auf dem Screenshot sieht man sehr eindeutig bei diversen Playern, insbesondere Nr. 4 und 10, dass dort mehrere Titel im Stack sind, zu erkennen an der Anzeige “[1/…]”.

Klick mal mit der rechten Maustaste drauf und wähle “Stack editieren”.

Da brat’ mir doch einer einen Storch! Genau diese Anzeigen sind mir am vergangenen Wochenende bei meiner Cartwall aufgefallen und ich habe mich gefragt, wofür die wohl gut sein mögen - jetzt habt Ihr mir meine Frage beantwortet, bevor ich sie gestellt habe :wink:

Bringt mich aber zu einer anderen Frage: wie kommt es dazu? Ich war nämlich bis jetzt eigentlich der Ansicht, nur eine Datei in jedem meiner Player geöffnet zu haben, dann habe ich die gesamte Belegung als .mlc abgespeichert, aber beim öffnen sehe ich dann mehrere Player mit [1/x] - und ich habe keine Ahnung, wieso.

Ich schaue mir das heute abend auch nochmal genauer an, momentan bin ich unterwegs.

LG

McCavity

Versehentlich? Am ehesten indem man mehrere Dateien/Elemente markiert und sie in einen Cartplayer zieht. Dann wird ein Stack gebildet.

Hi, Torben,

das wird’s gewesen sein, denke ich - ich habe mir die Stacks mal angeschaut und es war immer zweimal die gleiche Datei drin (deshalb habe ich auch beim Abspielen nie etwas bemerkt ;-)). Gefahr erkannt, Gefahr gebannt - nun weiß ich, worauf ich achten muß, danke nochmal :slight_smile:

LG

McCavity

Das gleiche ist mir auch aufgefallen.

Ich habe gerade Mairlist gestartet und es sind sofort einige Player doppelt belegt.
Wechsel ich den Reiter und springe wieder zurück auf die vorherige, ist alles wieder ok.

Ich habe 10 Reiter für die Favoriten und pro Reiter habe ich 24 Player.

Mir ist aufgefallen, wenn ich mit der Preh Tastatur nach dem Start von Mairlist zügig die Reiter der Cartwall wechsel der noch nicht geladen wurde, dann passiert das auch. Also es sieht so aus, als wenn Mairlist beim schnellen Wechsel die Seiten übereinander legt und die beiden seiten in ein Player legt. Wenn ich langsam von Reiter zu Reiter wechsle, dann läd die Cartwall die Player alle ein. Wenn ich das bei jedem Reiter langsam gemacht habe, dann geht es beim nächsten Wechsel sehr zügig und es kommt nichts mehr durcheinander.
Wenn ich Mairlist neu starte ist es wieder so wie ich es schon beschrieben habe. Also ich muss vorher immer alle 10 Cartwalls durchgehen und laden lassen, damit beim senden alles zügig läuft.

Ich hoffe der kleine Bericht hilft etwas weiter bei der Analyse.

Grüsse aus HH

Ah, stimmt, das kann sein.

Den Hintergrund-Lade-Prozess eines Players kann man leider nicht unterbrechen. Wenn der Player also zum Zeitpunkt des Umschaltens im Status “LOADING” ist (oder gerade spielt), dann kann er vom neuen Cartset nicht neu belegt werden. Bei sehr schnellem Umschalten kann das schonmal vorkommen.

Ich wäre jetzt davon ausgegangen, dass der Player dann einfach seinen alten Inhalt behält. Stattdessen scheint das andere Element einfach in den Stack zu wandern. Muss ich mir mal angucken.

Ich gebe zu, das ist etwas unglücklich so. Die Alternative wäre, beim Umschalten zwischen den Sets immer erst auf alle Player zu warten, die gerade noch geladen werden. Wäre das sinnvoll?

hrhr ich ahne, wo eine (technische) Schwierigkeit liegen könnte - der “load” Befehl an’s OS ist “blocking”, richtig? Normalerweise gibt es (wenn ich mich an die POSIX Spezifikation richtig erinnere) auch einen non-blocking Systemcall - dann könnte man beim Umschalten ein globales Flag “HALT_LOAD” oder sowas setzen und die Player während der Laderoutine dieses periodisch abfragen lassen und, falls gesetzt, den Vorgang abbrechen - aber mit dem Non-Blocking Call (oder auch asynchronem laden) ist man gleich wieder im Reich des Schmerzes mit Resource locking und anderen Schweinereien… :wink:

Bei “Play” halte ich es für extrem sinnvoll, auf den (oder die) spielenden Player zu warten - möglichweise könnte man das so lösen, daß man spielende Player an’s Ende der Schlange setzt und dann erst die nicht spielenden Player zum neuladen animiert und anschließend wartet, bis die einzelene spielenden Player fertig sind, bevor man auch auf diesen den Load-Befehl nachholt.

Auf alle zu warten könnte unangenehm werden, wenn’s schnell gehen muß - dann sollte man den Umschaltbefehl akzeptieren und irgendwie optisch anzeigen (Überschrift blinkt oder sowas) und dann nach dem Stopp des letzten Players den Befehl ausführen, damit der fahrende Moderator keine Panik kriegt und sich fragt, warum mAirlist auf seinen Befehl nicht reagiert - das löst aber immer noch nicht das Problem, das Cartplayer ja auch längere Elemente beinhalten könnt (Vielleicht Werbespots von 30 oder 45 Sekunden oder sowas) - und wenn man erst 30 Sekunden warten muß, ehe die Player umschalten, dann kan das schon sehr unangenehm sein, weil vielleicht ein Element aus der anderen Bank früher abfespielt werden soll.

Egal, wie man’s macht, es ist eh falsch :wink: Die komplizierteste (aber auch flexibelste) Lösung wäre, denke ich, das Load Problem über asynchrones Laden (so das unterstützt ist) mit der Möglichkeit zum abbruch über ein Flag zu lösen und das Play Problem über Queueing - aber erinnere an die Welt des Schmerzes (a.k.a. Resource Locking) - asynchron ist immer aasig und ich bin heilfroh, daß meine Rolle hier darauf beschränkt ist, wilde Ideen in den Raum zu werfen, und ich das nicht selber programmieren muß :wink:

LG

McCavity

P.S.: eine Ergänzung noch, die mir gerade eingefallen ist - würde auch Programmieraufwand bedeuten, wäre aber möglicherweise eine elegante (Teil-Lösung) des Load-Problems: mAirlist cachet ja eh Mediendateien im RAM (was auch sehr sinnvoll ist). Man könnte dann doch auch hergehen und die komplette (oder Teile der) Cartwall cachen, oder nicht? Wenn man das Ganze mit einem intelligenten Memory-Management-Dialog ausstattet (“Bei derzeitiger Belegung würde der Cartwall Cache xyMB groß, die größte Datei ist yzMB groß, der Durchschnitt za MB bei einer Standardwabweichung von abKB” (ja, ich übertreibe ;-)) und man dann auswählen könnte, welche Dateien beim Start von mAirlist gecached werden sollen (Dialog enthält alle geladenen .mlc, gespeichert wird die Information “Caching ja/nein” in der jeweiligen .mlc) könnte mAirlist beim Start schonmal alle markierten Dateien laden - und ein Umschalten wäre dann nur noch das verbiegen eines Pointers ('tschuldigung, ich komm aus der C-Welt und hab keine Ahnung von Delphi - ich kenn noch den Vorläufer Turbo-Pascal, aber auch nur bis zur Version 5.5 (zwar die erste mit Objektorientierung, aber so weit war ich damals noch nicht… ;-)) - dehalb schreib ich nur so High-Level-Quatsch und hab eigentlich keinen Schimmer, ob sich das in Delphi so umsetzen ließe ;-))

mAirList kommuniziert nicht direkt mit dem Betriebssystem sondern öffnet die Dateien über eine Funktion der BASS.DLL (BASS_StreamCreateFile). Dieser Aufruf lässt sich nicht abbrechen, weil mAirList dort absolut nicht eingreifen kann.

Allerdings ist es schon jetzt so, dass die Dateien asynchron geladen werden; dazu hat jeder Player einen zusätzlichen Thread.

Vereinfacht erklärt: Wenn ich eine Datei im Player öffne, merkt sich der Player erstmal nur den Dateinamen, geht in den Status “Loading”, und schiebt dann den genannten Hintergrund-Thread an. Der Thread führt BASS_StreamCreateFile durch, und wenn dies abgeschlossen ist, wechselt der Player in den Status “Loaded” (bzw. “Error”, wenn ein Fehler aufgetreten ist).

Da BASS_StreamCreateFile nicht abgebrochen werden kann (und man auch den Thread nicht einfach abschießen sollte), weigert der Player sich zu schließen, solange er im Zustand “Loading” ist.

Die ideale Lösung wäre es, wenn man den Lade-Thread im Bedarfsfall “an den Nagel hängen” könnte. Also in irgendeinen Bereich des Programms “abschieben”, wo er noch zuende laufen darf, bis er sich dann beendet. Währenddessen kann der Player einen neuen Thread für das neue Element starten.

Einen ähnlichen Mechanismus benutzt mAirList jetzt schon, wenn in der Automation ein Element noch zuende ausblenden soll, der Player aber schon für das nächste Element benötigt wird.

Grundsätzlich ist das kein großes Problem, allerdings ist das ein etwas gravierenderer Eingriff in den Code, so dass ich das bitte auf die nächste große Version (4.3 etc.) verschieben würde.

Ah! Jetzt verstehe ich das. Ja, wenn die BASS API keine asynchrone Ladefunktion liefert, dann hast Du gelitten… aber völlig d’accord, sowas bricht man nicht über’s Knie - zumindest mir reicht das, wie’s im mOment läuft, völlig aus, mit dem Rest kann ich mich arrangieren :slight_smile:

LG

McCavity