Note that this Wiki is a work in progress, items may not be updated or may disappear entirely as the pages are updated.
PAL: General StreamAds rotation
From SpacialAudio
Question:
How can I insert advertisements provided by StreamAds into the queue without using the Clockwheel or Event scheduler?
Answer:
PAL scripting allows you greater control over when and how advertisements is added to the queue. The PAL script below is an example of you to insert StreamAds advertisements about every 20 minutes.
{*
Description:
This PAL script can be configured to insert StreamAds advertisements into the
queue
a) Every xx minutes, or
b) Every xx songs that play
This is done by editing the "WaitMinutes" and "WaitSongs" constants below.
Please note ONE of these values must be zero as you generally do not want to wait
xx minutes AND xx songs before playing advertisements.
You can also change the value of "AdSpace" to configure how many seconds of
advertisement space you want StreamAds to insert.
Recommended values:
AdSpace = 90;
WaitMinutes = 20;
WaitSongs = 0;
*}
//==============================================================================
// Custom settings - Please change these as required
//==============================================================================
const AdSpace = 90; //Advertisement space, in seconds
//NOTE: Only ONE of these needs to be set, the other one needs to be zero
const WaitMinutes = 20; //Play advertisements every xx minutes
const WaitSongs = 0; //Play advertisements every xx songs
//==============================================================================
var doWait : boolean;
var songCount : Integer = 0;
var songInfo : TSongInfo;
if (WaitMinutes<>0) AND (WaitSongs<>0) then
begin
WriteLn('Warning: Set either WaitMinutes or WaitSongs, not BOTH!');
end;
//Insert advertisements
StreamAds['Providers (All)'].QueueTop(AdSpace);
//Wait for first Ad to start playing
//This will avoid LONG shows (60+ minutes) causing this script to
//queue a bunch of ads every 20 minutes
PAL.WaitForPlayCount(1);
//If WaitMinutes is set, wait for specified minutes
doWait := WaitMinutes>0;
while (doWait) do
begin
WriteLn('Waiting for '+IntToStr(WaitMinutes)+' minutes:');
PAL.WaitForTime(DateTime(Now+(WaitMinutes/(60*24))));
doWait := false;
end;
//If WaitSongs is set, wait for specified number of tracks to play
//Note: We specifically do not count advertisements!
if (WaitSongs>0) then
begin
WriteLn('Waiting for '+IntToStr(WaitSongs)+' to play:');
WriteLn('Note: Advertisements are not counted');
end;
songCount := 0;
while (WaitSongs>songCount) do
begin
//Check that track is not advertisement
//Increase counter only if non-advertisement
if (ActivePlayer <> nil) then
begin
songInfo := ActivePlayer.GetSongInfo();
if(songInfo['songtype'] <> 'A') then
begin
songCount := songCount + 1;
WriteStr(songCount); WriteStr(' ');
end;
songInfo.Free;
end;
//Only wait if needed
doWait := true;
while (doWait) and (WaitSongs>songCount) do
begin
PAL.WaitForPlayCount(1);
doWait := false;
end;
end;
//One we are done, start from top again
PAL.Loop := true;
