<p align="center">
  <a href="https://www.jyroneparker.com">
    <img src="https://github.com/mastashake08/speech-kit/blob/main/cover.png">
  </a>
</p>

# Speech Kit
[![GPL license](https://img.shields.io/badge/License-GPL-blue.svg)](https://choosealicense.com/licenses/gpl-3.0/#)
[![Version](https://img.shields.io/npm/v/@mastashake08/speech-kit)](https://www.npmjs.com/package/@mastashake08/speech-kit)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/mastashake08/speech-kit/graphs/commit-activity)
[![Website jyroneparker.com](https://img.shields.io/website-up-down-green-red/http/shields.io.svg)](https://jyroneparker.com/)
[![Patreon](https://badgen.net/badge/icon/patreon?icon=patreon&label)](https://https://patron.com/mastashake08)
[![Twitter](https://badgen.net/badge/icon/twitter?icon=twitter&label)](https://twitter.com/jyroneparker)
[![CodeLife Discord online members](https://badgen.net/discord/online-members/j3ATUEW)](https://discord.gg/j3ATUEW)

Simplifying the Speech Synthesis and Speech Recognition engines for Javascript. Listen for commands and perform callback actions, make the browser speak and transcribe your speech!

# Features
- Speak Commands
- Listen for voice commands
- Add your own grammar
- Transcribe words and output as file.
- Generate SSML from text for fine tune editing. 
## Functions

<dl>
<dt><a href="#listen">listen()</a></dt>
<dd><p>Start listening for speech recognition.</p>
</dd>
<dt><a href="#stopListen">stopListen()</a></dt>
<dd><p>Stop listening for speech recognition.</p>
</dd>
<dt><a href="#speak">speak(text, [voice])</a></dt>
<dd><p>Use Speech Synthesis to speak text.</p>
</dd>
<dt><a href="#getResultList">getResultList()</a> ⇒ <code>SpeechRecognitionResultList</code></dt>
<dd><p>Get current SpeechRecognition resultsList.</p>
</dd>
<dt><a href="#getText">getText()</a> ⇒ <code>string</code></dt>
<dd><p>Return text</p>
</dd>
<dt><a href="#getTextAsFile">getTextAsFile()</a> ⇒ <code>Blob</code></dt>
<dd><p>Return text file with results.</p>
</dd>
<dt><a href="#getTextAsJson">getTextAsJson()</a> ⇒ <code>object</code></dt>
<dd><p>Return text as JSON.</p>
</dd>
<dt><a href="#addGrammarFromUri">addGrammarFromUri()</a></dt>
<dd><p>Add grammar to the SpeechGrammarList from a URI.</p>
</dd>
<dt><a href="#addGrammarFromString">addGrammarFromString()</a></dt>
<dd><p>Add grammar to the SpeechGrammarList from a Grammar String.</p>
</dd>
<dt><a href="#getGrammarList">getGrammarList()</a> ⇒ <code>SpeechGrammarList</code></dt>
<dd><p>Return current SpeechGrammarList.</p>
</dd>
<dt><a href="#getRecognition">getRecognition()</a> ⇒ <code>SpeechRecognition</code></dt>
<dd><p>Return the urrent SpeechRecognition object.</p>
</dd>
<dt><a href="#getSynth">getSynth()</a> ⇒ <code>SpeechSynthesis</code></dt>
<dd><p>Return the current Speech Synthesis object.</p>
</dd>
<dt><a href="#getVoices">getVoices()</a> ⇒ <code>Array.&lt;SpeechSynthesisVoice&gt;</code></dt>
<dd><p>Return the current voices available to the user.</p>
</dd>
<dt><a href="#setSpeechText">setSpeechText()</a></dt>
<dd><p>Set the SpeechSynthesisUtterance object with the text that is meant to be spoken.</p>
</dd>
<dt><a href="#setSpeechVoice">setSpeechVoice()</a></dt>
<dd><p>Set the SpeechSynthesisVoice object with the desired voice.</p>
</dd>
<dt><a href="#getCurrentVoice">getCurrentVoice()</a> ⇒ <code>SpeechSynthesisVoice</code></dt>
<dd><p>Return the current voice being used in the utterance.</p>
</dd>
<dt><a href="#share">share()</a> ⇒ <code>null</code></dt>
<dd><p>Share the text using the Web Share API or copy to Clipboard if not available</p>
</dd>
<dt><a href="#createSSML">createSSML()</a> ⇒ <code>string</code></dt>
<dd><p>Takes text and returns SSML encoded XML object</p>
</dd>
<dt><a href="#parseSentenceSSML">parseSentenceSSML()</a> ⇒ <code>string</code></dt>
<dd><p>Takes sentence and returns SSML paragraph object with sentences.</p>
</dd>
<dt><a href="#parseSSML">parseSSML()</a> ⇒ <code>object</code> | <code>string</code></dt>
<dd><p>Takes text and returns SSML object</p>
</dd>
</dl>

<a name="listen"></a>

## listen()
Start listening for speech recognition.

**Kind**: global function  
<a name="stopListen"></a>

## stopListen()
Stop listening for speech recognition.

**Kind**: global function  
<a name="speak"></a>

## speak(text, [voice])
Use Speech Synthesis to speak text.

**Kind**: global function  

| Param | Type | Default | Description |
| --- | --- | --- | --- |
| text | <code>string</code> |  | Text to be spoken |
| [voice] | <code>SpeechSynthesisVoice</code> | <code></code> | Optional parameter to change the voice that speaks |

<a name="getResultList"></a>

## getResultList() ⇒ <code>SpeechRecognitionResultList</code>
Get current SpeechRecognition resultsList.

**Kind**: global function  
**Returns**: <code>SpeechRecognitionResultList</code> - - List of Speech Recognition results  
<a name="getText"></a>

## getText() ⇒ <code>string</code>
Return text

**Kind**: global function  
**Returns**: <code>string</code> - resultList as text string  
<a name="getTextAsFile"></a>

## getTextAsFile() ⇒ <code>Blob</code>
Return text file with results.

**Kind**: global function  
**Returns**: <code>Blob</code> - transcript  
<a name="getTextAsJson"></a>

## getTextAsJson() ⇒ <code>object</code>
Return text as JSON.

**Kind**: global function  
**Returns**: <code>object</code> - transcript  
<a name="addGrammarFromUri"></a>

## addGrammarFromUri()
Add grammar to the SpeechGrammarList from a URI.

**Kind**: global function  
**Params**: <code>string</code> uri - URI that contains grammar  
<a name="addGrammarFromString"></a>

## addGrammarFromString()
Add grammar to the SpeechGrammarList from a Grammar String.

**Kind**: global function  
**Params**: <code>string</code> grammar - String containing grammar  
<a name="getGrammarList"></a>

## getGrammarList() ⇒ <code>SpeechGrammarList</code>
Return current SpeechGrammarList.

**Kind**: global function  
**Returns**: <code>SpeechGrammarList</code> - current SpeechGrammarList object  
<a name="getRecognition"></a>

## getRecognition() ⇒ <code>SpeechRecognition</code>
Return the urrent SpeechRecognition object.

**Kind**: global function  
**Returns**: <code>SpeechRecognition</code> - current SpeechRecognition object  
<a name="getSynth"></a>

## getSynth() ⇒ <code>SpeechSynthesis</code>
Return the current Speech Synthesis object.

**Kind**: global function  
**Returns**: <code>SpeechSynthesis</code> - current instance of Speech Synthesis object  
<a name="getVoices"></a>

## getVoices() ⇒ <code>Array.&lt;SpeechSynthesisVoice&gt;</code>
Return the current voices available to the user.

**Kind**: global function  
**Returns**: <code>Array.&lt;SpeechSynthesisVoice&gt;</code> - Array of available Speech Synthesis Voices  
<a name="setSpeechText"></a>

## setSpeechText()
Set the SpeechSynthesisUtterance object with the text that is meant to be spoken.

**Kind**: global function  
**Params**: <code>string</code> text - Text to be spoken  
<a name="setSpeechVoice"></a>

## setSpeechVoice()
Set the SpeechSynthesisVoice object with the desired voice.

**Kind**: global function  
**Params**: <code>SpeechSynthesisVoice</code> voice - Voice to be spoken  
<a name="getCurrentVoice"></a>

## getCurrentVoice() ⇒ <code>SpeechSynthesisVoice</code>
Return the current voice being used in the utterance.

**Kind**: global function  
**Returns**: <code>SpeechSynthesisVoice</code> - current voice  
<a name="share"></a>

## share() ⇒ <code>null</code>
Share the text using the Web Share API or copy to Clipboard if not available

**Kind**: global function  
<a name="createSSML"></a>

## createSSML() ⇒ <code>string</code>
Takes text and returns SSML encoded XML object

**Kind**: global function  
**Returns**: <code>string</code> - - XML DOM object in SSML format serialized to a string  
**Params**: <code>string</code> - Text to convert  
<a name="parseSentenceSSML"></a>

## parseSentenceSSML() ⇒ <code>string</code>
Takes sentence and returns SSML paragraph object with sentences.

**Kind**: global function  
**Returns**: <code>string</code> - xmlString - XML DOM object in SSML format  
**Params**: <code>string</code> xmlString - Text to convert  
<a name="parseSSML"></a>

## parseSSML() ⇒ <code>object</code> \| <code>string</code>
Takes text and returns SSML object

**Kind**: global function  
**Returns**: <code>object</code> \| <code>string</code> - xmlDoc - XML DOM object in SSML format or XML object serialized to string  
**Params**: <code>string</code> xmlString - Text to convert  
# Contributing
If you want to add functionality or fix a bug please provide a PR!

# Sponsorships
This project is free for public use and will always be in perpetuity. That being said a brotha got bills to pay and ish! If you would like to sponsor this and all of my open source projects, then please consider becoming a patron on [Patreon](https://patreon.com/mastashake08) or a one time donation via [Cash App](https://cash.me/$mastashake08)
