Werbeblöcke einfügen

Hallo Torben (und alle anderen, die mir auf diese Frage evtl. antworten können),

wir betreiben ein kleines Schülerradio und wollen im Juli ein paar Tage über Antenne senden. Und das ganze wollen wir durch Werbung finanzieren.
Die Werbung muss natürlich in die Automation mit eingebunden werden und Automatisch vor den Nachrichten kommen. So weit so gut, das Problem an der Sache ist aber, dass die Werbeblöcke (welche als m3u Playlist am Stück eingefügt und abgespeilt werden) nicht immer genau 2:30 Minuten lang sind sondern deren Länge schwankt. Wie realisiere ich es also, dass die Werbeblöcke genau ihre Länge vor der Vollen Stunde eingefügt und Abgespielt werden? Als Event oder so?

Viele Grüße
Beni

Du könntest mit der Fixzeit arbeiten, und so wird es gemacht:

  1. m3u als Playlist z.B. per Drag and Drop ins mAirList ziehen.
  2. Element (Playlist) doppelklicken
  3. Unter Optionen -> Starzeiten die gewünschte Fix-Zeit eintragen (Volle Stunde minus Länge des Werbeblocks)
  4. OK drücken
  5. In der Playlist erscheint nun ein =xx:xx:xx für die Fix-Zeit

Viel Spass mit mAirList

Da “Beni” was von “automatisch” schreibt, habe ich den Eindruck, dass dies alles in der Automation geschehen soll, während kein menschlicher Bediener anwesend ist. Das macht die Sache ungleich schwieriger (wenngleich, mit dem passenden Script, nicht unmöglich).

Vielleicht kannst du das ja mal klarstellen, Beni, und auch erzählen, wie bislang die anderen Audio-Elemente (Musik, Nachrichten-Opener usw.) in die Playlist geladen wird.

Wenn es sich doch um eine moderierte Strecke handelt, ist die einfachste Möglichkeit wohl tatsächlich, die Fix-Zeit von Hand einzustellen, oder die Werbung komplett von Hand zu fahren (das Backtiming hilft dabei).

Noch ein Tipp: Wenn man die .m3u-Datei per Drag&Drop in die Playlist zieht, macht mAirList daraus ein Playlist-Element. Oder man hält Shift während des Drag&Drop, dann wird ein Container daraus. In beiden Fällen wird aus der gesamten Playlist ein einzelnes “virtuelles” Element, das sich auch als einzelnes Element in die Player ziehen und abspielen lässt. Das macht die Handhabung beim Backtiming sehr viel einfacher.

Der Unterschied zwischen Playlist- und Container-Elementen ist übrigens folgender: Wenn du die Gesamt-Playlist speicherst, merkt sich mAirList bei Playlist-Elementen nur den Dateinamen der eingebetteten M3U-Datei und lädt sie beim Neustart neu. Bei Container-Elementen hingegen merkt sich mAirList die Namen der einzelnen Dateien, und man kann die M3U-Datei bedenkenlos löschen. Außerdem kann man den Inhalt von Container-Elementen über den Eigenschaften-Dialog nachträglich verändern.

Hallo Torben,
also ich will die Werbung vollautomatisch einfügen, also ohne dass ein Menschlicher Bediener anwesend ist, da wir Schüler keine Nachtschicht einlegen wollen! Wenn es für die Werbung einen Skript gäbe währe es Super!
Die anderen Titel werden aus vorher automatisch generierten und im Verzeichnis XY gespeicherten m3u Playlists geladen. Dort sieht man dann allerdings die gesamten Titel in mAirList untereinander. Die Werbung sollte allerdings wegen der Musikrecherche Funktion auf einer Webseite als virtuelles Element eingefügt werden. Der Nachrichten-Opener hat ja nicht das Problem mit wechselnder Länge und wird deshalb 12 Sekunden vor 00 als Event eingefügt, die Nachrichten werden dann als Event zur vollen Stunde als Element geladen und gespielt und 3:50 Minuten nach der vollen Stunde ausgeblendet.

Wenn du mir dafür einen Skript hättest, der die Länge der Datei werbung.m3u ausließt und diese dann um “die Länge der m3u” vor der Vollen Stunde - 12 Sekunden abspielt währe das super!

Viele Grüße
Beni

Achso ich vergas, dass die Werbung auch im Assistbetrieb zu der bereits erwähnten Zeit kommen muss, da wir einige Techniker haben werden, die sonst die Werbung vergessen zu Spielen und das ist nicht so gut! Das gibt dann nämlich Ärger mit den Werbenden!

