private static void SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { // Get skeletons from Kinect Skeleton[] skeletons = new Skeleton[0]; using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame != null) { skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); } } // Dispatch the first skeleton foreach (Skeleton skel in skeletons) { if (skel.TrackingState == SkeletonTrackingState.Tracked) { Dispatch.TriggerSkeletonMoved(skel); break; } } }
static async void ReadCSV() { string filename = @"C:\Users\Rachel\Documents\GitHub\VirtualOrchestra\Sample Dances\TempoGesture1.csv"; // Parse CSV var rows = File.ReadAllLines(filename) .Select(r => r.Split(';')[0].Split(',')); // Read headers var headers = rows.First(); // Read data foreach (var row in rows.Skip(1)) { // Delay Thread.Sleep(1000 / 30); // Read skeleton var skel = new Skeleton(); var d = RowDict(row, headers); foreach (JointType type in Enum.GetValues(typeof(JointType))) { var name = Enum.GetName(typeof(JointType), type); var point = new SkeletonPoint(); point.X = d[name + ".X"]; point.Y = d[name + ".Y"]; point.Z = d[name + ".Z"]; var joint = skel.Joints[type]; joint.Position = point; joint.TrackingState = point.X == float.NaN ? JointTrackingState.NotTracked : JointTrackingState.Tracked; skel.Joints[type] = joint; } // Trigger skeleton update event in main thread mainThread.Send(state => Dispatch.TriggerSkeletonMoved(skel), null); } }