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); }
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; }
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); }
/// <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; }
/// <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; }
/// <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) ); }
/// <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)); }