Titel aus einem Ordner hintereinander abspielen

Hey Community, wir haben ein Problem…

Es gibt einen Ordner dieser nennt sich: DJ Mix
Darin sind Files mit jeweils 30 Minuten Mixe

Files Namen 1- 80 bedeutet 20 Stunden Musikmixe…

Diese sollen jetzt nacheinander angespielt werden…

Stunde soll so aufgebaut sein

00:00 Nachrichtencontainer
00:03 Start file 1 aus Order
00:29 Werbung
00:30 Beliebiger Jingle
Start file 2 aus gleichem Ordner

Nächste Stunde gleiches Prozedere
Nur dann file 3 gleichem Ordner
Und dann 4 aus gleichem Ordner…

Und dass Stunde für Stunde bis ich wieder an 1 komme und dann wieder alles von neuem…

Habt ihr eine Lösung?.

Zunächst würden mir zwei Szenarien schwammig einfallen.

Dazu braucht es allerdings noch mehr Infos zu Struktur Sendezeit etc. und Stundenvorlagen.

Wenn es eine feste Reihenfolge geben soll würde plump sagen dies von Hand zu planen. Gerade bei solch großen Elementen.

Automatisiert wirds Tricky.

Keywords wären:
Stundenvorlage
Bestimmte Elemente
Zeitliche Einschränkung
Virtuelle Ordner (bspw. 1. Halbe Stunde, 2. Halbe Stunde)

In wie weit läuft eure Automation jetzt bereits?

Auch Sachen wie Wiederholung oder Häufigkeit der Stunden ist wichtig. Werden die Dateien regelmäßig aktualisiert oder bleiben es immer die selben?

Ich grätsche hier mal rein, weil ich @hitmax aus unserem Support ergänzend (!) hier reingeschubst habe.
Begründung (außer dass hitmax super in unsere Community passt):

  • Wir brauchen jetzt mal die gesammelte Kompetenz und Schwarmintelligenz der Community.
    Torben und ich hatten auf die Schnelle keine Lösung in der Schublade, denn die Anforderung ist neu und eher selten in unserem Bereich.

  • Die Angelegenheit ist (leider) zeitkritisch.

Ich darf hitmax insoweit verpetzen, als er kein Hobby-Webradiomacher irgendeines Webradingens ist. Da steckt schon ein professionaller Plan dahinter.

So, zum Kern der Sache, auf dem ich heute Nachmittag schon herumgebrütet habe:

Das Hauptproblem besteht in der fixen Reihenfolge der Elemente.

  1. Stunde Elemente 1 & 2,
  2. Stunde Elemente 3 & 4,
  3. Stunde Elemente 5 & 6,
    (…)

In Stunde 40 sind es Elemente 79 & 80, und dann? Richtig, Element 1 & 2.

Diese feste Rotation soll beibehalten werden. Und da kommt die mAirList-Rotation ins rotieren :upside_down_face:, denn wir sind auf derart starre Schemata nicht vorbereitet.

Die Aufgabe besteht jetzt darin, die Elemente 1 bis 80 automatisch in exakt dieser Reihenfolge aus dem Ordner in die Datenbank-Playlist einzupflegen.
24 Stunden am Tag; morgen (Mittwoch) geht’s los. Kann man nichts machen, ist halt so.

Ob das nun mit einem Script, einem genial manipulierten Mini-Scheduler oder einem anderen Geistesblitz gelöst wird: Egal, Hauptsache es funktioniert.

Alles klar?
Danke euch.

Insofern es immer die selben Dateien sind, würde ich das tatsächlich über die Stundeneinschränkung machen die für Kampanien gedacht ist.

Zudem Virtuelle Ordner anlegen zb.

  1. Hälfte
  2. Hälfte

Elemente entsprechend einordnen der Zugehörigkeit
(Ungerade Erste Hälfte)
(Gerade Zweite Hälfte)

Gehen wir mal von 00:00 als Startpunkt aus.
Alle Elemente so einschränken, das diese nur zur besagten Stunde eingeplant werden dürfen.

Entsprechende Stundenvorlage

Stundenanfang
Zufälliges Element aus bestimmten Ordner A (1.Hälfte)
Trenner (Werbung) Harte Fixzeit? XX:30?
Zufälliges Element aus bestimmten Ordner B (2.Hälfte)
Stundenende.

