Пример #1
0
        public Color ConfiguredColor(string itemName, PhonemeType phoneme, LipSyncMapItem item = null)
        {
            Color retVal = Color.Black;

            if (item == null)
            {
                item = FindMapItem(itemName);
            }

            if (item != null)
            {
                if (this.IsMatrix)
                {
                    if (item.ElementColors[phoneme] != Color.Black)
                    {
                        retVal = item.ElementColors[phoneme];
                    }
                }
                else
                {
                    if (item.PhonemeList[phoneme.ToString()] == true)
                    {
                        HSV hsvVal = HSV.FromRGB(new RGB(item.ElementColor));
                        hsvVal.V = 1;
                        retVal   = hsvVal.ToRGB().ToArgb();
                    }
                }
            }
            return(retVal);
        }
Пример #2
0
        public double ConfiguredIntensity(string itemName, PhonemeType phoneme, LipSyncMapItem item = null)
        {
            double retVal = 0;

            if (item == null)
            {
                item = FindMapItem(itemName);
            }

            if (item != null)
            {
                if (this.IsMatrix)
                {
                    if (item.ElementColors[phoneme] != Color.Black)
                    {
                        HSV hsvVal = HSV.FromRGB(new RGB(item.ElementColors[phoneme]));
                        retVal = hsvVal.V;
                        //retVal = 1.0;
                    }
                }
                else
                {
                    if (item.PhonemeList[phoneme.ToString()] == true)
                    {
                        HSV hsvVal = HSV.FromRGB(new RGB(item.ElementColor));
                        retVal = hsvVal.V;
                    }
                }
            }
            return(retVal);
        }
Пример #3
0
        public double ConfiguredIntensity(string itemName, PhonemeType phoneme, LipSyncMapItem item = null)
        {
            double retVal = 0;

            if (item == null)
            {
                item = FindMapItem(itemName);
            }

            if (item != null)
            {
                if (!this.IsMatrix)
                {
                    if (item.PhonemeList[phoneme.ToString()] == true)
                    {
                        retVal = HSV.VFromRgb(item.ElementColor);
                    }
                }
            }
            return(retVal);
        }
Пример #4
0
 public Color ConfiguredColor(string itemName, PhonemeType phoneme, LipSyncMapItem item = null)
 {
     Color retVal = Color.Black;
     
     if (item == null)
     {
         item = FindMapItem(itemName);
     }
     
     if (item != null)
     {
         if (this.IsMatrix) 
         {
             if (item.ElementColors[phoneme] != Color.Black)
             {
                 retVal = item.ElementColors[phoneme];
             }
         }
         else
         {
             if (item.PhonemeList[phoneme.ToString()] == true)
             {
                 HSV hsvVal = HSV.FromRGB(new RGB(item.ElementColor));
                 hsvVal.V = 1;
                 retVal = hsvVal.ToRGB().ToArgb();
             }
         }
     }
     return retVal;
 }
Пример #5
0
        public double ConfiguredIntensity(string itemName, PhonemeType phoneme, LipSyncMapItem item = null)
        {
            double retVal = 0;
            
            if (item == null)
            {
                item = FindMapItem(itemName);
            }
            
            if (item != null)
            {
                if (this.IsMatrix)
                {
                    if (item.ElementColors[phoneme] != Color.Black)
                    {
                        HSV hsvVal = HSV.FromRGB(new RGB(item.ElementColors[phoneme]));
                        retVal = hsvVal.V;
                        //retVal = 1.0;
                    }

                }
                else 
                {
                    if (item.PhonemeList[phoneme.ToString()] == true)
                    {
                        HSV hsvVal = HSV.FromRGB(new RGB(item.ElementColor));
                        retVal = hsvVal.V;
                    }
                }
            }
            return retVal;

        }
