public static void StartSavingXMLSkeleton()
        {
            int nbSkFrame = 0;
            int count     = 0;

            try
            {
                XmlWriterSettings settings = new XmlWriterSettings()
                {
                    ConformanceLevel = ConformanceLevel.Auto,
                    Indent           = true
                };
                xmlSkeletonWriter = XmlWriter.Create(SavingTools.pathFolder + "/" + "avatarSkeletonData.skd", settings);
                xmlSkeletonWriter.WriteStartDocument();
                xmlSkeletonWriter.WriteStartElement("Skeletons");
                xmlSkeletonQueue = new PCQueue <Skeleton>(sk =>
                {
                    nbSkFrame++;
                    if (nbSkFrame % 2 == 1 || nbSkFrame == 0)
                    {
                        xmlSkeletonWriter.WriteStartElement("Skeleton_" + count++);
                        xmlSkeletonWriter.WriteAttributeString("TimeElapse", Tools.getStopWatch().ToString());
                        xmlSkeletonWriter.WriteAttributeString("TrackingState", sk.TrackingState.ToString());
                        List <Joint> lJoints = sk.Joints.ToList();
                        lJoints.ForEach(joint =>
                        {
                            xmlSkeletonWriter.WriteStartElement(joint.JointType.ToString());
                            xmlSkeletonWriter.WriteAttributeString("TrackingState", joint.TrackingState.ToString());
                            xmlSkeletonWriter.WriteAttributeString("X", joint.Position.X.ToString());
                            xmlSkeletonWriter.WriteAttributeString("Y", joint.Position.Y.ToString());
                            xmlSkeletonWriter.WriteAttributeString("Z", joint.Position.Z.ToString());
                            xmlSkeletonWriter.WriteEndElement();
                        });
                        xmlSkeletonWriter.WriteEndElement();
                    }
                }, () =>
                {
                    xmlSkeletonWriter.WriteEndElement();
                    xmlSkeletonWriter.WriteEndDocument();
                    xmlSkeletonWriter.Flush();
                    xmlSkeletonWriter.Close();
                }, "XMLSkeletonRecordingTask");
            }
            catch (Exception ex)
            {
                if (Tools.getStateStopWatch())
                {
                    Tools.stopStopWatch();
                }
                Console.WriteLine(ex.ToString());
            }
        }
 /// <summary>
 /// Functions starting the different recordings (video, openGL, face, etc)
 /// </summary>
 /// <author> Amirali Ghazi </author>
 #region StartSavingFunctions
 public static void StartSavingStreamRecording()
 {
     try
     {
         videoStreamWriter = new VideoFileWriter();
         videoStreamQueue  = new PCQueue <Bitmap>(bm =>
         {
             videoStreamWriter.WriteVideoFrame(bm);
         }, () =>
         {
             videoStreamWriter.Close();
         }, "VideoRecordingTask");
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.ToString());
     }
 }
        public static void startSavingTonePeak()
        {
            int valueIndex = 0;

            try
            {
                XmlWriterSettings settings = new XmlWriterSettings()
                {
                    ConformanceLevel = ConformanceLevel.Auto,
                    Indent           = true
                };
                xmlVoiceWriter = XmlWriter.Create(SavingTools.pathFolder + "/" + "tonePeakData.xml", settings);
                xmlVoiceWriter.WriteStartDocument();
                xmlVoiceWriter.WriteStartElement("PeakValues");
                xmlVoiceQueue = new PCQueue <float>(value =>
                {
                    xmlVoiceWriter.WriteStartElement("PeakValue_" + valueIndex);
                    xmlVoiceWriter.WriteAttributeString("TimeElapse", Tools.getStopWatch().ToString());
                    xmlVoiceWriter.WriteAttributeString("Value", value.ToString());
                    xmlVoiceWriter.WriteAttributeString("Index", (valueIndex++).ToString());
                    xmlVoiceWriter.WriteEndElement();
                }, () =>
                {
                    xmlVoiceWriter.WriteEndElement();
                    xmlVoiceWriter.WriteEndDocument();
                    xmlVoiceWriter.Flush();
                    xmlVoiceWriter.Close();
                }, "XMLVoiceRecordingTask");
            }
            catch (Exception ex)
            {
                if (Tools.getStateStopWatch())
                {
                    Tools.stopStopWatch();
                }
                Console.WriteLine(ex.ToString());
            }
        }
        public static void StartSavingXMLFace()
        {
            int nbFaceFrame = 0;

            try
            {
                XmlWriterSettings settings = new XmlWriterSettings()
                {
                    ConformanceLevel = ConformanceLevel.Auto,
                    Indent           = true
                };
                xmlFaceWriter = XmlWriter.Create(SavingTools.pathFolder + "/" + "faceData.xml", settings);
                xmlFaceWriter.WriteStartDocument();
                xmlFaceWriter.WriteStartElement("Faces");

                xmlFaceQueue = new PCQueue <FaceDataWrapper>(fdw =>
                {
                    xmlFaceWriter.WriteStartElement("Face_" + nbFaceFrame++);
                    xmlFaceWriter.WriteStartElement("FacePoints3D");
                    for (int i = 0; i < fdw.depthPointsList.Count; ++i)
                    {
                        switch (i)
                        {
                        case 7:
                        case 8:
                        case 15:
                        case 16:
                        case 17:
                        case 18:
                        case 19:
                        case 20:
                        case 21:
                        case 22:
                        case 23:
                        case 24:
                        case 31:
                        case 40:
                        case 41:
                        case 48:
                        case 49:
                        case 50:
                        case 51:
                        case 52:
                        case 53:
                        case 54:
                        case 55:
                        case 56:
                        case 57:
                        case 64:
                        case 87:
                            {
                                xmlFaceWriter.WriteStartElement("Point3D_" + i);
                                xmlFaceWriter.WriteAttributeString("X", fdw.depthPointsList.ElementAt(i).X.ToString());
                                xmlFaceWriter.WriteAttributeString("Y", fdw.depthPointsList.ElementAt(i).Y.ToString());
                                xmlFaceWriter.WriteAttributeString("Z", fdw.depthPointsList.ElementAt(i).Z.ToString());
                                xmlFaceWriter.WriteEndElement();
                            }
                            break;
                        }
                    }
                    xmlFaceWriter.WriteEndElement();
                    xmlFaceWriter.WriteStartElement("FacePoints");
                    for (int i = 0; i < fdw.colorPointsList.Count; ++i)
                    {
                        xmlFaceWriter.WriteStartElement("Point_" + i);
                        xmlFaceWriter.WriteAttributeString("X", fdw.colorPointsList.ElementAt(i).X.ToString());
                        xmlFaceWriter.WriteAttributeString("Y", fdw.colorPointsList.ElementAt(i).Y.ToString());
                        xmlFaceWriter.WriteEndElement();
                    }
                    xmlFaceWriter.WriteEndElement();

                    xmlFaceWriter.WriteStartElement("FaceTriangles");
                    for (int i = 0; i < fdw.faceTriangles.Count(); ++i)
                    {
                        // Amirali
                        xmlFaceWriter.WriteStartElement("FaceTriangle_" + i);
                        xmlFaceWriter.WriteAttributeString("Vertex_1", fdw.faceTriangles.ElementAt(i).First.ToString());
                        xmlFaceWriter.WriteAttributeString("Vertex_2", fdw.faceTriangles.ElementAt(i).Second.ToString());
                        xmlFaceWriter.WriteAttributeString("Vertex_3", fdw.faceTriangles.ElementAt(i).Third.ToString());
                        xmlFaceWriter.WriteEndElement();
                    }
                    xmlFaceWriter.WriteEndElement();
                    xmlFaceWriter.WriteEndElement();
                }, () =>
                {
                    xmlFaceWriter.Flush();
                    xmlFaceWriter.WriteEndElement();
                    xmlFaceWriter.WriteEndDocument();
                    xmlFaceWriter.Close();
                }, "XMLFaceRecordingTask");
            } catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }