So following this thread, I spent the weekend writing just this. What I've done 
is put special voicetrack markers in the log, created a group for just the 
liners and tied each liner to a particular music cart so it will only get 
inserted in front of that cart (this is for "power intros" and other similar 
presentation. The script in PHP is below if it's of use to anyone. Please tell 
me if what I'm doing (rewriting the LOG table on the fly is even crazier than I 
think it is). :-)

Jonathan







<?php
  //
  //
  // Broadcast Management Rivendell Log Power Introifier. Original release date 
2018-07-15.
  // Copyright 2018 Jonathan Cohen. Version 1.00 updated 2018-07-15.
  // More info: www.radiotools.uk or for commercial support 
www.broadcast.management.
  //
  //
  // This script replaces special voice-track markers with power-intros or 
station liners.
  //
  // IMPORTANT: PLEASE ENSURE YOU HAVE A FULL BACKUP OF YOUR RIVENDELL SYSTEM 
BEFORE ATTEMPTING TO USE THIS SCRIPT!
  //
  // IMPORTANT: This script version is for Rivendell 2.19.2. It might work on 
other versions but as this is untested and
  // the script talks directly to the database, there is a risk of corruption 
if you run this on any other version.
  //
  //
  // How to use:
  //
  // In RDlogmanager create an event called something like VOICEINTRO. In this, 
right click in "pre-imported carts" and 
  // "Insert Voice Track". Then right click on the Voice Track you inserted and 
select "Edit Voice Track". In the "Edit 
  // Voice Track Marker" box that appears type "VOICE-INTRO" without the 
quotes. This must be exactly as typed as we will 
  // look for that text in the log. Save the event and then add it to any 
required clocks, immediatly before any music events 
  // that need intros or voicetracks.
  //
  // Create a cart group called IMGINTRO. Add all your intros to this group as 
new carts and in the ALBUM field of each intro
  // cart, enter the cart number of the related music track you want the intro 
to be placed in front of. For example, if MUSIC
  // cart 123456 has an IMGINTRO cart of 234567 then in cart 234567 put 123456 
in the ALBUM field.
  //
  // In the appropreate clock, add VOICEINTRO events before any track that 
might need a VT or power intro (these will be automatically
  // replaced with an intro if one exists, leaving the others for VTing - or 
the power intro can be removed and a VT still done).
  //
  // For "power intros" to music, the "no fade on segue" and segue markers 
option can be used to seemlessly transition from the intro to music.
  //
  // Run the normal log generation within Rivendell either from RDlogmanager or 
using a cron script. This will fill your log as normal
  // then import any music logs if you use them. Then run this script on the 
same log to replace the selections using this system.
  //
  //
  // To run, copy the script to /usr/src then call in this format:
  // /usr/bin/php /usr/src/bcpowerintro.php 2018_05_27
  // (where 2018_05_27 is the name of the log you want to process).
  //
  //
  //
  //
  // User settings. You need to configure these for your system:
  $servername = "localhost";
  $username = "root";
  $password = "yourdatabasepassword";
  $dbname = "Rivendell";






  // Start of main code.
  //
  //
  // Get the argument passed to the script and give an error if no log selected.
  //
  if ( ! isset($argv[1])) {  // Fix for undefined offset error if no argument 
passed.
   $argv[1] = null;
  }
  //
  $selectedlog=$argv[1];
  if ($selectedlog == '' ) {
    echo "\nBroadcast Management Rivendell Log Power Introifier.\n";
    echo "Copyright 2018 Jonathan Cohen. Version 1.00 Release date 
2018-07-15.\n";
    echo "More info: www.radiotools.uk or for commercial support 
www.broadcast.management.\n\n";
    //
    echo "ERROR: You need to pass the name of the log to introify to the 
script. \n";
    echo "For example: php bcpowerintro.php 2018_05_28\n\n";
    exit; // Ouch.
  }
  $logname=$selectedlog;
  //
  //
