This PAL Script will play a Liner over the end of the currently playing track and the start of the incoming track. There are a number of user-configurable variables:
// Declare Configurable Variables
var NormalVol : integer = 255; // Set the normal volume level here
var LoudVol : integer = 300; // Set the high volume level here
var StartPoint : integer = 5000; // Set the start time x seconds from the end of the Active Track
var TrackCount : integer = 5; // Set the number of tracks to play before repeating
NormalVol is the normal volume level which can be changed if your station operates at a higher or lower volume by default
LoudVol is the volume used by the Auxiliary Deck to play the Liner
StartPoint is the number of seconds (in miliseconds) from the end of the Playing Track where you would like the Liner to start playing from
TrackCount is the number of tracks to play before playing the next liner
{******************************************
PAL Script to play liners between 2 tracks
******************************************}
PAL.Loop := True; // Loop the PAL Script
// Declare three TPlayer Containers
var Player1 : TPlayer; // Declare an instance of TPlayer for the Active Player
var Player2 : TPlayer = DeckB; // Declare an instance of TPlayer for the Idle Player
var Player3 : TPlayer = Aux1; // Declare an instance of TPlayer for the Aux1 Player
// Declare three TSongInfo Containers
var P1Track, P2Track, P3Track : TSongInfo;
// Variable Declarations
var LinerLenStr : string; // Holds the Duration of the Liner Track as a string value
var LinerLen : integer; // Holds the Duration of the Liner Track
var Delay : string; // Holds the delay between the Liner starting and the follow up track starting
var Position : string; // Used to determine the position of the Decimal Point in the Liner Duration
// Declare Configurable Variables
var NormalVol : integer = 255; // Set the normal volume level here
var LoudVol : integer = 300; // Set the high volume level here
var StartPoint : integer = 5000; // Set the start time x seconds from the end of the Active Track
var TrackCount : integer = 5; // Set the number of tracks to play before repeating
PAL.WaitForPlayCount(TrackCount); // Set the number of tracks to play before playing the Liner
PAL.LockExecution; // Speed up the Script processing
Player1 := ActivePlayer; // Assign the Active Player to Player1
If Player1 = DeckB Then Player2 := DeckA; // Assign the Idle Player to Player 2
// Wait for 'StartPoint' seconds before the end of the track before proceeding
PAL.WaitForTime(Float(Now) + ((Player1.Duration - Player1.CurTime - StartPoint) / 86400000));
// Load the Liner
P3Track := CAT['Station IDs (All)'].ChooseSong(smLRP,NoRules); // Load a Liner from the Station ID category to play between tracks
Player3.QueueSong(P3Track); // Queue the Liner in the Aux1 Player
LinerLen := Player3.Duration; // Assigns LinerLen the duration of the Liner track
LinerLen := (((LinerLen / 1000) + 1) / 2); // Calculate the pause between starting the follow up track as half the duration of the Liner plus 1 - Adjust to suite needs
LinerLenStr := FloatToStr(LinerLen);// Convert the Liner Duration to a String
Position := CharAt(LinerLenStr, 2);
if Position = '.' then // Checks the position of the Decimal Point
begin
LinerLenStr :='0'+LinerLenStr; // Adds a leading zero if necessary
end;
Delay := '+00:00:'+LinerLenStr; // Concatenates the track delay time
Delete(Delay,10,5); // Removes the decimal point and fractional part
P2Track := Queue.NextInQueue; // Queue the next track in the Idle Player
if P2Track = nil then // Loads 3 tracks to an empty queue if necessary
begin
cat['tracks'].QueueTop(smLRP,EnforceRules);
cat['tracks'].QueueBottom(smLRP,EnforceRules);
cat['tracks'].QueueBottom(smLRP,EnforceRules);
P2Track := Queue.NextInQueue;
end;
Player2.QueueSong(P2Track); // Queue the next track in the Idle Player
Player1.FadeToPause; // Fade out the currently playing track
Player3.Volume := LoudVol; // Set the AUX1 volume to the Loud setting
Player3.Play; // Play the Liner
PAL.WaitForTime(Delay); // Wait for the Delay
Player2.FadeToPlay; // Fade in the idle player
P1Track := Queue.NextInQueue; // Assign the next track to Player1
Player1.QueueSong(P1Track); // Queue the next track in Player1
Player1.Volume := NormalVol; // Ensure the Player Volume is set
PAL.UnLockExecution; // Return PAL Script processing to normal speed
// Housekeeping
Player1.Free;
Player2.Free;
Player3.Free;
P1Track.Free;
P2Track.Free;
P3Track.Free;
The PAL Script is available to download from the bottom of the page.
Comments