Function

Timelines.ImportMarkersFromString

Void Timelines.ImportMarkersFromString(
  Int32 timelineId, 
  String importMappingVersion, 
  String csvFilePath, 
  AcwFrameRate frameRate
)
API https://api.avolites.com/16.0/api/Timelines.ImportMarkersFromString.html
description Imports markers into the timeline.
namespace Timelines
parameter timelineId ( Int32 ): The timeline ID.
importMappingVersion ( String ): The XML node for the version of the mapping to use.
csvFilePath ( String ): The csv file path.
frameRate ( AcwFrameRate ): The framerate to import.
return value Void

This article was written with massive help from Gregory Haynes; I couldn't have figured this out myself.

There is also the function Timelines.ImportMarkers, however that would expect an XML object as importMappingVersion while this function here parses a string which is much easier to handle.

Arguments
Example CSV File:
externalId,legend,time 
0,Test,00:00:01.00
blah,Marker 2,00:01:23.00
999,Another Marker,00:12:34.56


By default it will assume that the CSV file contains headers and it will attempt to use those to figure out which column is which. If it cannot figure out the column headers it will assume the order specified above i.e. “externalId”, “legend” then “time”. The external ID can be whatever you want and is used within Titan to detect duplicates i.e. if you import more than once a matching external ID will replace an existing one.

The smallest possible string as importMappingVersion is “&lt;Version /&gt;” which essentially is “<Version />” with the angled brackets written as entities (otherwise they'd be interpreted as XML which would break the macro XML)

Here is an example of what that string could be (single quotes used instead of double quotes to make it easier to use in a string):

<Version id='1' name='2020' headerRow='true'><externalId name='#' index='0' /><legend name='Name' index='1' /><time name='Start' index='2' format='' /></Version> (again the angled brackets need to be written as entities &lt; and &gt; when using this).

Value Description
Fps24 24 frames/sec
Fps25 25 frames/sec
Fps29DF 29.97 frames/sec ('drop frame')
Fps30 30 frames/sec
Fps44 internal timecode, 44 frames/sec
Fps100 Winamp and how it is displayed in the Cue View
Fps60 60 frames/sec
Fps1000 Milliseconds

However it looks like you need to use Timecode.ParseFrameRate in order to convert the vaue into a proper framerate object, e.g. Timecode.ParseFrameRate(100).

Example in

Timeline: Import Markers:

<step>Timelines.ImportMarkersFromString(
  Handles.GetTitanIdFromHandle("timelineHandleUN=1"), 
  "&lt;Version /&gt;", 
  "C:\Users\sb\Documents\Titan\Markers\test.csv", 
  Timecode.ParseFrameRate(100))
</step>
Also used in
Remarks