Myriad Media metadata ("sidecar") file import (XML Format)

Modified on Thu, 26 Jun at 3:24 PM

Importing a Media file with adjacent XML file aka "Sidecar" file.

Overview

When Myriad imports an audio file into the MediaWall, it checks to see if there is a matching "xml" file next to the file that contains enhanced metadata. If this file exists, then Myriad will import the media file then add in the metadata from the xml file, allowing you to set all of the available information for the Media Item during import. 

The XML file must have the same filename as the media item and in the same folder - for example, when importing "ThisSong.wav" Myriad will check for an xml file called "ThisSong.xml" in the same folder.

The MediaItem XML file is an XML document that describes a media item and populates the MediaItem object with the provided data. This document describes the complete XML structure that can be used within the xml file.

Several fields are ignored or should be omitted during import, but are included to provide context for exported xml files. These are detailed within each applicable section.

The majority of this file format stems from an older AutoTrack v4 format, but has been extended to support additional Myriad v6 features and functionality.

There is a sample xml file attached to this article, but you can also easily create an example XML file of your own with your own data by exporting a Myriad Media item to a Transport file, then open the resulting zip file and you will see the xml file in the zip file. You can then alter your media item and by re-exporting see the resulting changes in that xml file in the transport file.

Root Element

The XML document must have a root element named mediaItem (case-insensitive).

<mediaItem contentType="AudioFile" type="song">
  <!-- content elements here -->
</mediaItem>

Root Element Attributes

contentType

  • Type: String (Enum)
  • Purpose: Defines the type of media content
  • Required: Optional (defaults to "AudioFile")
  • Valid Values:
    • AudioFile - Standard audio files (wav, mp3, etc.)
    • MediaListAll - Sequential playlist that plays all items in order
    • MediaListRandom - Random playlist that selects items randomly
    • MediaListRotate - Rotating playlist that cycles through items
    • Command - Command execution item
    • AudioStream - Live audio stream

type

  • Type: String (Enum)
  • Purpose: Defines the item type category
  • Required: Optional
  • Valid Values:
    • BasicMediaItem (ID: 2) - Basic media item
    • Link (ID: 3) - Link/jingle
    • Advert (ID: 4) - Advertisement
    • Song (ID: 7) - Music track
    • VoiceLink (ID: 9) - Voice link/announcement
    • NewsMedia (ID: 42) - News content

Core Identity Elements

mediaId

<mediaId>12345</mediaId>
  • Type: Integer
  • Purpose: Unique identifier for the media item

guid

<guid>550e8400-e29b-41d4-a716-446655440000</guid>
  • Type: GUID
  • Purpose: Globally unique identifier

externalReference

<externalReference><![CDATA[EXT123]]></externalReference>
  • Type: String
  • Purpose: External system reference identifier
  • Note: CDATA wrapping is supported for special characters

cutID

<cutID><![CDATA[CUT001]]></cutID>
  • Type: String
  • Purpose: Cut/segment identifier

musicBrainzId

<musicBrainzId><![CDATA[mbid-12345]]></musicBrainzId>
  • Type: String
  • Purpose: MusicBrainz database identifier

Media Location Elements

mediaLocation

<mediaLocation>C:\Music\song.mp3</mediaLocation>
  • Type: String
  • Purpose: Primary file path to the media
  • Import Notes: This field should be omitted when importing files, but will be populated when exporting xml.

originalMediaLocation

<originalMediaLocation><![CDATA[Original\Path\song.wav]]></originalMediaLocation>
  • Type: String
  • Purpose: Original source file path.
  • Import Notes: This field should be omitted when importing files, but will be populated when exporting xml.

Audio Levels

levels

<levels><![CDATA[{"PeakLevel": -3.2, "RMSLevel": -12.5}]]></levels>
  • Type: JSON String
  • Purpose: Audio level information stored as JSON-serialized MediaItemLevels object.
  • Import Notes: This field should be omitted when importing files, but will be populated when exporting xml.

Metadata Elements

isSweeper

<isSweeper>true</isSweeper>
  • Type: Boolean
  • Purpose: Indicates if item is a sweeper/jingle

revision

<revision>5</revision>
  • Type: Integer
  • Purpose: Version/revision number

Title Information

title (Complex Element)

<title>
  <title><![CDATA[Song Title]]></title>
  <id>67890</id>
</title>
  • Properties:
    • <title> - The item title text
    • <id>- Database ID for the title.
      • Import Notes: This id field should be omitted when importing files, Myriad will automatically locate any existing matching Item Title or create a new ID if nescessary.
  • Purpose: Main title and its database ID

