Hi,

I had this same issue and in the end I patched the channel switching out of airplay. We're running a relatively ancient Riv 2.5.0 with patches to log_play.cpp and log_play.h

Heres what the patches do:

Adds an RDLogLine::StartSource to int GetNextChannel (log_play.h)

At the point in log_play where GetNextChannel is called, I pass in this extra RDLogLine::StartSource for later use.

In a nutshell I then check to see if we're in auto mode and if we are I return a value that says use channel 0 (the first output set for airplay).

If we're not, Riv chooses a channel as normal (basically increments and loops around).

Back to the Macro thing, if we've been started by a macro, I assume Riv should choose as normal.

Thats about it really just a few set to 0s and if/else lines.

It would be nice to have some sort of rdadmin option for channel switching in auto but alas my QT/C skills are atrocious so I couldn't figure out how best to do that.

Hope this helps,


Wayne Merricks
The Voice Asia

On 28/10/14 10:07, Peter van Embden wrote:
Hello all,
We recently added the option to "button start" from the mixer, but now the following challenge appears: while making live radio, the DJ's often uses "manual", but sometimes want to play songs with a jingle in between in "automatic". But, if the channel is not "started", no sound will be heard. And if you start the channel, the next in line just starts playing. Yes, there are ways to "hack" this, for example by playing a short file with the fader down and leave it started, but most of our elderly DJ's are not fast enough to find something like that, they just play the playlist they're presented. And yes, by paying close attention to not just "stop" your channel this is also possible, but that's not the question.
I figured out to ask for two possibilities:

  * Is it possible to let all audio stick to the active channel when
    switched to "automatic"? Or,
  * Is it possible to bypass the button-start command when switched to
    "automatic"?

FYI: we use several virtual machines for Rivendell. There's RDNONSTOP, which does non-stop playout and decides at what times the mixer in studio 1 is allowed on-air (we're working on studio 2) and the non-stop stops playing. There are only 4 people allowed to acces RDNONSTOP. Then there's RDSTUDIO1, which is used for playout on the studio 1 mixer at any time (I use it to record my show during non-stop hours). Every user is allowed to acces RDSTUDIO1, because we managed to make it quite idiot-proof. RDSTUDIO1 is connected to the mixer and has button start. This is the machine that has to get modified for the challenge we ran into.
Thanks for thinking with me!
Sincerely,
Peter van Embden
Radio Capelle
The Netherlands
Verstuurd


_______________________________________________
Rivendell-dev mailing list
[email protected]
http://caspian.paravelsystems.com/mailman/listinfo/rivendell-dev

--- riv-2.2.1/rdairplay/log_play.cpp	2012-10-15 16:46:14.000000000 +0100
+++ rivendell-2.2.1/rdairplay/log_play.cpp	2012-12-07 03:16:20.894020803 +0000
@@ -1710,7 +1710,7 @@
 	  rdairplay_conf->setLogCurrentLine(play_id,nextLine());
 	  return false;
 	}
-	aport=GetNextChannel(mport,&card,&port);
+	aport=GetNextChannel(mport,&card,&port,src);
 	playdeck=(RDPlayDeck *)logline->playDeck();
 	playdeck->setCard(card);
 	playdeck->setPort(port);
@@ -2367,25 +2367,37 @@
 }
 
 
-int LogPlay::GetNextChannel(int mport,int *card,int *port)
+int LogPlay::GetNextChannel(int mport,int *card,int *port, 
+        RDLogLine::StartSource src = RDLogLine::StartUnknown)
 {
   int chan=next_channel;
-  if(mport<0) {
-    *card=play_card[next_channel];
-    *port=play_port[next_channel];
-    if(++next_channel>1) {
-      next_channel=0;
+  //If we are in auto mode only play on the first output (unless we got here
+  //with a macro start e.g. PN
+  if(play_op_mode==RDAirPlayConf::Auto && src != RDLogLine::StartMacro){
+    *card=play_card[0];
+    *port=play_port[0];
+    next_channel=0;
+    chan=next_channel;
+  }
+  else{
+    if(mport<0) {
+      *card=play_card[next_channel];
+      *port=play_port[next_channel];
+      if(++next_channel>1) {
+        next_channel=0;
+      }
     }
-  }
-  else {
-    chan=mport;
-    *card=play_card[mport];
-    *port=play_port[mport];
-    next_channel=mport+1;
-    if(next_channel>1) {
-      next_channel=0;
+    else {
+      chan=mport;
+      *card=play_card[mport];
+      *port=play_port[mport];
+      next_channel=mport+1;
+      if(next_channel>1) {
+        next_channel=0;
+      }
     }
   }
+  
   return chan;
 }
 
--- riv-2.2.1/rdairplay/log_play.h	2010-07-29 20:32:36.000000000 +0100
+++ rivendell-2.2.1/rdairplay/log_play.h	2012-12-07 03:08:37.289938960 +0000
@@ -175,7 +175,7 @@
   void AdvanceActiveEvent();
   void SetTransTimer(QTime current_time=QTime(),bool stop=true);
   QString GetPortName(int card,int port);
-  int GetNextChannel(int mport,int *card,int *port);
+  int GetNextChannel(int mport,int *card,int *port,RDLogLine::StartSource src);
   int GetLineById(int id);
   RDPlayDeck *GetPlayDeck();
   void FreePlayDeck(RDPlayDeck *);
_______________________________________________
Rivendell-dev mailing list
[email protected]
http://caspian.paravelsystems.com/mailman/listinfo/rivendell-dev

Reply via email to