private SpeechLipSyncLine CompilePamelaFile(string fileName, CompileMessages errors)
{
SpeechLipSyncLine syncDataForThisFile = new SpeechLipSyncLine();
syncDataForThisFile.FileName = Path.GetFileNameWithoutExtension(fileName);
string thisLine;
bool inMainSection = false;
int lineNumber = 0;
StreamReader sr = new StreamReader(fileName);
while ((thisLine = sr.ReadLine()) != null)
{
lineNumber++;
if (thisLine.ToLower().StartsWith("[speech]"))
{
inMainSection = true;
continue;
}
if (inMainSection)
{
if (thisLine.TrimStart().StartsWith("["))
{
// moved onto another section
break;
}
if (thisLine.IndexOf(':') > 0)
{
string[] parts = thisLine.Split(':');
int part0;
// Convert from Pamela XPOS into milliseconds
if (!Int32.TryParse(parts[0], out part0))
{
string friendlyFileName = Path.GetFileName(fileName);
errors.Add(new CompileError("Non-numeric phoneme offset '" + parts[0] + "'", friendlyFileName, lineNumber));
continue;
}
int milliSeconds = ((part0 / 15) * 1000) / 24;
string phonemeCode = parts[1].Trim().ToUpper();
int frameID = FindFrameNumberForPhoneme(phonemeCode);
if (frameID < 0)
{
string friendlyFileName = Path.GetFileName(fileName);
errors.Add(new CompileError("No frame found to match phoneme code '" + phonemeCode + "'", friendlyFileName, lineNumber));
}
else
{
syncDataForThisFile.Phonemes.Add(new SpeechLipSyncPhoneme(milliSeconds, (short)frameID));
}
}
}
}
sr.Close();
AlignPhonemeOffsets(syncDataForThisFile);
return syncDataForThisFile;
}