was mach ich da falsch?
[error] (41:41): Type missmatch
ohne 41, 42 & 47, 48 geht das script perfekt!
[code] if (n.GetNotificationType = ntMask) then
// we want to be notified when players start
SetNotificationTypes([ntPlayerStart])
else
if (n.GetNotificationType = ntPlayerStart) then begin
// interface #1 contains a reference to the playlist item
pi := IPlaylistItem(n.GetInterface(1));
pi2 := CurrentPlaylist.GetItem(2);
pi3 := CurrentPlaylist.GetItem(3);
pi4 := CurrentPlaylist.GetItem(4);
pi5 := CurrentPlaylist.GetItem(5);
GetDuration liefert den Wert als Zahl (int64) zurück (in Einheiten von 1/10,000,000 Sekunden), nicht als String. GetStartTime die Zeit als TDateTime (Delphi-eigenes Format: Tage seit dem 1.1… Du musst beides von Hand in einen String konvertieren. Zum Beispiel so:
Die Startzeit kannst du ganz einfach an FormatDateTime übergeben:
Die Laufzeit musst du vorher in einen TDateTime umwandeln. Das ist ein sehr kranker Delphi-Typ: Eine Fließkommazahl, die die Zeit in Tagen seit dem 30.12.1899 angibt. Das Datum ignorieren wir hier mal, und um die Länge in die richtige Einheit zu kriegen, müssen wir sie erst durch 10.000.000 teilen (dann haben wir Sekunden) und dann nochmal durch 246060. Danach können wir wieder FormatDateTime verwenden:
PS: Was mir an deinem Script noch auffällt: Du solltest überprüfen, ob die Playlist auch wirklich noch genügend Einträge hat, sonst gibt das GetItem(2) usw. eine Exception.
hab eine ganz andere Frage:
Gibt es eine Möglichkeit, ein Script zu schreiben, mit dem man beim Drücken auf die PFL Taste eines Steuerbefehl (z.B. auf der Com Schnittstelle) anspricht, damit im Studio die Boxen umgeschalten werden.
Weiß nicht, ob das so klar ürber kam, was ich meinte. Das Endergebnis sollte sein:
Man drückt auf PFL (egal in welchem PLayer/Playlist/cart) und es wird ein Steuersignal geschickt, das eine Schaltung aspricht, die die Studioboxen auf die PFL Soundcard umschaltet. Das ganze sollte beim Beenden von PFL wieder zurück gehen.
Wichtig ist, dass man nur eine PFL Soundkarte dabei verwendet (dann wirds ja auch einfacher)
Ja, das geht. Ein solches Script findest du im mAirList-Ordner, es heißt “IOWarriorPFLSwitch.mls” und verwendet den IO-Warrior zum Ausgeben der Umschaltsignale. Du müsstest in diesem Script also nur noch die IO-Warrior-Befehle durch das austauschen, was deiner Umschalthardware gerecht wird.
Wie gedenkst du das denn auf Hardware-Seite zu realisieren?
danke für die schnelle antwort.
ich denke an solch eine Lösung: http://www.conrad.at/goto.php?artikel=967720
dahinter eben eine art weiche - habs aber noch nicht ganz durchgedacht.
Es ist halt eine sehr angenehme Art zu arbeiten, wenn die Boxen automatisch auf PFL umgeschaltet werden
Hab die Funktion und Methoden so verstanden:
ComPort.SetParameters()
setzt Parameter wie z.B. Baud Rate usw
ComPort.Open()
öffnet einen Com Port (z.B. 9 für USB - wobei ich nicht weiß, ob USB so funkt wie seriell)
ComPort.SendStr()
kann ich hier nun einen Befehl schicken (und zwar so einen wie ich ihn in der Referenz der IO Karte finde)?
Weiß nicht, ob ich das so verstanden hab, aber diese Funktion mit den Methoden müsste doch das obige Problem lösen können
Soweit alles richtig. SendStr erwartet einen String (z.b. SendStr(‘hallo’)), du kannst aber natürlich auch beliebige Bytes rüberschicken, das geht in Pascal so:
SendStr(#12 + #5 + #77);
sendet die Bytes 12, 5, und 77 (huch, mein Geburtstdatum!)
Die Routinen können Prinzipiell alle Schnittstellen ansprechen, die in der Systemsteuerung sichtbar sind. Dazu zählen auch USB-Seriell-Wandler, wenn die sich da brav eintragen.
Was hast du denn da für eine Karte? Normalerweise bringen USB-Relaiskarten nämlich ihre eigenen Treiber mit und stellen keine emulierte serielle Schnittstelle zur Verfügung.
haben tu ich noch keine, ich überleg mir nur eine zu kaufen…
entweder die: http://www.conrad.at/goto.php?artikel=967720
Die hat nur das Problem sie schaltet um, dafür hätt ich glaub ich schon die anweisung zuammen (so stehts zu mindest in der anleitung bzw. so les ichs raus)
procedure OnPFLOn(PlayerControl: IPlayerControl; Item: IPlaylistItem; PFLCount: integer);
begin
if PFLCount = 1 then
ComPort.SetParameters(19200, 8, “0”, 1);
ComPort.Open(1);
ComPort.SendStr(“3012”);
end;
Problem bei dieser Karte ist, dass die die Relais nur umschaltet und nicht ein oder aus - die Kontrolle ist nicht wirklich da
Da sieht die Programmierung wieder etwas komplizierter aus.
es geht mir ja wieder um das alte spiel - muting bei pfl.
wobei ich bin schon am überlegen, ob ich nicht einfach doch den io warrior nehme. denn meine “joystick steuerung” spinnt ein wenig. manchmal reagiert das mairlist nicht mehr auf die buttons - das liegt ja wohl nicht daran, dass ich den selben controller 3 mal habe (natürlich physisch 3 mal - sprich 3 mal das selbe game poad gekauft und herum gekötet) um 18 buttons anzusprechen.
ja das hab ich auch schon gehört - hmm ist echt schwierig - naja offenbar scheint der io warrior am geeignetsten - ist halt leider eine recht teure angelegenheit