Пример #6
0
        private void RenderMapElements(LipSyncMapData mapData, IElementNode element, PhonemeType phoneme)
        {
            LipSyncMapItem item = mapData.FindMapItem(element.Id);

            if (item == null)
            {
                return;
            }

            if (mapData.IsFaceComponentType(FaceComponent.Outlines, item))
            {
                var colorVal = mapData.ConfiguredColorAndIntensity(item);
                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                _elementData.Add(result);
            }
            else if (mapData.IsFaceComponentType(FaceComponent.EyesOpen, item))
            {
                var colorVal = mapData.ConfiguredColorAndIntensity(item);
                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                _elementData.Add(result);
            }
            else
            {
                if (LipSyncMode == LipSyncMode.MarkCollection && _marks != null)
                {
                    TimeSpan lastMarkTime = StartTime;
                    foreach (var mark in _marks)
                    {
                        if (!AllowMarkGaps)
                        {
                            var gapDuration = mark.StartTime - lastMarkTime;
                            if (gapDuration.TotalMilliseconds > 10 && mapData.PhonemeState("REST", item))
                            {
                                //Fill the gap with a rest
                                var colorVal = mapData.ConfiguredColorAndIntensity(item);
                                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, gapDuration);
                                result.OffsetAllCommandsByTime(lastMarkTime - StartTime);
                                _elementData.Add(result);
                            }

                            lastMarkTime = mark.EndTime;
                        }
                        if (mapData.PhonemeState(mark.Text, item))
                        {
                            var colorVal = mapData.ConfiguredColorAndIntensity(item);
                            var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, mark.Duration);
                            result.OffsetAllCommandsByTime(mark.StartTime - StartTime);
                            _elementData.Add(result);
                        }
                    }

                    if (!AllowMarkGaps)
                    {
                        var gapDuration = StartTime + TimeSpan - lastMarkTime;
                        if (gapDuration.TotalMilliseconds > 10 && mapData.PhonemeState("REST", item))
                        {
                            //Fill the gap with a rest
                            var colorVal = mapData.ConfiguredColorAndIntensity(item);
                            var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, gapDuration);
                            result.OffsetAllCommandsByTime(lastMarkTime - StartTime);
                            _elementData.Add(result);
                        }
                    }
                }
                else
                {
                    if (mapData.PhonemeState(phoneme.ToString(), item))
                    {
                        var colorVal = mapData.ConfiguredColorAndIntensity(item);
                        var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                        _elementData.Add(result);
                    }
                }
            }
        }
Пример #7
0
        private void RenderPropertyMapElements(IElementNode element, PhonemeType phoneme)
        {
            var fm = element.Properties.Get(FaceDescriptor.ModuleId) as FaceModule;

            if (fm == null)
            {
                return;
            }

            if (fm.IsFaceComponentType(FaceComponent.Outlines) && ShowOutline)
            {
                var colorVal = fm.ConfiguredColorAndIntensity();
                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                _elementData.Add(result);
            }
            else if (fm.IsFaceComponentType(FaceComponent.EyesOpen) && EyeMode == EyeMode.Open)
            {
                var colorVal = fm.ConfiguredColorAndIntensity();
                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                _elementData.Add(result);
            }
            if (fm.IsFaceComponentType(FaceComponent.EyesClosed) && EyeMode == EyeMode.Closed)
            {
                var colorVal = fm.ConfiguredColorAndIntensity();
                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                _elementData.Add(result);
            }
            else
            {
                if (LipSyncMode == LipSyncMode.MarkCollection && _marks != null)
                {
                    TimeSpan lastMarkTime = StartTime;
                    foreach (var mark in _marks)
                    {
                        if (!AllowMarkGaps)
                        {
                            var gapDuration = mark.StartTime - lastMarkTime;
                            if (gapDuration.TotalMilliseconds > 10 && fm.PhonemeState("REST"))
                            {
                                //Fill the gap with a rest
                                var colorVal = fm.ConfiguredColorAndIntensity();
                                var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, gapDuration);
                                result.OffsetAllCommandsByTime(lastMarkTime - StartTime);
                                _elementData.Add(result);
                            }

                            lastMarkTime = mark.EndTime;
                        }
                        if (fm.PhonemeState(mark.Text))
                        {
                            var colorVal = fm.ConfiguredColorAndIntensity();
                            var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, mark.Duration);
                            result.OffsetAllCommandsByTime(mark.StartTime - StartTime);
                            _elementData.Add(result);
                        }
                    }

                    if (!AllowMarkGaps)
                    {
                        var gapDuration = StartTime + TimeSpan - lastMarkTime;
                        if (gapDuration.TotalMilliseconds > 10 && fm.PhonemeState("REST"))
                        {
                            //Fill the gap with a rest
                            var colorVal = fm.ConfiguredColorAndIntensity();
                            var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, gapDuration);
                            result.OffsetAllCommandsByTime(lastMarkTime - StartTime);
                            _elementData.Add(result);
                        }
                    }
                }
                else
                {
                    if (fm.PhonemeState(phoneme.ToString()))
                    {
                        var colorVal = fm.ConfiguredColorAndIntensity();
                        var result   = CreateIntentsForElement(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                        _elementData.Add(result);
                    }
                }
            }
        }
