OdessaGUIProject.Workers.AvidStudioExportWorker.ExportHighlightsToFile C# (CSharp) Method

ExportHighlightsToFile() private method

private ExportHighlightsToFile ( string outputPath ) : bool
outputPath string
return bool
        internal override bool ExportHighlightsToFile(string outputPath)
        {
            bool success = true;

            StringBuilder sb = new StringBuilder();

            int masterClipId = 1;

            sb.Append(
                @"<?xml version=""1.0"" encoding=""UTF-8""?>
            <!DOCTYPE xmeml>
            <xmeml version=""4"">
            <project>
            <name>Highlights from Highlight Hunter</name>
            <children>
            ");

            for (int i = 0; i < MainModel.HighlightObjects.Count; i++)
            {
                var highlightObject = MainModel.HighlightObjects[i];

                var uuid = (Guid.NewGuid()).ToString();
                var duration = highlightObject.InputFileObject.TotalFrames;
                var timebase = CalculateTimebase(highlightObject.InputFileObject.FramesPerSecond);
                var isNTSC = CalculateIsNTSC(highlightObject.InputFileObject.FramesPerSecond);
                int inFrame = (int)(highlightObject.StartTime.TotalSeconds * highlightObject.InputFileObject.FramesPerSecond);
                int outFrame = (int)(highlightObject.EndTime.TotalSeconds * highlightObject.InputFileObject.FramesPerSecond);
                var clipName = highlightObject.Title + " " + masterClipId;

                var pathURL = GeneratePathURL(highlightObject.InputFileObject.SourceFileInfo.FullName);

                sb.Append(
                    @"<clip id=""masterclip-" + masterClipId + @""">
            <uuid>" + uuid + @"</uuid>
            <masterclipid>masterclip-" + masterClipId + @"</masterclipid>
            <ismasterclip>TRUE</ismasterclip>
            <duration>" + duration + @"</duration><rate>
            <timebase>" + timebase + @"</timebase>
            <ntsc>" + isNTSC + @"</ntsc>
            </rate>
            <in>" + inFrame + @"</in>
            <out>" + outFrame + @"</out>
            <name>" + clipName + @"</name>
            ");

                sb.Append(@"<media>
            ");

                #region Video

                sb.Append(@"<video>
            ");

                sb.Append(@"<track>
            ");
                sb.Append(@"<clipitem id=""clipitem-" + masterClipId + @"-video"">
            <masterclipid>masterclip-" + masterClipId + @"</masterclipid>
            <name>" + clipName + @"</name>
            <file id=""file-" + masterClipId + @""">
            <name>" + highlightObject.InputFileObject.SourceFileInfo.Name + @"</name>
            <pathurl>" + pathURL + @"</pathurl>
            <media>
            <video>
            <samplecharacteristics>
            <width>" + highlightObject.InputFileObject.VideoWidth + @"</width>
            <height>" + highlightObject.InputFileObject.VideoHeight + @"</height>
            </samplecharacteristics>
            </video>
            <audio>
            <samplecharacteristics>
            <depth>16</depth>
            <samplerate>48000</samplerate>
            </samplecharacteristics>
             <channelcount>1</channelcount>
             <layout>mono</layout>
             <audiochannel>
             	<sourcechannel>1</sourcechannel>
             	<channellabel>discrete</channellabel>
             </audiochannel>
            </audio>
            <audio>
            <samplecharacteristics>
            <depth>16</depth>
            <samplerate>48000</samplerate>
            </samplecharacteristics>
             <channelcount>1</channelcount>
             <layout>mono</layout>
             <audiochannel>
             	<sourcechannel>2</sourcechannel>
             	<channellabel>discrete</channellabel>
             </audiochannel>
            </audio>
            </media>
            </file>
            ");

                sb.Append(
            @"<link>
            <linkclipref>clipitem-" + masterClipId + @"-video</linkclipref>
            <mediatype>video</mediatype>
            <trackindex>1</trackindex>
            <clipindex>1</clipindex>
            </link>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-audio-1</linkclipref>
            <mediatype>audio</mediatype>
            <trackindex>1</trackindex>
            <clipindex>1</clipindex>
            </link>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-audio-2</linkclipref>
            <mediatype>audio</mediatype>
            <trackindex>2</trackindex>
            <clipindex>1</clipindex>
            </link>
            </clipitem>
            ");

                sb.Append(@"</track>
            </video>
            ");

                #endregion Video

                #region Audio

                sb.Append(@"<audio>
            <track>
            <clipitem id=""clipitem-" + masterClipId + @"-audio-1"">
            <masterclipid>masterclip-" + masterClipId + @"</masterclipid>
            <name>" + clipName + @"</name>
            <file id=""file-" + masterClipId + @"""/>
            <sourcetrack>
            <mediatype>audio</mediatype>
            <trackindex>1</trackindex>
            </sourcetrack>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-video</linkclipref>
            <mediatype>video</mediatype>
            <trackindex>1</trackindex>
            <clipindex>1</clipindex>
            </link>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-audio-1</linkclipref>
            <mediatype>audio</mediatype>
            <trackindex>1</trackindex>
            <clipindex>1</clipindex>
            </link>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-audio-2</linkclipref>
            <mediatype>audio</mediatype>
            <trackindex>2</trackindex>
            <clipindex>1</clipindex>
            </link>
            </clipitem>
            </track>
            <track>
            <clipitem id=""clipitem-" + masterClipId + @"-audio-2"">
            <masterclipid>masterclip-" + masterClipId + @"</masterclipid>
            <name>" + clipName + @"</name>
            <file id=""file-" + masterClipId + @"""/>
            <sourcetrack>
            <mediatype>audio</mediatype>
            <trackindex>2</trackindex>
            </sourcetrack>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-video</linkclipref>
            <mediatype>video</mediatype>
            <trackindex>1</trackindex>
            <clipindex>1</clipindex>
            </link>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-audio-1</linkclipref>
            <mediatype>audio</mediatype>
            <trackindex>1</trackindex>
            <clipindex>1</clipindex>
            </link>
            <link>
            <linkclipref>clipitem-" + masterClipId + @"-audio-2</linkclipref>
            <mediatype>audio</mediatype>
            <trackindex>2</trackindex>
            <clipindex>1</clipindex>
            </link>
            </clipitem>
            </track>
            </audio>
            ");

                #endregion Audio

                sb.Append(@"</media>
            </clip>
            ");

                masterClipId += 1;
            }

            try
            {
                File.WriteAllText(outputPath, sb.ToString());
                ProjectFileLocation = outputPath;

                AnalyticsHelper.FireEvent("Export - Adobe Premiere");

                success = true;
            }
            catch (Exception ex)
            {
                Logger.Error("Error writing to file: " + ex);
                success = false;
            }

            return success;
        }