diff options
Diffstat (limited to 'pico/tts/svox_ssml_parser.h')
-rwxr-xr-x | pico/tts/svox_ssml_parser.h | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/pico/tts/svox_ssml_parser.h b/pico/tts/svox_ssml_parser.h new file mode 100755 index 0000000..cc83305 --- /dev/null +++ b/pico/tts/svox_ssml_parser.h @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * History: + * 2009-06-29 -- initial version + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <libexpat/expat.h> + +#ifndef _SVOX_SSML_PARSER_H_ +#define _SVOX_SSML_PARSER_H_ + +/** + * SvoxSsmlParser + * Parses SSML 1.0 XML documents and convertes it to Pico compatible text input + */ +class SvoxSsmlParser +{ + public: /* construction code */ + + /** + Constructor + Creates Expat parser and allocates initial text storage + */ + SvoxSsmlParser(); + + /** + Destructor + Deallocates all resources + */ + ~SvoxSsmlParser(); + + /** + initSuccessful + Verifies that construction was successful + return 1 if successful, 0 otherwise + */ + int initSuccessful(); + + public: /* public members */ + + /** + parseDocument + Parses SSML 1.0 document passed in as argument + @ssmldoc - SSML document, partial document input is supported + @isFinal - indicates whether input is a complete or partial document, 1 indicates complete document, 0 indicates partial + return Expat status code + */ + int parseDocument(const char* ssmldoc, int isFinal); + + /** + getParsedDocument + Returns string containing parse result. This can be passed on to Pico for synthesis + return parsed string, NULL if error occurred + */ + char* getParsedDocument(); + + /** + getParsedDocumentLanguage + Returns language string specified in xml:lang attribute of the <speak> tag + return language code of SSML document, NULL if not set + */ + char* getParsedDocumentLanguage(); + + private: /* static callback functions */ + + /** + starttagHandler + Static callback function for Expat start-tag events, internal use only + */ + static void starttagHandler(void* data, const XML_Char* element, const XML_Char** attributes); + + /** + endtagHandler + Static callback function for Expat end-tag events, internal use only + */ + static void endtagHandler(void* data, const XML_Char* element); + + /** + textHandler + Static callback function for Expat text events, internal use only + */ + static void textHandler(void* data, const XML_Char* text, int length); + + private: /* element handlers */ + + /** + startElement + Handles start of element, called by starttagHandler. + */ + void startElement(const XML_Char* element, const XML_Char** attributes); + + /** + endElement + Handles end of element, called by endtagHandler. + */ + void endElement(const XML_Char* element); + + /** + textElement + Handles text element, called by textHandler. + */ + void textElement(const XML_Char* text, int length); + + /* helper functions */ + + /** + convertToSvoxPitch + Convertes SSML prosody tag pitch values to SVOX Pico pitch values. + */ + char* convertToSvoxPitch(const char* value); + + /** + convertToSvoxRate + Convertes SSML prosody tag rate values to SVOX Pico speed values. + */ + char* convertToSvoxRate(const char* value); + + /** + convertToSvoxVolume + Convertes SSML prosody tag volume values to SVOX Pico volume values. + */ + char* convertToSvoxVolume(const char* value); + + /** + convertBreakStrengthToTime + Convertes SSML break tag strength attribute values to SVOX Pico break time values. + */ + char* convertBreakStrengthToTime(const char* value); + + /** + growDataSize + Increases size of internal text field. + */ + int growDataSize(int sizeToGrow); + + private: /* data members*/ + + char* m_data; /* internal text field, holds parsed text */ + int m_datasize; /* size of internal text field */ + XML_Parser mParser; /* Expat XML parser pointer */ + int m_isInBreak; /* indicator for handling break tag parsing */ + char* m_appendix; /* holds Pico pitch, speed and volume close tags for prosody tag parsing */ + char* m_docLanguage; /* language set in speak tag of SSML document */ +}; + +#endif // _SVOX_SSML_PARSER_H_ |