Pira.cz Technical Forum
Radio Data System (RDS) => P132, P164, P232(U) and P332 RDS Encoders => Topic started by: Bob Crittenden on May 17, 2024, 05:23:21 pm
-
Good morning!
We have been using the P332 with our Zetta system for over 5 years. RCS had configured an .xlst file for us to work with the RDS received, but after going through an upgrade of our automation computers recently, we were having a variety of issues with program material displaying sporadically.
I had an .xlst template in a response to a post from back in 2019, which I installed and it brought instant stability.
My remaining issue is that when a song is concluded, the display advances to the next song. This can be really aggravating in a live show, when there may be a lengthy break between songs.
I use the encoder dashboard to program our 3 units - is there a command I can use or something that can be written into the .xslt that can remedy this issue? Thanks!
-
Can you post the .xlst file you're currently using? And the output file generated by the Zetta? Some automation systems save not only the current song title but they add entire recent history or next song. It can be simply solved by specifying full path to the elements.
-
Sure thing! Here is the .xslt file:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:variable name="newline">
<xsl:text> </xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="LogEventCollection">
<xsl:for-each select="LogEvent">
<xsl:text>RT1=</xsl:text>
<xsl:choose>
<xsl:when test="@Type='SONG'">
<xsl:value-of select="Asset/@Title" />
<xsl:text> by </xsl:text>
<xsl:value-of select="Asset/@Artist1" />
</xsl:when>
<xsl:otherwise>
<xsl:text>FAITH RADIO</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$newline" />
</xsl:for-each>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
This is the output file:
RT1=New Song 1 by Artist Name 1 Song 1
RT1=New Song 2 by Artist Name 1 Song 2
RT1=FAITH RADIO
RT1=FAITH RADIO
-
This setup has worked correctly for many years. They probably changed something in the latest Zetta update. You should contact RCS community for updated xlst template. There's no solution applicable on the RDS encoder side if the data comes already mismatched from the Zetta.
Does the current song keep the same line in the output file? Is there a way to show the original XML file (before applying the xslt template)?
-
Does this help? .xml file (perhaps what you're lookin for)
<?xml version="1.0" encoding="utf-16"?>
<ZettaLite Version="0.0.0">
<LogEventCollection>
<LogEvent Type="SONG" ScheduledTime="2024-04-26T20:00:00.0000651Z" StartTime="2024-04-26T20:00:00.0000651Z" StartTimeLocal="4/26/2024 3:00:00 PM" Chain="SEGUE" Status="CURRENT" Duration="02:40" ZettaId="1234">
<Asset Type="SONG" AssetTypeName="Song" Title="New Song 1" ZettaId="3456" ThirdPartyId="SongA" TotalLength="160" Artist1="Artist Name 1 Song 1" Album1="Album Name 1 Song 1" />
<NotesCollection>
<Note Title="Note 1" Script="Note 1' Script" />
<Note Title="Note 2" />
</NotesCollection>
</LogEvent>
<LogEvent Type="SONG" ScheduledTime="2024-04-26T20:10:00.0000651Z" StartTime="2024-04-26T20:10:00.0000651Z" StartTimeLocal="4/26/2024 3:10:00 PM" Chain="SEGUE" Status="READY" Duration="03:05" ZettaId="1236">
<Asset Type="SONG" AssetTypeName="Song" Title="New Song 2" ZettaId="3457" ThirdPartyId="SongB" TotalLength="185" Artist1="Artist Name 1 Song 2" Artist2="Artist Name 2 Song 2" Album1="Album Name 1 Song 2" Album2="Album Name 2 Song 2" />
</LogEvent>
<LogEvent Type="LINK" ScheduledTime="2024-04-26T20:13:05.0000651Z" StartTime="2024-04-26T20:13:05.0000651Z" StartTimeLocal="4/26/2024 3:13:05 PM" Chain="SEGUE" Status="READY" Duration="00:15" ZettaId="1237">
<Asset Type="LINK" AssetTypeName="Link" Title="New Link 1" ZettaId="3458" ThirdPartyId="LinkAlpha" TotalLength="15" Product1="Product Name 1 Link 1" Sponsor1="Sponsor Name 1 Link 1" />
</LogEvent>
<LogEvent Type="SPOT" ScheduledTime="2024-04-26T20:13:20.0000651Z" StartTime="2024-04-26T20:13:20.0000651Z" StartTimeLocal="4/26/2024 3:13:20 PM" Chain="SEGUE" Status="READY" Duration="01:00" ZettaId="1238">
<Asset Type="SPOT" AssetTypeName="Spot" Title="New Spot 1" ZettaId="3459" ThirdPartyId="SpotOne" TotalLength="60" Product1="Product Name 1 Spot 1" Sponsor1="Sponsor Name 1 Spot 1" />
</LogEvent>
</LogEventCollection>
</ZettaLite>
-
Great work. Well, note the Status="CURRENT" in the first LogEvent. Does this LogEvent always correspond to the current track? If so, the solution is simple. Anyway, it's too late here today, let's continue tomorrow.
-
Try this template:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:variable name="newline">
<xsl:text> </xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="LogEventCollection">
<xsl:for-each select="LogEvent">
<xsl:choose>
<xsl:when test="@Status='CURRENT'">
<xsl:text>RT1=</xsl:text>
<xsl:choose>
<xsl:when test="@Type='SONG'">
<xsl:value-of select="Asset/@Title" />
<xsl:text> by </xsl:text>
<xsl:value-of select="Asset/@Artist1" />
</xsl:when>
<xsl:otherwise>
<xsl:text>FAITH RADIO</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$newline" />
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
If you find it working, I'll adapt the code for various situations (RT1=, XCMD=, XML)
-
Thank you! I am not at the studio currently, but will work on it Monday and let you know the results!!
-
Tested it out yesterday - worked very, very well!
You had mentioned other commands - what would those do for us?
-
If you're using the PIRA P132 family RDS encoder (P132, P232, P232U, P332, P164), take advantage of its tagging support. Send RT+ directly. It's fully compatible with RT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:variable name="newline">
<xsl:text> </xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="LogEventCollection">
<xsl:for-each select="LogEvent">
<xsl:choose>
<xsl:when test="@Status='CURRENT'">
<xsl:text>XCMD=<rds><item><dest>3</dest><text></xsl:text>
<xsl:choose>
<xsl:when test="@Type='SONG'">
<xsl:text><title></xsl:text>
<xsl:value-of select="Asset/@Title" />
<xsl:text></title> - <artist></xsl:text>
<xsl:value-of select="Asset/@Artist1" />
<xsl:text></artist></xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>FAITH RADIO</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text></text></item></rds></xsl:text>
<xsl:value-of select="$newline" />
</xsl:when>
</xsl:choose>
</xsl:for-each>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Result:
XCMD=<rds><item><dest>3</dest><text><title>New Song 1</title> - <artist>Artist Name 1 Song 1</artist></text></item></rds>
-
If you need to save the text as XML, use this code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="LogEventCollection">
<xsl:for-each select="LogEvent">
<xsl:choose>
<xsl:when test="@Status='CURRENT'">
<current>
<xsl:choose>
<xsl:when test="@Type='SONG'">
<title>
<xsl:value-of select="Asset/@Title" />
</title>
<artist>
<xsl:value-of select="Asset/@Artist1" />
</artist>
</xsl:when>
<xsl:otherwise>
<xsl:text>FAITH RADIO</xsl:text>
</xsl:otherwise>
</xsl:choose>
</current>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Result:
<?xml version="1.0" encoding="UTF-8"?>
<current>
<title>New Song 1</title>
<artist>Artist Name 1 Song 1</artist>
</current>
Can be read by the Magic RDS 4 External text tool.
The code is provided as an example. Further modifications are possible.
-
Thank you so much for all your help!