grass valley developers

Home > APIs > AppServer API > Examples > Asset Management > Track Labels

Track Labels

The sample code below shows how to set and get a clip's track labels.

[C#]

// clip to edit
string clipname = "V:/default/Clip";
string fullclipname = "edl/cmf//local/" + clipname;

// create an AppServer
bool newConnection = false;
IAppServer iappServer = appServerMgrProxy.CreateAppServer(suiteName, 
	appName, out newConnection);

// get a track editor for clip
IMediaMgr mediaMgr = iappServer.CreateMediaMgr(appName);
ITrackEditor trackEditor = (ITrackEditor) mediaMgr.CreateEditor(fullclipname);

// get the clip's XML representation
string xml;
trackEditor.GetXml("", out xml);			

// load the xml string into a native XmlDocument
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);

// setup a namespace manager to parse the xml doc
XmlNamespaceManager namespaceManager = new XmlNamespaceManager(xmlDoc.NameTable);
namespaceManager.AddNamespace("ns", "PdrDB__1.0");



////////////////////////////////////////
// set track labels
////////////////////////////////////////

// get all audio track nodes
XmlNodeList trackList = xmlDoc.SelectNodes(("//ns:XML/ns:Data/ns:Movie/ns:Track[@TrackType='PdrAudioTrack']"), namespaceManager);

// and set their track labels
foreach (XmlNode track in trackList)
{
	// get track number, ID, and label
	int trackNumber = Int32.Parse(track.Attributes.GetNamedItem("TrackNumber").Value);	// track position like 1, 2, 3, 4
	string trackId = track.Attributes.GetNamedItem("TrackId").Value;	// GUID id like b7d4e12e8350425bbaa4eb16236fb0e0

	// if first or second tracks, set label to English
	if (trackNumber == 1 || trackNumber == 2)
		trackEditor.SetTrackLabel(trackId, "ENG");
		
	// if third or fourth tracks, set label to something else
	else if (trackNumber == 3 || trackNumber == 4)
		trackEditor.SetTrackLabel(trackId, "something else");
}


////////////////////////////////////////
// get track labels
////////////////////////////////////////

// Make sure you call GetXml again to get the *updated* XML. Load the XML document again.
trackEditor.GetXml("", out xml);
xmlDoc.LoadXml(xml);

// get all audio track nodes
trackList = xmlDoc.SelectNodes(("//ns:XML/ns:Data/ns:Movie/ns:Track[@TrackType='PdrAudioTrack']"), namespaceManager);

// and print them
foreach (XmlNode track in trackList)
{
	// get track number, ID, and label
	int trackNumber = Int32.Parse(track.Attributes.GetNamedItem("TrackNumber").Value);	// track position like 1, 2, 3, 4
	string trackLabel = track.Attributes.GetNamedItem("TrackLabel").Value;	// label like "ENG", "FRE", or anything you assign

	Console.WriteLine("track number: {0}, track label: {1}", trackNumber, trackLabel );	
}


// be sure to cleanup or you will leak these objects!
trackEditor.Detach();
trackEditor.Dispose();
mediaMgr.Dispose();
iappServer.CloseConnection();