Im Assist-Modus kriegen wir das nicht hin. Schult eure Techniker besser! Wer es nicht schafft, einen Sendung gemäß den Vorgaben im Sendeplan zu fahren, gehört nicht ans Mischpult.

Zur Automation: Ihr arbeitet ja zur Zeit mit Events, die die Elemente laden und sofort abspielen. Das Problem ist, dass diese Events immer zu einer festen Zeit gestartet werden. Um also die Werbung einplanen zu können, müsste man schon zur Planungs-Zeit wissen, wie lang die Werbung ist. Und das wissen wir halt nicht. Daher sind Events hier vermutlich nur bedingt geeignet. Ich würde eher mit Fix-Zeiten arbeiten.

Das könnte dann folgendermaßen aussehen:

Ihr generiert pro Sendestunde eine Musik-Playlist, die nach dem Datum und der Uhrzeit der Sendestunde benannt ist. Zum Beispiel “2007-10-17-21.m3u” für die 21-Uhr-Stunde von heute.

Rechtzeitig vor Beginn der nächsten Stunde, zum Beispiel fünf Minuten vorher, plant ihr ein Event ein, das zwei Dinge tut:

  1. Ein spezielles Werbe- + Nachrichten-Script startet (siehe unten).
  2. Die Musik-Playlist der kommenden Stunde anhängt (über “Playlist anhängen”, mit Variablenersetzung und Zeitverschiebung, Details kann ich euch noch nennen).

Das Script macht nun folgendes:

  1. Es lädt die M3U-Playlist der Werbung (die auch nach Datum und Sendestunde benannt sein muss) und ermittelt ihre Länge.
  2. Es erzeugt ein Container-Element aus dieser Playlist und hängt es an die aktuelle Playlist an.
  3. Die Fixzeit dieses Container-Elementes wird auf “nächste Stunde - 12 Sekunden (für Nachrichten-Opener) - Länge” gesetzt.
  4. Nun werden noch der Nachrichten-Opener und die Nachrichten angehängt.

Zu der errechneten Uhrzeit blendet mAirList nun automatisch zu dem Werbeblock über, evtl. noch dazwischen befindliche Elemente werden übersprungen. Durch die Zeitberechnungen läuft dann exakt 12 Sekunden vor der vollen Stunde der Opener und die Nachrichten. Und danach dann die Playlist der kommenden Stunde, die das Event ja auch noch angehängt hat.

Das Gute an dieser Lösung ist: Euer Techniker kann im Zweifel einfach während des letzten Liedes die Automation aktivieren und die Strecke bis hin zu den Nachrichten fahren lassen. Danach einfach wieder auf Assist schalten.

Sag mal, ob du dir eine solche Lösung vorstellen könntest. Dann kann ich dir das benötigte Script erstellen.

Hallo Torben,

dein Lösungsvorschlag klingt gut! Er ist sogar genau dass, was ich meinte!

Dass die Techniker rechtzeitig auf die Automation umschalten müssen ist mir klar, aber dass ließe sich ja auch mit einem Event welches 5 Min vor der vollen Stunde startet realisieren (um sicher zu gehen, dass das umschalten niemand “verschläft”).

Kannst du mir also bitte ein dafür passendes Script erstellen? Währe echt nett!

Viele Grüße
Beni

Gääähnnnn! :slight_smile:

Keine Panik. Ich hab auch noch andere Sachen zu tun.

Sorry, hat etwas gedauert. Hier ist mein Entwurf für eine Lösung.

Ich habe mir der Übersichtlichkeit unter ‘F:\mAirList\teststation’ eine kleine Ordnerstruktur aufgebaut. Und zwar gibt es dort vier Unterordner:

  • “music”: Enthält die Musik-Playlisten im Namensschema “YYYY-MM-DD-HH.m3u”.
  • “ads”: Enthält die Playlisten für die Werbeblöcke, ebenfalls als M3U im Schema “YYYY-MM-DD-HH.m3u”.
  • “news”: Enthält die Nachrichten als einzelne MP3s, wiederum im Schema “YYYY-MM-DD-HH.mp3”.
  • “jingles”: Da sind der News-Opener und -Closer drin.

Beispiel für den aktuellen Inhalt der Ordner (nur mit Werbung für das Ende der heutigen 21h-Stunde und Nachrichten+Musik für die anschließende 22h-Stunde):