Das wäre mir jetzt so mal aus der Hose geschossen.

Sollten Dateien, Elemente aktualisiert werden ist dieser Vorgang ja klar. Also Datei ersetzten und Haken setzten beim laden Cue Punkte neu setzen falls nötig.

Die Sache hat einen Haken: Ein 40-Stunden-Schema passt nicht so gut in die 24 Stunden, die ein Tag auf unserem Planeten nun mal so hat.
Sprich: Ausgehend vom Start um Mitternacht, sind am zweiten Tag um 17 Uhr die Elemente 1 & 2 wieder dran, und damit ist die Stundeneinschränkung Makulatur.

Grüße aus meinem Universum :night_with_stars:

Ach verdammt.
Stimmt. Ausserdem kommen noch die alljährliche Planetenverschiebungen dazu die in der Menschheit einen Jahreswechsel herbeiführen.
Orientiert nach einem angeblichen Mann der übers Wasser laufen kann.

Das kam mir auch gerade.

Was spricht dagegen, zu Beginn einer jeden Stunde ein Skript einen Zähler vorrücken zu lassen? Wenn er bei 40 angelangt ist, stellt er sich auf 1 zurück. Anhand dieser Variablen lassen sich die Dateien (bei ordentlicher Beschriftung, aber davon gehe ich aus) einwandfrei zuordnen.

Nebenbei würde es mich interessieren, wie schlimm es wäre, wenn die gegebene Reihenfolge mal nicht eingehalten würde. (Das hat damit zu tun, wie idiotenausfallsicher diese Zählerei sein müßte.)

Nichts.
Das kann auch gerne unter Zuhilfenahme der externen ID erfolgen (Stichwort: Ordentliche Beschriftung).

Wichtig ist halt nur, dass mit Hilfe des Zählers die Datenbank-Playlist gefüllt wird. Hier dürfte bereits eine Stundenvorlage bestehen, mit Werbung und Verpackungselementen. Das ganze muss vollautomatisch erfolgen, rund um die Uhr bzw. regelmäßig vorgeplant für mindestens einen Sendetag.

Soweit ich das verstanden habe, hat das mit den von dem (oder: den?) DJ angelieferten Mixen zu tun. Das kann @hitmax aber besser erklären. Aufgrund der knappen Zeit vielleicht später, wenn die ersten Sendetage am Start sind.

Muß es eine Datenbank-Playlist sein? Kann man nicht die aktuelle Playlist Stück für Stück nachladen?

@hitmax, da musst du ran, weil ich nicht weiß, wie deine Werbeblöcke eingebunden werden / sind.
Verpackungselemente sind dann noch so ein anderes Thema.

Erzeuge mittels Scheduler eine Playlist folgender Struktur:

00:00 [ Trigger                           ]

00:00 [ Nachrichten                       ]

00:03 [ Platzhalter A                     ]

00:29 [ Werbung                           ]

00:30 [ Jingle (von Scheduler ausgewählt) ]

00:31 [ Platzhalter B                     ]

00:59 [ Werbung                           ]

01:00 [ Trigger                           ]

01:00 [ Nachrichten                       ]

01:03 [ Platzhalter A                     ]

      usw …


Das Triggerelement setzt einen Befehl namens TRIGGER ab. Im Skript passiert daraufhin:

const
  PATH = 'C:\Path\to\';                          // Pfad zur Datei
  FILE = 'Zaehler.txt';                          // Dateiname

var
  Zaehler: integer;

procedure WriteZaehler(z: integer);
begin
  try
    sl := TStringList.Create;
    sl.Add(IntToStr(z));

    // Die Zahl sollte zweistellig mit führender Null geschrieben werden. Da weiß ich im Moment nicht, wie das vor sich geht; irgendeine FORMAT-Funktion

    sl.SaveToFile(PATH + FILE);                  // Zähler in Datei schreiben
  finally
    sl.Free;
  end;
end;

function ReadZaehler(z: integer): integer;
begin
  try
    sl := TStringList.Create;
    sl.LoadFromFile(PATH + FILE);                // Zähler auslesen
    result := StrToInt(copy(sl.Text, 1, 2));
  except
    result := 0;                                 // falls Datei nicht existiert, Zähler auf null stellen
  finally
    sl.Free;
  end;