itemDescription

<itemDescription><![CDATA[Song description]]></itemDescription>
  • Type: String
  • Purpose: Detailed description of the item

Display Overrides

displayAs

<displayAs><![CDATA[Display Title]]></displayAs>
  • Type: String
  • Purpose: Override display title

displayBy

<displayBy><![CDATA[Display Artist]]></displayBy>
  • Type: String
  • Purpose: Override display artist/performer

Album Information

album (Complex Element)

<album>
  <title><![CDATA[Album Name]]></title>
  <id>54321</id>
</album>
  • Properties:

    • <title> - Album title text
    • <id>- Database ID for the album
      • Import Notes: This id field should be omitted when importing files, Myriad will automatically locate any existing matching Item Title or create a new ID if nescessary.
  • Purpose: Album information and database ID

Artists (Collection)

artists

<artists>
  <artist index="1">
    <name><![CDATA[Artist Name]]></name>
    <id>11111</id>
  </artist>
  <artist index="2">
    <name><![CDATA[Featured Artist]]></name>
    <id>22222</id>
  </artist>
</artists>
  • Structure: Collection of <artist> elements
  • Requirements: Each artist must have either a name or an ID to be added
  • Attributes:
    • index - Numeric index for the artist
  • Child Elements:
    • <name> - Artist name (string)
    • <id> - Database ID for the artist (integer)

Visual Appearance

backColor

<backColor>#FF0000FF</backColor>
  • Type: Color (hex format ARGB)
  • Purpose: Background color for display

textColor

<textColor>#FFFFFFFF</textColor>
  • Type: Color (hex format ARGB)
  • Purpose: Text color for display

Categorization

categoryName

<categoryName><![CDATA[Rock]]></categoryName>
  • Type: String
  • Purpose: Content category classification

Item Attributes

itemAttributes

<itemAttributes>
  <attribute stationId="1" type="Category" index="1" number="5" level="100" />
  <attribute stationId="1" type="Tempo" index="1" number="3" />
</itemAttributes>
  • Structure: Collection of <attribute> elements
  • Purpose: Defines various categorization and descriptive attributes for media items, used for scheduling, rotation, and content management
  • Attributes:
    • stationId - Station ID (integer) - Associates the attribute with a specific radio station
    • type - Attribute type (string, enum) - Defines the category of attribute
    • index - Attribute index (integer) - Position/priority within the attribute type
    • number - Attribute number (integer) - The specific value/ID of the attribute
    • level - Attribute level (integer, optional) - Weighting or priority level (0-100)

Attribute Type Enumeration

The type attribute supports the following enumeration values:

  • Category - Primary content categorization

    • Purpose: Main category classification for content (e.g., Rock, Pop, News, Jingles)
    • Usage: Used for content filtering, scheduling rules, and rotation management
    • Example: type="Category" number="5" where 5 might represent "Rock" category
  • Type - Secondary type classification

    • Purpose: Sub-categorization within main categories (e.g., Ballad, Up-tempo, Fast)
    • Usage: Provides additional granular classification for scheduling
    • Example: type="Type" number="2" where 2 might represent "Ballad"
  • Gender - Artist/vocalist gender classification

    • Purpose: Categorizes content by performer gender (Male, Female, Group, Mixed)
    • Usage: Used for gender-based rotation rules and scheduling diversity
    • Example: type="Gender" number="1" where 1 might represent "Male"
  • Era - Time period/decade classification

    • Purpose: Categorizes music by era or decade (60s, 70s, 80s, 90s, 2000s, Current)
    • Usage: Used for era-based scheduling and nostalgic programming
    • Example: type="Era" number="4" where 4 might represent "80s"
  • Energy - Energy level classification

    • Purpose: Describes the energy/intensity level of the content (Low, Medium, High)
    • Usage: Used for programming flow and mood-based scheduling
    • Level Support: Often uses the level attribute for precise energy scoring
    • Example: type="Energy" number="3" level="75" where 3 is "High" energy with 75% intensity
  • Tempo - Musical tempo classification

    • Purpose: Categorizes content by tempo/speed (Slow, Medium, Fast, Very Fast)
    • Usage: Used for programming pace and show flow management
    • Example: type="Tempo" number="3" where 3 might represent "Fast"
  • Texture - Musical texture/style classification

    • Purpose: Describes the musical texture or style characteristics
    • Usage: Used for sophisticated music scheduling and complementary track selection
    • Example: type="Texture" number="2" where 2 might represent "Acoustic"
  • Mood - Emotional mood classification

    • Purpose: Categorizes content by emotional mood (Happy, Sad, Energetic, Relaxed)
    • Usage: Used for mood-based programming and emotional flow management
    • Example: type="Mood" number="1" where 1 might represent "Happy"
  • Burnout - Burnout/overplay protection

    • Purpose: Defines burnout rules and overplay protection levels
    • Usage: Prevents tracks from being played too frequently
    • Level Support: Uses level attribute to define burnout sensitivity
    • Example: type="Burnout" number="2" level="50" where 2 is burnout category with 50% protection
  • Tags - Custom tagging system

    • Purpose: Flexible tagging system for custom categorization and metadata
    • Usage: Allows custom attributes that don't fit into standard categories
    • Example: type="Tags" number="15" where 15 might represent a custom tag like "Christmas"

