/// <summary> /// Initializes a new instance of the <see cref="XmlScriptValidateSetting"/> class. /// </summary> /// <param name="phoneSet">Phone set.</param> /// <param name="posSet">POS set.</param> public XmlScriptValidateSetting(TtsPhoneSet phoneSet, TtsPosSet posSet) { _scope = XmlScriptValidationScope.None; if (phoneSet != null) { _scope |= XmlScriptValidationScope.Pronunciation; } if (posSet != null) { _scope |= XmlScriptValidationScope.POS; } _phoneSet = phoneSet; _posSet = posSet; }
/// <summary> /// Check whether the element is valid or not. /// </summary> /// <param name="itemID">ID of the script item.</param> /// <param name="nodePath">Path of the node.</param> /// <param name="scope">The validation setting.</param> /// <param name="errors">Contains errors found at present.</param> /// <returns>Valid or not. Always true if no validation is performed.</returns> public bool IsValid(string itemID, string nodePath, XmlScriptValidationScope scope, ErrorSet errors) { bool valid = true; if (HasAcousticsValue) { string path = string.Format(CultureInfo.InvariantCulture, "{0}.Acoustics", nodePath); if (!Acoustics.IsValid(itemID, path, scope, errors)) { valid = false; } } return valid; }
/// <summary> /// Initializes a new instance of the <see cref="XmlScriptValidateSetting"/> class. /// </summary> public XmlScriptValidateSetting() { _scope = XmlScriptValidationScope.None; }
/// <summary> /// Check whether the element is valid or not. /// </summary> /// <param name="itemID">ID of the script item.</param> /// <param name="nodePath">Path of the node.</param> /// <param name="scope">The validation setting.</param> /// <param name="errors">Contains errors found at present.</param> /// <returns>Valid or not. Always true if no validation is performed.</returns> public bool IsValid(string itemID, string nodePath, XmlScriptValidationScope scope, ErrorSet errors) { bool valid = true; for (int i = 0; i < _syllables.Count; i++) { ScriptSyllable syllable = _syllables[i]; string path = string.Format(CultureInfo.InvariantCulture, "{0}.Syllable[{1}]", nodePath, i); if (!syllable.IsValid(itemID, path, scope, errors)) { valid = false; } } if (HasAcousticsValue) { string path = string.Format(CultureInfo.InvariantCulture, "{0}.Acoustics", nodePath); if (!Acoustics.IsValid(itemID, path, scope, errors)) { valid = false; } } return valid; }
/// <summary> /// Check whether the element is valid or not. /// </summary> /// <param name="itemID">ID of the script item.</param> /// <param name="nodePath">Path of the node.</param> /// <param name="scope">The validation scope.</param> /// <param name="errors">Contains errors found at present.</param> /// <returns>Valid or not. Always true if no validation is performed.</returns> public bool IsValid(string itemID, string nodePath, XmlScriptValidationScope scope, ErrorSet errors) { bool valid = true; if ((scope & XmlScriptValidationScope.F0) == XmlScriptValidationScope.F0) { foreach (float f0 in _contour) { if (f0 < 0) { errors.Add(ScriptError.F0Error, itemID, nodePath, f0.ToString(CultureInfo.InvariantCulture)); valid = false; break; } } } return valid; }
/// <summary> /// Check whether the element is valid or not. /// </summary> /// <param name="itemID">ID of the script item.</param> /// <param name="nodePath">Path of the node.</param> /// <param name="scope">The validation scope.</param> /// <param name="errors">Contains errors found at present.</param> /// <returns>Valid or not. Always true if no validation is performed.</returns> public bool IsValid(string itemID, string nodePath, XmlScriptValidationScope scope, ErrorSet errors) { bool valid = true; if ((scope & XmlScriptValidationScope.SegmentInterval) == XmlScriptValidationScope.SegmentInterval) { if (!InnerIsValid()) { errors.Add(ScriptError.SegmentIntervalError, itemID, nodePath, Begin.ToString(CultureInfo.InvariantCulture), End.ToString(CultureInfo.InvariantCulture)); valid = false; } } return valid; }
/// <summary> /// Check whether the element is valid or not. /// </summary> /// <param name="itemID">ID of the script item.</param> /// <param name="nodePath">Path of the node.</param> /// <param name="scope">The validation scope.</param> /// <param name="errors">Contains errors found at present.</param> /// <returns>Valid or not. Always true if no validation is performed.</returns> public bool IsValid(string itemID, string nodePath, XmlScriptValidationScope scope, ErrorSet errors) { bool valid = true; foreach (ScriptUvSeg uvSeg in _scriptUvSegs) { if (!uvSeg.IsValid(itemID, nodePath, scope, errors)) { valid = false; } } if (HasSegmentInterval) { valid = _segmentIntervals.All(seg => seg.IsValid(itemID, nodePath, scope, errors)); } int preBegin = 0; int preEnd = 0; foreach (ScriptUvSeg uvSeg in _scriptUvSegs) { if (uvSeg.HasIntervalValue) { if ((scope & XmlScriptValidationScope.UvSegSequence) == XmlScriptValidationScope.UvSegSequence) { if (uvSeg.Interval.End <= preBegin) { errors.Add(ScriptError.UvSegOrderError, itemID, nodePath); valid = false; break; } else if (uvSeg.Interval.Begin < preEnd) { errors.Add(ScriptError.UvSegOverlappingError, itemID, nodePath); valid = false; break; } else { preBegin = uvSeg.Interval.Begin; preEnd = uvSeg.Interval.End; } } if (((scope & XmlScriptValidationScope.DurationAndInterval) == XmlScriptValidationScope.DurationAndInterval) && HasDurationValue) { if (uvSeg.Interval.End > _duration) { errors.Add(ScriptError.DurationAndIntervalError, itemID, nodePath); valid = false; break; } } if (((scope & XmlScriptValidationScope.SegmentDurationAndInterval) == XmlScriptValidationScope.SegmentDurationAndInterval) && HasSegmentInterval) { if (uvSeg.Interval.End > SegmentIntervals.Sum(seg => seg.IntervalDuration)) { errors.Add(ScriptError.SegmentDurationAndIntervalError, itemID, nodePath); valid = false; break; } } } } if (((scope & XmlScriptValidationScope.DurationAndSegment) == XmlScriptValidationScope.DurationAndSegment) && HasDurationValue && HasSegmentInterval && _duration != SegmentIntervals.Sum(seg => seg.IntervalDuration)) { errors.Add(ScriptError.DurationAndSegmentError, itemID, nodePath, _duration.ToString(CultureInfo.InvariantCulture), SegmentIntervals.First().Begin.ToString(CultureInfo.InvariantCulture), SegmentIntervals.Last().End.ToString(CultureInfo.InvariantCulture)); valid = false; } return valid; }
/// <summary> /// Check whether the element is valid or not. /// </summary> /// <param name="itemID">ID of the script item.</param> /// <param name="nodePath">Path of the node.</param> /// <param name="scope">The validation scope.</param> /// <param name="errors">Contains errors found at present.</param> /// <returns>Valid or not. Always true if no validation is performed.</returns> public bool IsValid(string itemID, string nodePath, XmlScriptValidationScope scope, ErrorSet errors) { bool valid = true; if (HasIntervalValue) { if (!_interval.IsValid(itemID, nodePath, scope, errors)) { valid = false; } } if (HasF0ContourValue) { if (!_f0Contour.IsValid(itemID, nodePath, scope, errors)) { valid = false; } } if ((scope & XmlScriptValidationScope.F0AndUvType) == XmlScriptValidationScope.F0AndUvType) { switch (_segType) { case ScriptUvSegType.Unknown: string message = string.Format(CultureInfo.InvariantCulture, "Invalid unvoiced-voiced segment type ScriptUvSegType.Unknown."); throw new InvalidDataException(message); case ScriptUvSegType.Voiced: if (HasF0ContourValue) { foreach (float f0 in _f0Contour.Contour) { if (f0 >= 0 && f0 <= MinF0Value) { errors.Add(ScriptError.F0AndUvTypeError, itemID, nodePath); valid = false; break; } } } break; case ScriptUvSegType.Unvoiced: if (HasF0ContourValue) { foreach (float f0 in _f0Contour.Contour) { if (f0 > MinF0Value) { errors.Add(ScriptError.F0AndUvTypeError, itemID, nodePath); valid = false; break; } } } break; case ScriptUvSegType.Silence: if (HasF0ContourValue) { foreach (float f0 in _f0Contour.Contour) { if (f0 > MinF0Value) { errors.Add(ScriptError.F0AndUvTypeError, itemID, nodePath); valid = false; break; } } } break; case ScriptUvSegType.Mixed: break; } } return valid; }