end;

procedure OnExecuteCommand(Command: string);
var
  sl: TStringList;
begin
  if Command = 'TRIGGER' then
  begin
    Zaehler := ReadZaehler;
    Zaehler := Zaehler + 1;                      // Zähler um eins weiterschalten
    if Zaehler = 41 then
      Zaehler := 1;                              // Bei Erreichen von vierzig von vorne anfangen
    
    // retrieve Mix No. '(2 * Zaehler) - 1' and assign to next Platzhalter A

    // retrieve Mix No. '(2 * Zaehler)' and assign to next Platzhalter B 

    WriteZaehler;                                // Zähler in Datei schreiben
  end;
end;

begin
end.


Dieser Code ist völlig aus der Lameng geschrieben und somit ungetestet. Das Prinzip sollte aber klarwerden:

Sobald der Befehl TRIGGER abgesetzt wird (und das ist der Beginn einer jeden Stunde), wird aus einer Datei der Zähler ausgelesen. Falls diese Datei nicht existiert, ist der Zähler 0. (Ich hoffe, das funktioniert so.)

Alsbald wird der Zähler um 1 weitergeschaltet und anhand dessen die passende Mixdatei bestimmt und den jeweiligen nächsten Platzhaltern zugeordnet. (Wie das konkret zu geschehen hat, überlasse ich mal den Spezialisten. Das kriege ich aus dem Kopf jetzt nicht hin.)

Damit der Zähler auch bei Beendigung des Skripts nicht verloren geht, wird er in eine Datei geschrieben, deren Speicherort zu Beginn des Skripts definiert wurde.

Ferddisch. Zu Beginn der folgenden Stunde geht die Maschinerie von vorne los. Überschreitet der Zähler 40, so wird er wieder auf 1 zurückgestellt.

Interessant. Webradingens-Fuzzies haben also per se keinen professionellen Plan?
Tuff-täää-tufff-tääää :rofl: :joy: :champagne:

1 Like

Hier die Prozedur WriteZaehler wie sie aussehen sollte:

procedure WriteZaehler(z: integer);
var
  sl: TStringList;
begin
  try
    sl := TStringList.Create;
    sl.Add(IntToStr(copy(IntToStr(1000 + z), 2, 3)));
    sl.SaveToFile(PATH + FILE);                  // Zähler in Datei schreiben
  finally
    sl.Free;
  end;
end;

Damit wird die führene Null mitgeschrieben.

Und die Zeilen

var
  sl: TStringList;

müssen auch in die ´function ReadZaehler` eingefügt werden.

Zunächst vielen Dank für Eure Hilfe. Ich habe es nun über die Musikvorlage gemacht und diese angelegt mit zwei festen Elementen… und dann nach einander geplant… jetzt klappt es wunderbar!

Hallo Max,

manuell kann ich mir das prima vorstellen, aber wie bringst du denn der Automatik bei, nach Stundenvorlage 40 (ist das so?) wieder bei 1 anzufangen?

Riecht für mich immer noch nach einer Mega-Arbeit.

Würdest Du uns vielleicht an Details Deiner Lösung teilhaben, bitte?

Na klaro sehr gerne.
Ich habe unter Musikvorlagen mir eine Musikvorlage gebaut unter: Blog-Difinizion hinzufügen die beiden Musikfiles also 1 und 2 hinzugefügt und abgespeichert Als Stunde 1… Bitte aber darauf achten dass es eingestellt ist : Genaue Reihenfolge abspielen…

Ihn den Zuordnungen dann bei Stunde 00:00 Stunde1 bei Stunde 01:00 Stunde2 usw…

Bei den Studenvorlagenen angelegt:

Bestimmtes Element ( Nachrichten)
Auffüllen mit Musik
Jingle
Auffüllen mit Musik
Stundenende…

Auf die Idee hat mich Manuel gebracht! Vielen Dank dafür und vielen Dank für Eure Zahlreichen infos…

Die Reihenfolge ist also dem Scheduler überlassen? Und der macht das in der gewünschten Reihenfolge? Beinahe fast unglaublich! Wonach richtet der sich denn?