Multiple Attributes

Media items can have two Category attributes (using different index values) but all other attribute types only allow a single item. The combination of attributes provides comprehensive metadata for sophisticated scheduling and content management.

Database Dependency

Important Note: All attribute numbers must correspond to existing attribute definitions in the Myriad database. The attribute names and number mappings are configured within Myriad's database settings and must exist prior to import. Using non-existent attribute numbers will result in the attributes being ignored during import.

Date/Time Information

startDateTime

<startDateTime>2024-01-15T00:00:00Z</startDateTime>
  • Type: DateTime (UTC XML format)
  • Purpose: Item validity start date

endDateTime

<endDateTime>2024-12-31T23:59:59Z</endDateTime>
  • Type: DateTime (UTC XML format)
  • Purpose: Item validity end date

deleteDateTime

<deleteDateTime>2025-01-31T23:59:59Z</deleteDateTime>
  • Type: DateTime (UTC XML format)
  • Purpose: Automatic deletion date

firstReleaseYear

<firstReleaseYear>2023</firstReleaseYear>
  • Type: Short integer
  • Purpose: Year of first release

created

<created>2024-01-15T10:30:00Z</created>
  • Type: DateTime
  • Purpose: Creation timestamp
  • Import Notes: This field will be ignored when importing files and should be omitted, but it will be populated when exporting xml.

lastModified

<lastModified>2024-01-16T14:22:00Z</lastModified>
  • Type: DateTime
  • Purpose: Last modification timestamp
  • Import Notes: This field will be ignored when importing files and should be omitted, but it will be populated when exporting xml.

Timing Information

timings (Complex Container)

<timings>
  <totalLength>00:03:45.123</totalLength>
  <mediaLength>
    <start>00:00:01.000</start>
    <end>00:03:44.000</end>
  </mediaLength>
  <intro>
    <start>00:00:01.000</start>
    <middle>00:00:08.000</middle>
    <end>00:00:15.000</end>
  </intro>
  <hook>
    <start>00:01:30.000</start>
    <end>00:01:45.000</end>
  </hook>
  <extro>
    <start>00:03:30.000</start>
  </extro>
  <loops>
    <loopInfo caption="Chorus" enabled="true">
      <start>00:01:00.000</start>
      <end>00:01:20.000</end>
    </loopInfo>
  </loops>
  <referenceLength>00:03:45.000</referenceLength>
</timings>

totalLength

  • Type: TimeSpan (format: "c" - constant format)
  • Purpose: Total duration of the media

mediaLength

  • Structure: MediaTiming object
  • Child Elements:
    • <start> - Start time (TimeSpan)
    • <end> - End time (TimeSpan)
  • Purpose: Playable portion timing

intro

  • Structure: MediaTiming object
  • Child Elements:
    • <start> - Intro start time (TimeSpan)
    • <end> - Intro end time (TimeSpan)
    • <middle> - Intro middle point (TimeSpan)
  • Purpose: Introduction section timing

hook

  • Structure: MediaTiming object
  • Child Elements:
    • <start> - Hook start time (TimeSpan)
    • <end> - Hook end time (TimeSpan)
  • Purpose: Hook/catchiest part timing

extro

  • Structure: MediaTiming object
  • Child Elements:
    • <start> - Extro start time (TimeSpan)
  • Purpose: Outro/fade timing
  • Default: If not present, sets to (MediaLength.End, MediaLength.End)