/news/2007-10-29-22.mp3
/jingles/news-open.mp3
/jingles/news-close.mp3
/music/2007-10-29-22.m3u
/ads/2007-10-29-21.m3u

Dazu kommt dann folgendes Script, das man rechtzeitig vor der vollen Stunde per Event-Scheduler startet:

[code]const
MusicDir = ‘f:\mAirList\teststation\music’;
AdsDir = ‘f:\mAirList\teststation\ads’;
NewsDir = ‘f:\mAirList\teststation\news’;
JinglesDir = ‘f:\mAirList\teststation\jingles’;

// Sekunden vor der vollen Stunde, bevor der News-Opener kommt
NewsDelay = 7;

var
ads: IContainerPlaylistItem;
pi: IPlaylistItem;
nextHour: TDateTime;
delay: single;

begin
// nächste Stunde als Delphi TDateTime berechnen
nextHour := (trunc(now *24) + 1) / 24;

// Werbung als Container laden
ads := CreateContainerPlaylistItem;
ads.GetPlaylist.LoadFromFile(AdsDir + FormatDateTime(‘yyyy-mm-dd-hh’, now) + ‘.m3u’, false);
IPlaylistItem(ads).SetTitle(‘Werbung’);

// ausrechnen, wann die Werbung starten muss, erstmal in Sekunden vor der vollen Stunde
delay := NewsDelay;
delay := delay + (IPlaylistItem(ads).GetDuration/10000000);

// jetzt umrechnen in TDateTime
delay := delay / (246060);

// Fixzeit setzen
IPlaylistItem(ads).SetStartTime(sttFixed, nextHour - delay);
CurrentPlaylist.Add(IPlaylistItem(ads));

// News-Opener einfügen
pi := CreatePlaylistItemFromFile(JinglesDir + ‘news-open.mp3’, true);
CurrentPlaylist.Add(pi);

// News einfügen
pi := CreatePlaylistItemFromFile(NewsDir + FormatDateTime(‘yyyy-mm-dd-hh’, nextHour) + ‘.mp3’, false);
CurrentPlaylist.Add(pi);

// News-Closer einfügen
pi := CreatePlaylistItemFromFile(JinglesDir + ‘news-close.mp3’, true);
CurrentPlaylist.Add(pi);

// Musik der nächsten Stunde einfügen
CurrentPlaylist.AppendPlaylist(CreatePlaylistFromFile(MusicDir + FormatDateTime(‘yyyy-mm-dd-hh’, nextHour) + ‘.m3u’));
end.[/code]

Das Script macht genau das, was ich oben beschrieben habe: 1. Die Werbung als Container laden. 2. Die Fix-Zeit des Containers so anpassen, dass die Werbung genau x Sekunden (ist oben konfigurierbar, Beispiel 7) vor der vollen Stunde zuende sind. 3. News-Opener, -Inhalt und -Closer anhängen. 4. Musik anhängen. Fertig :slight_smile:

Hallo Torben,

perfekt, wunderbar, genau so, wie ich mir das Vorgestellt habe! Sehr Schön

Vielen Dank!

EDIT: Funktionieren tut es auch Fehlerfrei!

Freut mich :slight_smile:

Wenn man es jetzt noch einen Tacken schöner machen wollte, könnte man dem Newsopener noch (per Tag oder MMD) eine Ramp verpassen, und die hart einprogrammierten 7 Sekunden dadurch ersetzten, dass die Ramp ausgelesen wird :slight_smile:

Könnte man! :slight_smile:
Aber ich denke, dass das Geschmackssache sein dürfte! :wink:
Ich bin auf jeden Fall mit dem Script absolut Zufrieden! :slight_smile:

Super Script. Jetzt noch eine Frage, da ich mit der Scriptprogrammierung leider gar nicht bewandert bin:

Bei mir kommt vor jeder Nachrichtensendung ein Opener der die aktuelle Zeit (volle Stunde) nennt. Die Dateien heißen z.B. Opener18.mp3 oder Opener19.mp3 für z.B. 18 oder 19 Uhr. Kann ich das soweit automatisieren dass er die entsprechenden Opener lädt?
Also z.B. dass mann die zahl hinter Opener durch eine Variable ersetzt (da man ja kurz vor 18 Uhr zum Beispiel den opener lädt, müsste er doch in der Lage sein, z.B. volle Stunde Plus 1 (17+1) um dann um 18 Uhr den passenden Opener zu spielen. Darüber hinaus sollte man die Laufzeit des Scripts festlegen können (Eventsteuerung??) Wir senden zum Beipsiel nur von 7 Uhr früh bis 21 Uhr Nachrichten und dann nicht mehr.
Wir verwenden mAirList4 - Kann mir da jemand zur Hand gehen? Würde gerne mehr lernen von der Scriptprogrammierung, bin dort aber absoluter Anfänger :slight_smile:

LG

Andre

Nutzt du die mAirListDB und den Mini Scheduler zur Planung? Dann ist das ganz einfach, auch ohne Script:

  • In der Bibliothek einen Ordner erstellen, wo die 24 Zeit-Jingles drin sind (und nur diese!).

  • Jetzt jeden Opener bearbeiten: Auf dem Reiter “Sendeplanung” die Stundeneinschränkungen so setzen, dass nur die passende Stunde grün angekreuzt ist (für alle Wochentage), die anderen Stunden rot. Tipp: Auf Zeilen-Überschriften klicken um ganze Blöcke von Häkchen zu löschen.

  • Das für alle Opener wiederholen.

  • Nun kannst du in der Vorlage “Zufälliges Element aus bestimmten Ordner” verwenden. Da ja für jede Stunde aufgrund der Stunden-Einschränkungen nur genau ein Opener in Frage kommt, wird wie durch Zauberhand immer der passende ausgesucht :slight_smile:

Klasse. Danke Torben. Noch eine Frage: Fade out - wie kann ich verhindern das der Opener in das FadeOut des vorherigen Titels gespielt wird. Der Opener soll trocken kommen, nachdem das FadeOut durch ist…

Andre

Da gibt es bei den Wiedergabe-Optionen eine namens “Überlappung mit vorherigem Element vermeiden” oder so ähnlich.

Hallo Gemeinde,

mein Problem scheint ähnlich gelagert und doch irgendwie ganz anders (jedenfalls klappt keiner der bislang ausprobierten Wege derer, die sich in meinem Umfeld mit mAirList auskennen - zugegeben das sind auch nicht gerade viele aber nun gut…).
Lange Rede, kurze Fallschilderung:

  • vorausschicken sollte ich, dass wir unsere Playlist nur einmal am Tag generieren lassen, sehr viel vorproduzieren und WENN etwas neues hinzukommt, wir mit dem Mini Scheduler die betreffenden Stunden neu planen.
  • auch vorneweg sei erwähnt dass wir mit einem gespiegelten System arbeiten (2 Rechner; ein Fileserver, von außen zu erreichen, der andere, Senderechner mit mAirList drauf, sendet an unseren Provider, der wiederum streamt).
  • die Synchronisation wird mit synchtoy von Hand durchgeführt
  • die anschließende Synchronisation mit der mAirList Datenbank wird bislang ebenfalls händisch ausgeführt

  • nun sollen ins Programm neue Elemente hinzugefügt werden.
  • diese Elemente sollen von extern zu geliefert werden.
  • dafür wurden auf dem Fileserver 2 Ordner freigegeben auf die der Kooperationspartner seine Inhalte (Nachrichten und Werbung) laden kann.
  • Der angedachte Ablauf im Programm soll wie folgt aussehen:
    1.) Stundenjingle (von uns kommend)
    2.) Nachrichten Intro Jingle (von uns kommend)
    3.) Nachrichten (vom Kooperationspartner zu geliefert, ein File, immer selbe Bezeichnung ABER unterschiedliche Längen! und 5 mal pro Tag)
    4.) Nachrichten Outro Jingle (von uns kommend)
    5.) Werbung Intro Jingle (von uns kommend)
    6.) Werbung (vom Kooperationspartner kommend, immer wechselnde Files, mehrere in einem Ordner, wechselnde Bezeichnungen, unterschiedliche Längen)
    7.) Werbung Outro Jingle (von uns kommend)
    8.) Station Jingle (von uns kommend)
    9.) Musik (von uns kommend)

Ich dachte zuerst an eine Container-Lösung jedoch scheitert bislang alles immer daran dass in den Stunden, in denen Nachrichten und Werbung laufen soll, im Vorfeld automatisiert synchronisiert werden muss (allerhöchstes sehr komplexe Lösungsansätze mit geplanten Tasks wären denkbar). Oder wurde hier nur viel zu komplex und um zu viele Ecken gedacht?

Für Ideen ewig dankbar

Tim