Ejemplo n.º 1
0
        public static LipsyncSequenceDatabase BuildDatabase(DirectoryInfo directory)
        {
            LipsyncSequenceDatabase database = ScriptableObject.CreateInstance <LipsyncSequenceDatabase>();

            DirectoryWalkCallback callback = filePath =>
            {
                string[] lines = File.ReadAllLines(filePath.FullName);
                string   name  = filePath.Name.Replace(LipsyncAutomation.fileEnding, "");

                LipsyncSequence sequence = LipsyncSequenceFactory.BuildSequence(lines, name);

                database.sequences.Add(sequence);
            };

            LipsyncFileUtility.WalkDirectoryRecursively(directory, ".dat", callback);
            return(database);
        }
Ejemplo n.º 2
0
        private static LipsyncSequence Parse(string[] lines, string name, string mood)
        {
            LipsyncSequence sequence = new LipsyncSequence();
            sequence.mood = mood;
            sequence.name = name;

            foreach(string line in lines)
            {
                string[] tokens = line.Split(' ');

                int frameNumber;
                if(int.TryParse( tokens[0] , out frameNumber))
                {
                    sequence.frames.Add( new LipsyncFrame(frameNumber, tokens[1]) );
                }
            }

            return sequence;
        }
Ejemplo n.º 3
0
        private static LipsyncSequence Parse(string[] lines, string name, string mood)
        {
            LipsyncSequence sequence = new LipsyncSequence();

            sequence.mood = mood;
            sequence.name = name;

            foreach (string line in lines)
            {
                string[] tokens = line.Split(' ');

                int frameNumber;
                if (int.TryParse(tokens[0], out frameNumber))
                {
                    sequence.frames.Add(new LipsyncFrame(frameNumber, tokens[1]));
                }
            }

            return(sequence);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Do the actual animation.
        /// </summary>
        /// <param name="sequence">Sequence.</param>
        /// <param name="duration">Duration.</param>
        /// <param name="mood">Mood.</param>
        protected IEnumerator Animate(LipsyncSequence sequence, float duration, string mood)
        {
            isPlaying = true;

            float frameTime      = 1;
            int   phonomereCount = 0;

            lastMood = mood;

            while (true)
            {
                frameTime += framerate * Time.deltaTime;

                if (sequence.frames[phonomereCount].frameTime <= frameTime)
                {
                    lastPhonetic = sequence.frames[phonomereCount].phonetic;

                    OnPhonetic(lastMood, lastPhonetic);
                    phonomereCount++;
                }

                if (phonomereCount >= sequence.frames.Count)
                {
                    break;
                }

                yield return(0);
            }

            yield return(new WaitForSeconds((duration * framerate - frameTime) / framerate));

            OnPhonetic(mood, restPhonetic);

            lastMood     = "";
            lastPhonetic = "";

            isPlaying = false;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Do the actual animation.
        /// </summary>
        /// <param name="sequence">Sequence.</param>
        /// <param name="duration">Duration.</param>
        /// <param name="mood">Mood.</param>
        protected IEnumerator Animate(LipsyncSequence sequence, float duration, string mood)
        {
            isPlaying = true;

            float frameTime = 1;
            int phonomereCount = 0;

            lastMood = mood;

            while(true)
            {
                frameTime += framerate * Time.deltaTime;

                if(sequence.frames[phonomereCount].frameTime <= frameTime)
                {
                    lastPhonetic = sequence.frames[phonomereCount].phonetic;

                    OnPhonetic(lastMood, lastPhonetic);
                    phonomereCount++;
                }

                if(phonomereCount >= sequence.frames.Count)
                    break;

                yield return 0;
            }

            yield return new WaitForSeconds( ( duration * framerate - frameTime ) / framerate);

            OnPhonetic(mood, restPhonetic);

            lastMood = "";
            lastPhonetic = "";

            isPlaying = false;
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Play the specified lipsyncSequence, duration for the animation is passed in here as well along with the mood
 /// </summary>
 /// <param name="lipsyncSequence">Lipsync sequence.</param>
 /// <param name="duration">Duration.</param>
 /// <param name="mood">Mood.</param>
 public void Play(LipsyncSequence lipsyncSequence, float duration, string mood)
 {
     Stop();
     StartCoroutine( Animate(lipsyncSequence, duration, mood) );
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Play the specified lipsyncSequence, duration for the animation is passed in here as well along with the mood
 /// </summary>
 /// <param name="lipsyncSequence">Lipsync sequence.</param>
 /// <param name="duration">Duration.</param>
 /// <param name="mood">Mood.</param>
 public void Play(LipsyncSequence lipsyncSequence, float duration, string mood)
 {
     Stop();
     StartCoroutine(Animate(lipsyncSequence, duration, mood));
 }