loops

  • Structure: Collection of <loopInfo> elements
  • Child Elements:
    • Each <loopInfo>contains:
      • caption attribute - Description of the loop
      • enabled attribute - Whether loop is enabled (boolean)
      • <start> - Loop start time (TimeSpan)
      • <end> - Loop end time (TimeSpan)
  • Purpose: Loop/repeat sections
  • Notes: Currently Myriad only supports a single loop, so this collection will only contain one item.

referenceLength

  • Type: TimeSpan
  • Purpose: Reference timing for scheduling
  • Notes: Not currently used by Myriad, but included for future compatibility.

timeStretchOption

<timeStretchOption>1</timeStretchOption>
  • Type: Integer
  • Purpose: Time stretching configuration

Command and Media Lists

commandText

<commandText><![CDATA[EXECUTE MyCommand]]></commandText>
  • Type: String
  • Purpose: Command to execute (for Command content type)

relatedMediaItems

<relatedMediaItems>
  <item index="1">
    <mediaId>101</mediaId>
  </item>
  <item index="2">
    <mediaId>102</mediaId>
  </item>
</relatedMediaItems>
  • Structure: Collection of <item> elements
  • Purpose: Related items for playlists/groups
  • Each item contains:
    • index attribute - Item index
    • <mediaId> - Media ID of related item

nowPlayingItems

<nowPlayingItems>
  <item index="1">
    <start>00:01:30.000</start>
    <length>00:00:15.000</length>
    <title><![CDATA[Now Playing Text]]></title>
  </item>
</nowPlayingItems>
  • Structure: Collection of <item> elements using MediaNowPlayingItem.SetXml()
  • Purpose: Now playing display information
  • Each item contains:
    • index attribute - Item index
    • <start> - Start time (TimeSpan)
    • <length> - Duration (TimeSpan)
    • <title> - Display title
<copyright>
  <title><![CDATA[Copyright Title]]></title>
  <composer><![CDATA[Composer Name]]></composer>
  <performer><![CDATA[Performer Name]]></performer>
  <publisher><![CDATA[Publisher Name]]></publisher>
  <isrc>US1234567890</isrc>
  <recordLabel><![CDATA[Record Label]]></recordLabel>
  <lyricist><![CDATA[Lyricist Name]]></lyricist>
  <promoter><![CDATA[Promoter Name]]></promoter>
  <recordingNumber><![CDATA[Recording Number]]></recordingNumber>
  <license><![CDATA[License Info]]></license>
  <custom1><![CDATA[Custom Field 1]]></custom1>
  <custom2><![CDATA[Custom Field 2]]></custom2>
  <custom3><![CDATA[Custom Field 3]]></custom3>
  <custom4><![CDATA[Custom Field 4]]></custom4>
  <musicDuration>00:03:30.000</musicDuration>
  <totalDuration>00:03:45.000</totalDuration>
</copyright>
  • Structure: MediaCopyright object populated via SetXml()
  • Purpose: Complete copyright and licensing information
  • All text elements support CDATA

Custom Fields

customFields

<customFields>
  <item index="1">
    <value><![CDATA[Custom Value 1]]></value>
  </item>
  <item index="5">
    <value><![CDATA[URL or other data]]></value>
  </item>
</customFields>
  • Structure: Dictionary
  • Each item contains:
    • index attribute - Integer key
    • <value> - String value

Media Ending Information

outCue