//$logname='2018_05_29';        // For debug use to force a log name
  //
  //
  // Extra sanity check for log names. Just in case a really short name is 
accidentally entered we don't want it to do something silly.
  if (strlen($logname) < 8) {
    echo "\n\nERROR: The log name entered (".$logname.") is less than 8 
characters. For safety please use log names of 8 or more characters.\n\n";
    exit;
  }
  //
  //
  $log_selected = $logname.'_LOG';                  // Add the prefix Rivendell 
uses internally for it's database tables.
  echo "\nLog selected: ".$log_selected."\n";





  // Create database connection.
  $conn = new mysqli($servername, $username, $password, $dbname);
  // Check connection
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }
    
  // Create database connection.
  $conn1 = new mysqli($servername, $username, $password, $dbname);
  // Check connection
  if ($conn1->connect_error) {
    die("Connection failed: " . $conn1->connect_error);
  }

  // Create database connection.
  $conn2 = new mysqli($servername, $username, $password, $dbname);
  // Check connection
  if ($conn2->connect_error) {
    die("Connection failed: " . $conn2->connect_error);
  }

  // Create database connection.
  $conn3 = new mysqli($servername, $username, $password, $dbname);
  // Check connection
  if ($conn3->connect_error) {
    die("Connection failed: " . $conn3->connect_error);
  }








  // Work through the days log.
  $count_replacements=0;    // Keep a count of how many were changed for 
display at the end.
  //
  $sql = "SELECT * FROM ".$log_selected." ORDER BY ID ASC";
  $result = $conn->query($sql);
  //
  if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
      $ret_ID = $row['ID'];
      $ret_TYPE = $row['TYPE'];
      $ret_SOURCE = $row['SOURCE'];
      $ret_CART_NUMBER = $row['CART_NUMBER'];
      $ret_COMMENT = $row['COMMENT'];
      //
//echo "Logline ID: ".$ret_ID." - CartID: ".$ret_CART_NUMBER." - ".$ret_TYPE." 
- ".$ret_SOURCE." - ".$ret_COMMENT."\n";   // Show the current line of the log
      //
      if ($ret_TYPE=='6' && $ret_SOURCE=='3' && $ret_COMMENT=='VOICE-INTRO') {
        // We have a VOICE-INTRO event!
        echo "------------\nFound VOICE-INTRO line ID: ".$ret_ID." - CartID: 
".$ret_CART_NUMBER." - ".$ret_TYPE." - ".$ret_SOURCE." - ".$ret_COMMENT."\n";   
// Show the current line of the log
        //
        // Let's get the next log ID line to find out if it's a MUSIC cart and 
if so, if it has an intro we should use!
        $newid=$ret_ID+1;
        echo "Attempting to retreve next line :".$newid."\n";
        // Retreve the next line using a seperate database connection so we 
don't mess up the current loop.
        $sql1 = "SELECT * FROM ".$log_selected." WHERE ID='".$newid."'";
        $result1 = $conn1->query($sql1);
        while($row1 = $result1->fetch_assoc()) {
          $ret_ID1 = $row1['ID'];
          $ret_TYPE1 = $row1['TYPE'];
          $ret_SOURCE1 = $row1['SOURCE'];
          $ret_CART_NUMBER1 = $row1['CART_NUMBER'];
          $ret_COMMENT1 = $row1['COMMENT'];
        }
        echo "Next line ID: ".$ret_ID1." - CartID: ".$ret_CART_NUMBER1." - 
".$ret_TYPE1." - ".$ret_SOURCE1." - ".$ret_COMMENT1."\n";
        // if the $ret_CART_NUMBER1 length is >4 then we should have a valid 
card number so we look this up.
        if (strlen($ret_CART_NUMBER1) > 4){
            // This looks like a valid cart number
            echo "Next cart number ".$ret_CART_NUMBER1." looks valid.\n";
            // Now we have the number of the next cart, we need to see if it 
matches the ALBUM field of any of our IMGINTRO carts.   
            $sql2 = "SELECT * FROM CART WHERE ALBUM='".$ret_CART_NUMBER1."'";
            $result2 = $conn1->query($sql2);
            // Reset variables to ensure no accidental repeats.
            $ret_NUMBER='';
            $ret_ARTIST='';
            $ret_TITLE='';
            while($row2 = $result2->fetch_assoc()) {
              $ret_NUMBER = $row2['NUMBER'];
              $ret_ARTIST = $row2['ARTIST'];
              $ret_TITLE = $row2['TITLE'];
            }
            if ($ret_NUMBER != '') {
              // We appear to have a valid intro cart!
              echo "**** Found intro cart as ALBUM in IMGINTRO: 
".$ret_NUMBER.". ****\n";
              $count_replacements=$count_replacements+1;      // Keep a count 
for display later.
              // Now we need to replace the current voicetrack cart with this 
$ret_NUMBER.
              echo "Intro cart found: ".$ret_NUMBER." - ".$ret_ARTIST." - 
".$ret_TITLE."\n";
              echo "Replacing log entry ID: ".$ret_ID." with 
CART_NUMBER=".$ret_NUMBER.", TYPE=0, SOURCE=2, COMMENT=Broadcast.\n";
              //
              $sql2 = "UPDATE ".$log_selected." SET 
CART_NUMBER=".$ret_NUMBER.", TYPE=0, SOURCE=2, COMMENT='Broadcast' WHERE 
ID=".$ret_ID;
              $result2 = $conn1->query($sql2);
              //
          }
        }
      }
    }
  } else {
    echo "ERROR: No entries in log!";
  }
  $conn->close();

  echo "\nTotal changed: ".$count_replacements."\n\n";