Пример #8
0
        // renders the given node to the internal ElementData dictionary. If the given node is
        // not a element, will recursively descend until we render its elements.
        private void RenderNodes()
        {
            EffectIntents      result;
            LipSyncMapData     mapData     = null;
            List <ElementNode> renderNodes = TargetNodes.SelectMany(x => x.GetNodeEnumerator()).ToList();

            if (LipSyncMode == LipSyncMode.MarkCollection)
            {
                SetupMarks();
            }

            if (_data.PhonemeMapping != null)
            {
                if (!_library.Library.ContainsKey(_data.PhonemeMapping))
                {
                    _data.PhonemeMapping = _library.DefaultMappingName;
                }

                PhonemeType phoneme = _data.StaticPhoneme;
                if (_library.Library.TryGetValue(_data.PhonemeMapping, out mapData))
                {
                    if (mapData.IsMatrix)
                    {
                        SetupPictureEffect();
                        if (LipSyncMode == LipSyncMode.MarkCollection)
                        {
                            foreach (var mark in _marks)
                            {
                                var file = mapData.PictureFileName(mark.Text.ToUpper());
                                _thePic.Image    = LoadImage(file);
                                _thePic.TimeSpan = mark.Duration;
                                _thePic.MarkDirty();
                                result = _thePic.Render();
                                result.OffsetAllCommandsByTime(mark.StartTime - StartTime);
                                _elementData.Add(result);
                                //}
                            }
                        }
                        else
                        {
                            var file = mapData.PictureFileName(phoneme);
                            if (File.Exists(file))
                            {
                                _thePic.Image = LoadImage(file);
                                result        = _thePic.Render();
                                _elementData.Add(result);
                            }
                        }

                        if (null != _thePic)
                        {
                            result = _thePic.Render();
                            _elementData.Add(result);
                        }
                    }
                    else
                    {
                        renderNodes.ForEach(delegate(ElementNode element)
                        {
                            LipSyncMapItem item = mapData.FindMapItem(element.Name);
                            if (item != null)
                            {
                                if (LipSyncMode == LipSyncMode.MarkCollection && _marks != null)
                                {
                                    foreach (var mark in _marks)
                                    {
                                        if (mapData.PhonemeState(element.Name, mark.Text.ToUpper(), item))
                                        {
                                            var colorVal = mapData.ConfiguredColorAndIntensity(element.Name, mark.Text.ToUpper(), item);
                                            result       = CreateIntentsForPhoneme(element, colorVal.Item1, colorVal.Item2, mark.Duration);
                                            result.OffsetAllCommandsByTime(mark.StartTime - StartTime);
                                            _elementData.Add(result);
                                        }
                                    }
                                }
                                else
                                {
                                    if (mapData.PhonemeState(element.Name, phoneme.ToString(), item))
                                    {
                                        var colorVal = mapData.ConfiguredColorAndIntensity(element.Name, phoneme.ToString(), item);
                                        result       = CreateIntentsForPhoneme(element, colorVal.Item1, colorVal.Item2, TimeSpan);
                                        _elementData.Add(result);
                                    }
                                }
                            }
                        });

                        TearDownPictureEffect();
                    }
                }
            }
        }
Пример #9
0
 public Image ImageForPhoneme(PhonemeType phoneme)
 {
     return(ImageForPhoneme(phoneme.ToString()));
 }
Пример #10
0
 public Color ConfiguredColor(string itemName, PhonemeType phoneme, LipSyncMapItem item = null)
 {
     return(ConfiguredColor(itemName, phoneme.ToString(), item));
 }