<outCue><![CDATA[...and that's the news]]></outCue>
  • Type: String
  • Purpose: Last words/ending cue text

ending

<ending>fades</ending>
  • Type: String (Enum)
  • Purpose: How the media ends
  • Valid Values:
    • nonSpecific - No specific ending type
    • end - Item ends abruptly
    • fades - Item fades out
    • sustain - Item sustains/holds
    • slowFade - Item has a slow fade out

Temporary References

temporaryReference

<temporaryReference><![CDATA[TEMP_REF_123]]></temporaryReference>
  • Type: String
  • Purpose: Temporary reference for internal processing
  • Note: This field is only used internally within Myriad and is not stored in the database

Notes

notes

<notes>
  <note type="Presenter" startDate="2024-01-01" endDate="2024-12-31">
    <text><![CDATA[Important presenter note]]></text>
  </note>
  <note type="Technical">
    <text><![CDATA[Technical information]]></text>
  </note>
  <note type="DigitalRadio">
    <text><![CDATA[DAB/Digital radio information]]></text>
  </note>
  <note type="Web">
    <text><![CDATA[Web/online information]]></text>
  </note>
</notes>
  • Structure: Collection of <note> elements using MediaNote.SetXml()
  • Purpose: Various types of notes and annotations
  • Each note contains:
    • type attribute - Note type (Presenter, Technical, DigitalRadio, Web)
    • startDate attribute - Optional start date for note validity
    • endDate attribute - Optional end date for note validity
    • <text> - Note content (supports CDATA)

Images

images

<images>
  <image type="AlbumArt" primary="true">
    <location><![CDATA[C:\Images\albumart.jpg]]></location>
    <description><![CDATA[Album artwork]]></description>
  </image>
  <image type="Logo">
    <location><![CDATA[C:\Images\logo.png]]></location>
    <description><![CDATA[Station logo]]></description>
  </image>
</images>
  • Structure: Collection of <image> elements using MediaImage.SetXml()
  • Purpose: Associated images and artwork
  • Each image contains:
    • type attribute - Image type (e.g., "AlbumArt", "Logo")
    • primary attribute - Whether this is the primary image (boolean)
    • <location> - File path to image
    • <description> - Description of the image
  • Import Notes: This field will be ignored when importing files and should be omitted, but it will be populated when exporting xml.

Scheduling Information

scheduling

<scheduling>
  <station id="1">
    <schedulingInhibited>false</schedulingInhibited>
    <hourRestrictions>
      <day number="1">
        <hour index="0" restricted="false" />
        <hour index="1" restricted="true" />
        <hour index="6" restricted="false" />
      </day>
      <day number="2">
        <hour index="0" restricted="true" />
        <hour index="12" restricted="false" />
      </day>
    </hourRestrictions>
  </station>
  <station id="2">
    <schedulingInhibited>true</schedulingInhibited>
  </station>
</scheduling>
  • Structure: Dictionary where key is StationId
  • Purpose: Per-station scheduling restrictions and settings
  • Each station contains:
    • id attribute - Station ID (integer)
    • <schedulingInhibited> - Whether scheduling is completely disabled (boolean)
    • <hourRestrictions>- Hour-by-hour restrictions
      • <day number="X">- Day of week (1=Monday, 7=Sunday)
        • <hour index="X" restricted="true/false" /> - Hour restrictions (0-23)

Example Complete XML

<mediaItem contentType="AudioFile" type="Song">
  <mediaId>12345</mediaId>
  <guid>550e8400-e29b-41d4-a716-446655440000</guid>
  <externalReference><![CDATA[MUS12345]]></externalReference>
  <cutID><![CDATA[CUT001]]></cutID>

  <mediaLocation>C:\Music\song.mp3</mediaLocation>
  <originalMediaLocation><![CDATA[D:\Source\original.wav]]></originalMediaLocation>

  <isSweeper>false</isSweeper>
  <revision>1</revision>

  <title>
    <title><![CDATA[Example Song]]></title>
    <id>67890</id>
  </title>

  <artists>
    <artist index="1">
      <name><![CDATA[Main Artist]]></name>
      <id>11111</id>
    </artist>
  </artists>

  <album>
    <title><![CDATA[Example Album]]></title>
    <id>54321</id>
  </album>

  <categoryName><![CDATA[Rock]]></categoryName>

  <startDateTime>2024-01-01T00:00:00Z</startDateTime>
  <endDateTime>2024-12-31T23:59:59Z</endDateTime>
  <firstReleaseYear>2023</firstReleaseYear>

  <timings>
    <totalLength>00:03:45.123</totalLength>
    <mediaLength>
      <start>00:00:01.000</start>
      <end>00:03:44.000</end>
    </mediaLength>
    <intro>
      <start>00:00:01.000</start>
      <end>00:00:15.000</end>
    </intro>
    <extro>
      <start>00:03:30.000</start>
    </extro>
  </timings>

  <copyright>
    <title><![CDATA[Example Song]]></title>
    <composer><![CDATA[Song Writer]]></composer>
    <performer><![CDATA[Main Artist]]></performer>
    <isrc>US1234567890</isrc>
  </copyright>

  <ending>fades</ending>

  <notes>
    <note type="Presenter">
      <text><![CDATA[Great song for morning shows]]></text>
    </note>
  </notes>
</mediaItem>

Processing Notes

  1. Error Handling: Individual element parsing is wrapped in try-catch blocks to handle malformed data gracefully, however caution should be exercised if using more complex fields as it could still result in unexpected behaviour.
  2. CDATA Support: Most text elements support CDATA sections for special characters
  3. Case Sensitivity: Root element name comparison is case-insensitive
  4. Default Values: Missing optional elements retain their current values
  5. Collection Clearing: Some collections (like loops) are cleared before repopulating

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article