?>


-----Original Message-----
From: rivendell-dev-boun...@lists.rivendellaudio.org 
[mailto:rivendell-dev-boun...@lists.rivendellaudio.org] On Behalf Of Patrick
Sent: 12 July 2018 19:41
To: rivendell-dev@lists.rivendellaudio.org
Subject: Re: [RDD] Substitute Voice Track If Missing

Brian, I’ve been wanting the same thing. I was thinking of writing a RLM to do 
it. It would look at the next thing in the log and replace an empty voice track 
with a cart that contains liners.

I don’t know if there’s a better way to accomplish the same thing.

Patrick

Sent from my iPhone

> On Jul 12, 2018, at 9:39 AM, riv...@braingia.org wrote:
> 
> Hello,
> 
> I have a unique situation whereby we have numerous student volunteers 
> who do airshifts.  Sometimes they fail to show up for their shift, 
> leaving the Program Director to scramble.  
> 
> To alleviate some of the load on the PD, I'd like to figure out a way to 
> substitute a liner or similar content if a voicetrack is missing.  For 
> example, if we have three or four announcer breaks an hour and the jock 
> doesn't show up, I'd like the automation to pop a liner in there without 
> needing human intervention.
> 
> I'm new enough to Rivendell that I think there's a way to do it but I 
> don't quite have the knowledge to make it happen or the vocabulary to 
> adequately search for an answer either.  Maybe a macro?
> 
> Steve
> _______________________________________________
> Rivendell-dev mailing list
> Rivendell-dev@lists.rivendellaudio.org
> http://caspian.paravelsystems.com/mailman/listinfo/rivendell-dev
> 


_______________________________________________
Rivendell-dev mailing list
Rivendell-dev@lists.rivendellaudio.org
http://caspian.paravelsystems.com/mailman/listinfo/rivendell-dev

_______________________________________________
Rivendell-dev mailing list
Rivendell-dev@lists.rivendellaudio.org
http://caspian.paravelsystems.com/mailman/listinfo/rivendell-dev

Reply via email to