#markup-language #speech-synthesis #parser #version #rate #audio #ssml

ssml-parser

A crate for parsing speech sythnesis markup language

1 unstable release

0.1.4 Mar 28, 2024

#1135 in Text processing

Download history 139/week @ 2024-03-25 25/week @ 2024-04-01 14/week @ 2024-04-08 19/week @ 2024-04-15

197 downloads per month

MIT/Apache

165KB
3K SLoC

SSML Parser

This crate handles parsing SSML (Speech Synthesis Markup Language). It's main aim is to facilitate the development of TTS (Text-To-Speech) and applications that utilise sythesised audio. Functionality for writing XML is limited and could do with improvements for ergonomics.

Currently it contains a full implementation of the SSML 1.1 specification including custom tags. Text within custom tags is assumed to be synthesisable though it is possible to change this behaviour when extracting the text.

Below is a simple example:

use ssml_parser::parse_ssml;

let ssml = r#"<?xml version="1.0"?>
   <speak version="1.1"
          xmlns="http://www.w3.org/2001/10/synthesis"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.w3.org/2001/10/synthesis
                      http://www.w3.org/TR/speech-synthesis11/synthesis.xsd"
          xml:lang="en-US">
     <p>
       <s>You have 4 new messages.</s>
       <s>The first is from Stephanie Williams and arrived at <break/> 3:45pm.
       </s>
       <s>
         The subject is <prosody rate="20%">ski trip</prosody>
       </s>
     </p>
   </speak>"#;

let result = parse_ssml(ssml).unwrap();

// We can now see the text with tags removed:
println!("{}", result.get_text());

// And can loop over all the SSML tags and get their character indexes:
for tag in result.tags() {
   println!("{:?}", tag);
}

Dependencies

~8.5MB
~148K SLoC