<!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note:
    1) The <head> information in this page is significant, should be uniform
       across api docs and should be edited only with knowledge of the
       templating mechanism.
    3) All <body>.innerHTML is genereated as an rendering step. If viewed in a
       browser, it will be re-generated from the template, json schema and
       authored overview content.
    4) The <body>.innerHTML is also generated by an offline step so that this
       page may easily be indexed by search engines.
--><html xmlns="http://www.w3.org/1999/xhtml"><head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css">
    <link href="css/print.css" rel="stylesheet" type="text/css" media="print">
    <script type="text/javascript" src="../../../third_party/jstemplate/jstemplate_compiled.js">
    </script>
    <script type="text/javascript" src="js/api_page_generator.js"></script>
    <script type="text/javascript" src="js/bootstrap.js"></script>
    <script type="text/javascript" src="js/sidebar.js"></script>
  <title>chrome.experimental.tts - Google Chrome Extensions - Google Code</title></head>
  <body>  <div id="gc-container" class="labs">
      <div id="devModeWarning">
        You are viewing extension docs in chrome via the 'file:' scheme: are you expecting to see local changes when you refresh? You'll need run chrome with --allow-file-access-from-files.
      </div>
      <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION -->
      <!-- In particular, sub-templates that recurse, must be used by allowing
           jstemplate to make a copy of the template in this section which
           are not operated on by way of the jsskip="true" -->
      <div style="display:none">

        <!-- VALUE -->
        <div id="valueTemplate">
          <dt>
            <var>paramName</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum">enumerated</span>
                    <span id="typeTemplate">
                      <span>
                        <a> Type</a>
                      </span>
                      <span>
                        <span>
                          array of <span><span></span></span>
                        </span>
                        <span>paramType</span>
                        <span></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd>
            Description of this parameter from the json schema.
          </dd>
          <dd>
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd>
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd>
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd>
            <div></div>
          </dd>

        </div> <!-- /VALUE -->

        <div id="functionParametersTemplate">
          <h5>Parameters</h5>
          <dl>
            <div>
              <div>
              </div>
            </div>
          </dl>
        </div>
      </div> <!-- /SUBTEMPLATES -->

  <a id="top"></a>
    <div id="skipto">
      <a href="#gc-pagecontent">Skip to page content</a>
      <a href="#gc-toc">Skip to main navigation</a>
    </div>
    <!-- API HEADER -->
    <table id="header" width="100%" cellspacing="0" border="0">
      <tbody><tr>
        <td valign="middle"><a href="http://code.google.com/"><img src="images/code_labs_logo.gif" height="43" width="161" alt="Google Code Labs" style="border:0; margin:0;"></a></td>
        <td valign="middle" width="100%" style="padding-left:0.6em;">
          <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em">
            <div id="gsc-search-box">
              <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno">
              <input type="hidden" name="ie" value="UTF-8">
              <input type="text" name="q" value="" size="55">
              <input class="gsc-search-button" type="submit" name="sa" value="Search">
              <br>
              <span class="greytext">e.g. "page action" or "tabs"</span>
            </div>
          </form>

          <script type="text/javascript" src="http://www.google.com/jsapi"></script>
          <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
          <script type="text/javascript" src="http://www.google.com/coop/cse/t13n?form=cse&amp;t13n_langs=en"></script>
          <script type="text/javascript" src="http://www.google.com/coop/cse/brand?form=cse&amp;lang=en"></script>
        </td>
      </tr>
    </tbody></table>

    <div id="codesiteContent" class="">

      <a id="gc-topnav-anchor"></a>
      <div id="gc-topnav">
        <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1>
        <ul id="home" class="gc-topnav-tabs">
          <li id="home_link">
            <a href="index.html" title="Google Chrome Extensions home page">Home</a>
          </li>
          <li id="docs_link">
            <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a>
          </li>
          <li id="faq_link">
            <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a>
          </li>
          <li id="samples_link">
            <a href="samples.html" title="Sample extensions (with source code)">Samples</a>
          </li>
          <li id="group_link">
            <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a>
          </li>
        </ul>
      </div> <!-- end gc-topnav -->

    <div class="g-section g-tpl-170">
      <!-- SIDENAV -->
      <div class="g-unit g-first" id="gc-toc">
        <ul>
          <li><a href="getstarted.html">Getting Started</a></li>
          <li><a href="overview.html">Overview</a></li>
          <li><a href="whats_new.html">What's New?</a></li>
          <li><h2><a href="devguide.html">Developer's Guide</a></h2>
            <ul>
              <li>Browser UI
                <ul>
                  <li><a href="browserAction.html">Browser Actions</a></li>
                  <li><a href="contextMenus.html">Context Menus</a></li>
                  <li><a href="notifications.html">Desktop Notifications</a></li>
                  <li><a href="omnibox.html">Omnibox</a></li>
                  <li><a href="options.html">Options Pages</a></li>
                  <li><a href="override.html">Override Pages</a></li>
                  <li><a href="pageAction.html">Page Actions</a></li>
                </ul>
              </li>
              <li>Browser Interaction
                <ul>
                  <li><a href="bookmarks.html">Bookmarks</a></li>
                  <li><a href="cookies.html">Cookies</a></li>
                  <li><a href="events.html">Events</a></li>
                  <li><a href="history.html">History</a></li>
                  <li><a href="management.html">Management</a></li>
                  <li><a href="tabs.html">Tabs</a></li>
                  <li><a href="windows.html">Windows</a></li>
                </ul>
              </li>
              <li>Implementation
                <ul>
                  <li><a href="a11y.html">Accessibility</a></li>
                  <li><a href="background_pages.html">Background Pages</a></li>
                  <li><a href="content_scripts.html">Content Scripts</a></li>
                  <li><a href="xhr.html">Cross-Origin XHR</a></li>
                  <li><a href="idle.html">Idle</a></li>
                  <li><a href="i18n.html">Internationalization</a></li>
                  <li><a href="messaging.html">Message Passing</a></li>
                  <li><a href="npapi.html">NPAPI Plugins</a></li>
                </ul>
              </li>
              <li>Finishing
                <ul>
                  <li><a href="hosting.html">Hosting</a></li>
                  <li><a href="external_extensions.html">Other Deployment Options</a></li>
                </ul>
              </li>
            </ul>
          </li>
          <li><h2><a href="apps.html">Packaged Apps</a></h2></li>
          <li><h2><a href="tutorials.html">Tutorials</a></h2>
            <ul>
              <li><a href="tut_debugging.html">Debugging</a></li>
              <li><a href="tut_analytics.html">Google Analytics</a></li>
              <li><a href="tut_oauth.html">OAuth</a></li>
            </ul>
          </li>
          <li><h2>Reference</h2>
            <ul>
              <li>Formats
                <ul>
                  <li><a href="manifest.html">Manifest Files</a></li>
                  <li><a href="match_patterns.html">Match Patterns</a></li>
                </ul>
              </li>
              <li><a href="permission_warnings.html">Permission Warnings</a></li>
              <li><a href="api_index.html">chrome.* APIs</a></li>
              <li><a href="api_other.html">Other APIs</a></li>
            </ul>
          </li>
          <li><h2><a href="samples.html">Samples</a></h2></li>
          <div class="line"> </div>
          <li><h2>More</h2>
            <ul>
              <li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li>
              <li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li>
              <li><a href="themes.html">Themes</a></li>
            </ul>
          </li>
        </ul>
      </div>
      <script>
        initToggles();
      </script>

    <div class="g-unit" id="gc-pagecontent">
      <div id="pageTitle">
        <h1 class="page_title">chrome.experimental.tts</h1>
      </div>
        <!-- TABLE OF CONTENTS -->
        <div id="toc">
          <h2>Contents</h2>
          <ol>
            <li>
              <a href="#overview">Overview</a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li><li>
              <a href="#generating_speech">Generating speech</a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li><li>
              <a href="#ssml">SSML markup</a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li><li>
              <a href="#provider">Implementing a speech provider</a>
              <ol>
                <li style="display: none; ">
                  <a>h3Name</a>
                </li>
              </ol>
            </li>
              <li>
                <a href="#apiReference">API reference: chrome.experimental.tts</a>
                <ol>
                  <li style="display: none; ">
                    <a href="#properties">Properties</a>
                    <ol>
                      <li>
                        <a href="#property-anchor">propertyName</a>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <a href="#global-methods">Methods</a>
                    <ol>
                      <li>
                        <a href="#method-isSpeaking">isSpeaking</a>
                      </li><li>
                        <a href="#method-speak">speak</a>
                      </li><li style="display: none; ">
                        <a href="#method-anchor">methodName</a>
                      </li><li>
                        <a href="#method-stop">stop</a>
                      </li>
                    </ol>
                  </li>
                  <li>
                    <a href="#global-events">Events</a>
                    <ol>
                      <li>
                        <a href="#event-onSpeak">onSpeak</a>
                      </li><li>
                        <a href="#event-onStop">onStop</a>
                      </li>
                    </ol>
                  </li>
                  <li style="display: none; ">
                    <a href="#types">Types</a>
                    <ol>
                      <li>
                        <a href="#id-anchor">id</a>
                      </li>
                    </ol>
                  </li>
                </ol>
              </li>
          </ol>
        </div>
        <!-- /TABLE OF CONTENTS -->

        <!-- Standard content lead-in for experimental API pages -->
        <p id="classSummary">
          For information on how to use experimental APIs, see the <a href="experimental.html">chrome.experimental.* APIs</a> page.
        </p>

        <!-- STATIC CONTENT PLACEHOLDER -->
        <div id="static"><p id="classSummary">
Use the <code>chrome.experimental.tts</code> module to play synthesized
text-to-speech (TTS) from your extension or packaged app, or to register
as a speech provider for other extensions and packaged apps that want to speak.
</p>

<p class="note"><b>Give us feedback:</b> If you have suggestions,
especially changes that should be made before stabilizing the first
version of this API, please send your ideas to the
<a href="http://groups.google.com/a/chromium.org/group/chromium-extensions">chromium-extensions</a>
group.</p>

<h2 id="overview">Overview</h2>

<p>To enable this experimental API, visit
<b>chrome://flags</b> and enable <b>Experimental Extension APIs</b>.

</p><p>Chrome provides native support for speech on Windows (using SAPI
5), Mac OS X, and Chrome OS, using speech synthesis capabilities
provided by the operating system. On all platforms, the user can
install extensions that register themselves as alternative speech
synthesis providers.</p>

<h2 id="generating_speech">Generating speech</h2>

<p>Call <code>speak()</code> from your extension or
packaged app to speak. For example:</p>

<pre>chrome.experimental.tts.speak('Hello, world.');</pre>

<p>You can provide options that control various properties of the speech,
such as its rate, pitch, and more. For example:</p>

<pre>chrome.experimental.tts.speak('Hello, world.', {'rate': 0.8});</pre>

<p>It's also a good idea to specify the locale so that a synthesizer
supporting that language (and regional dialect, if applicable) is chosen.</p>

<pre>chrome.experimental.tts.speak(
    'Hello, world.',
    {
      'locale': 'en-US',
      'rate': 0.8
    });</pre>

<p>Not all speech engines will support all options.</p>

<p>You can also pass a callback function that will be called when the
speech has finished. For example, suppose we have an image on our page
displaying a picture of a face with a closed mouth. We could open the mouth
while speaking, and close it when done.</p>

<pre>faceImage.src = 'open_mouth.png';
chrome.experimental.tts.speak(
    'Hello, world.', null, function() {
      faceImage.src = 'closed_mouth.png';
    });
</pre>

<p>To stop speaking immediately, just call <code>stop()</code>. Call
<code>isSpeaking()</code> to find out if a TTS engine is currently speaking.</p>

<p>You can check to see if an error occurred by checking
<code>chrome.extension.lastError</code> inside the callback function.</p>

<h2 id="ssml">SSML markup</h2>

<p>Utterances used in this API may include markup using the
<a href="http://www.w3.org/TR/speech-synthesis">Speech Synthesis Markup
Language (SSML)</a>. For example:

</p><pre>chrome.experimental.tts.speak('The &lt;emphasis&gt;second&lt;/emphasis&gt; word of this sentence was emphasized.');</pre>

<p>Not all speech engines will support all SSML tags, and some may not support
SSML at all, but all engines are expected to ignore any SSML they don't
support and still speak the underlying text.</p>

<h2 id="provider">Implementing a speech provider</h2>

<p>An extension can register itself as a speech provider. By doing so, it
can intercept some or all calls to functions such as
<code>speak()</code> and <code>stop()</code> and provide an alternate
implementation. Extensions are free to use any available web technology
to provide speech, including streaming audio from a server, HTML5 audio,
Native Client, or Flash. An extension could even do something different
with the utterances, like display closed captions in a pop-up window or
send them as log messages to a remote server.</p>

<p>To provide TTS, an extension must first declare all voices it provides
in the extension manifest, like this:</p>

<pre>{
  "name": "My TTS Provider",
  "version": "1.0",
  <b>"permissions": ["experimental"]
  "tts": {
    "voices": [
      {
        "voiceName": "Alice",
        "locale": "en-US",
        "gender": "female"
      },
      {
        "voiceName": "Pat",
        "locale": "en-US"
      }
    ]
  },</b>
  "background_page": "background.html",
}</pre>

<p>An extension can specify any number of voices. The three
parameters—<code>voiceName</code>, <code>locale</code>,
and <code>gender</code>—are all optional. If they are all unspecified,
the extension will handle all speech from all clients. If any of them
are specified, they can be used to filter speech requests. For
example, if a voice only supports French, it should set the locale to
'fr' (or something more specific like 'fr-FR') so that only utterances
in that locale are routed to that extension.</p>

<p>To handle speech calls, the extension should register listeners
for <code>onSpeak</code> and <code>onStop</code>, like this:</p>

<pre>var speakListener = function(utterance, options, callback) {
  ...
  callback();
};
var stopListener = function() {
  ...
};
chrome.experimental.tts.onSpeak.addListener(speakListener);
chrome.experimental.tts.onStop.addListener(stopListener);</pre>

<p class="warning"><b>Important:</b> Don't forget to call the callback
function from your speak listener!</p>

<p>If an extension does not register listeners for both
<code>onSpeak</code> and <code>onStop</code>, it will not intercept any
speech calls, regardless of what is in the manifest.

</p><p>The decision of whether or not to send a given speech request to an
extension is based solely on whether the extension supports the given voice
parameters in its manifest and has registered listeners
for <code>onSpeak</code> and <code>onStop</code>. In other words,
there's no way for an extension to receive a speech request and
dynamically decide whether to handle it or not.</p>
</div>

        <!-- API PAGE -->
        <div class="apiPage">
        <a name="apiReference"></a>
        <h2>API reference: chrome.experimental.tts</h2>

          <!-- PROPERTIES -->
          <div class="apiGroup" style="display: none; ">
            <a name="properties"></a>
            <h3 id="properties">Properties</h3>

            <div>
              <a></a>
              <h4>getLastError</h4>
              <div class="summary">
                <!-- Note: intentionally longer 80 columns -->
                <span>chrome.extension</span><span>lastError</span>
              </div>
              <div>
              </div>
            </div>

          </div> <!-- /apiGroup -->

          <!-- METHODS -->
          <div id="methodsTemplate" class="apiGroup">
            <a name="global-methods"></a>
            <h3>Methods</h3>

            <!-- iterates over all functions -->
            <div class="apiItem">
              <a name="method-isSpeaking"></a> <!-- method-anchor -->
              <h4>isSpeaking</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.experimental.tts.isSpeaking</span>(<span class="optional"><span style="display: none; ">, </span><span>function</span>
                      <var><span>callback</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Check if the engine is currently speaking.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>callback</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>function</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo">
            Undocumented.
          </dd>
          <dd style="display: none; ">
            Description of this parameter from the json schema.
          </dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div>
                  <div>
                  <h4>Callback function</h4>
                  <p style="display: none; ">
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>boolean speaking</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
          <dt>
            <var>speaking</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>boolean</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>True if speaking, false otherwise.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem">
              <a name="method-speak"></a> <!-- method-anchor -->
              <h4>speak</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.experimental.tts.speak</span>(<span class="null"><span style="display: none; ">, </span><span>string</span>
                      <var><span>utterance</span></var></span><span class="optional"><span>, </span><span>object</span>
                      <var><span>options</span></var></span><span class="optional"><span>, </span><span>function</span>
                      <var><span>callback</span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Speak text using a text-to-speech engine.</p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
          <dt>
            <var>utterance</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The text to speak. May include SSML markup.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div><div>
                    <div>
          <dt>
            <var>options</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The speech options.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>enqueue</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>boolean</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>If true, enqueues this utterance if TTS is already in progress. If false (the default), interrupts any current speech and flushes the speech queue before speaking this new utterance.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>voiceName</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The name of the voice to use for synthesis. If empty, uses any available voice.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>locale</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The language and optional region code that specify the language and dialect to be used for synthesis, in the form &lt;language&gt;-&lt;region&gt;. Examples: 'en', 'en-US', 'en-GB', 'zh-CN', etc.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>gender</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span>["male", "female"]</span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Gender of voice for synthesized speech.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>rate</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>number</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Speaking speed between 0 and 1 inclusive, with 0 being slowest and 1 being fastest, with a default of 0.5.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>pitch</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>number</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Speaking pitch between 0 and 1 inclusive, with 0 being lowest and 1 being highest, with a default of 0.5.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>volume</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>number</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Speaking volume between 0 and 1 inclusive, with 0 being lowest and 1 being highest, with a default of 1.0.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div><div>
                    <div>
          <dt>
            <var>callback</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>function</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>This function is called when speaking is finished.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div>
                  <div>
                  <h4>Callback function</h4>
                  <p style="display: none; ">
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span></span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div style="display: none; ">
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem" style="display: none; ">
              <a></a> <!-- method-anchor -->
              <h4>method name</h4>

              <div class="summary"><span>void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.module.methodName</span>(<span><span>, </span><span></span>
                      <var><span></span></var></span>)</div>

              <div class="description">
                <p class="todo">Undocumented.</p>
                <p>
                  A description from the json schema def of the function goes here.
                </p>

                <!-- PARAMETERS -->
                <h4>Parameters</h4>
                <dl>
                  <div>
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4>Returns</h4>
                <dl>
                  <div>
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div>
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p>
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div><div class="apiItem">
              <a name="method-stop"></a> <!-- method-anchor -->
              <h4>stop</h4>

              <div class="summary"><span style="display: none; ">void</span>
                  <!-- Note: intentionally longer 80 columns -->
                  <span>chrome.experimental.tts.stop</span>(<span style="display: none; "><span>, </span><span></span>
                      <var><span></span></var></span>)</div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Stop any current speech.</p>

                <!-- PARAMETERS -->
                <h4 style="display: none; ">Parameters</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- RETURNS -->
                <h4 style="display: none; ">Returns</h4>
                <dl>
                  <div style="display: none; ">
                    <div>
                    </div>
                  </div>
                </dl>

                <!-- CALLBACK -->
                <div style="display: none; ">
                  <div>
                  <h4>Callback function</h4>
                  <p>
                    The callback <em>parameter</em> should specify a function
                    that looks like this:
                  </p>
                  <p>
                    If you specify the <em>callback</em> parameter, it should
                    specify a function that looks like this:
                  </p>

                  <!-- Note: intentionally longer 80 columns -->
                  <pre>function(<span>Type param1, Type param2</span>) <span class="subdued">{...}</span>;</pre>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                  </div>
                </div>

                <!-- MIN_VERSION -->
                <p style="display: none; ">
                  This function was added in version <b><span></span></b>.
                  If you require this function, the manifest key
                  <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
                  can ensure that your extension won't be run in an earlier browser version.
                </p>
              </div> <!-- /description -->

            </div>  <!-- /apiItem -->

          </div>  <!-- /apiGroup -->

          <!-- EVENTS -->
          <div id="eventsTemplate" class="apiGroup">
            <a name="global-events"></a>
            <h3>Events</h3>
            <!-- iterates over all events -->
            <div class="apiItem">
              <a name="event-onSpeak"></a>
              <h4>onSpeak</h4>

              <div class="summary">
                <!-- Note: intentionally longer 80 columns -->
                <span class="subdued">chrome.experimental.tts.</span><span>onSpeak</span><span class="subdued">.addListener</span>(function(<span>string utterance, object options, function callback</span>) <span class="subdued">{...}</span>);
              </div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Called when the user makes a call to tts.speak and the options matches one of the tts_voices from this extension's manifest.</p>

                <!-- PARAMETERS -->
                <div>
                  <h4>Parameters</h4>
                  <dl>
                    <div>
                      <div>
          <dt>
            <var>utterance</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The text to speak. This may include SSML, so if your engine does not support SSML, you should strip out all XML markup and synthesize only the underlying text content.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                    </div><div>
                      <div>
          <dt>
            <var>options</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>object</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The speak options.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd>
            <dl>
              <div>
                <div>
          <dt>
            <var>voiceName</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The name of the voice to use for synthesis.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>locale</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>The language and region code that specify the language and dialect to be used for synthesis, in the form <language>-<region>, e.g. en-US, en-GB, fr-CA, zh-CN, etc.</region></language></dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>gender</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>string</span>
                        <span>["male", "female"]</span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Gender of voice for synthesized speech.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>rate</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>number</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Speaking speed between 0 and 1 inclusive, with 0 being slowest and 1 being fastest.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>pitch</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>number</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Speaking pitch between 0 and 1 inclusive, with 0 being lowest and 1 being highest.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div><div>
                <div>
          <dt>
            <var>volume</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>number</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>Speaking volume between 0 and 1 inclusive, with 0 being lowest and 1 being highest.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                    </div><div>
                      <div>
          <dt>
            <var>callback</var>
              <em>

                <!-- TYPE -->
                <div style="display:inline">
                  (
                    <span class="optional" style="display: none; ">optional</span>
                    <span class="enum" style="display: none; ">enumerated</span>
                    <span id="typeTemplate">
                      <span style="display: none; ">
                        <a> Type</a>
                      </span>
                      <span>
                        <span style="display: none; ">
                          array of <span><span></span></span>
                        </span>
                        <span>function</span>
                        <span style="display: none; "></span>
                      </span>
                    </span>
                  )
                </div>

              </em>
          </dt>
          <dd class="todo" style="display: none; ">
            Undocumented.
          </dd>
          <dd>You must call this function when speaking is finished.</dd>
          <dd style="display: none; ">
            This parameter was added in version
            <b><span></span></b>.
            You must omit this parameter in earlier versions,
            and you may omit it in any version.  If you require this
            parameter, the manifest key
            <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a>
            can ensure that your extension won't be run in an earlier browser version.
          </dd>

          <!-- OBJECT PROPERTIES -->
          <dd style="display: none; ">
            <dl>
              <div>
                <div>
                </div>
              </div>
            </dl>
          </dd>

          <!-- OBJECT METHODS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- OBJECT EVENT FIELDS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

          <!-- FUNCTION PARAMETERS -->
          <dd style="display: none; ">
            <div></div>
          </dd>

        </div>
                    </div>
                  </dl>
                </div>
              </div> <!-- /decription -->

            </div><div class="apiItem">
              <a name="event-onStop"></a>
              <h4>onStop</h4>

              <div class="summary">
                <!-- Note: intentionally longer 80 columns -->
                <span class="subdued">chrome.experimental.tts.</span><span>onStop</span><span class="subdued">.addListener</span>(function(<span></span>) <span class="subdued">{...}</span>);
              </div>

              <div class="description">
                <p class="todo" style="display: none; ">Undocumented.</p>
                <p>Fired when a call is made to tts.stop and this extension may be in the middle of speaking. If an extension receives a call to onStop and speech is already stopped, it should do nothing (not raise an error).</p>

                <!-- PARAMETERS -->
                <div style="display: none; ">
                  <h4>Parameters</h4>
                  <dl>
                    <div>
                      <div>
                      </div>
                    </div>
                  </dl>
                </div>
              </div> <!-- /decription -->

            </div> <!-- /apiItem -->

          </div> <!-- /apiGroup -->

          <!-- TYPES -->
          <div class="apiGroup" style="display: none; ">
            <a name="types"></a>
            <h3 id="types">Types</h3>

            <!-- iterates over all types -->
            <div class="apiItem">
              <a></a>
              <h4>type name</h4>

              <div>
              </div>

            </div> <!-- /apiItem -->

          </div> <!-- /apiGroup -->

        </div> <!-- /apiPage -->
      </div> <!-- /gc-pagecontent -->
    </div> <!-- /g-section -->
  </div> <!-- /codesiteContent -->
    <div id="gc-footer" --="">
      <div class="text">
  <p>
  Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
  the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
  Attribution 3.0 License</a>, and code samples are licensed under the
  <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
  </p>
  <p>
  ©2011 Google
  </p>

<!-- begin analytics -->
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>

<script type="text/javascript">
  // chrome doc tracking
  try {
    var engdocs = _gat._getTracker("YT-10763712-2");
    engdocs._trackPageview();
  } catch(err) {}

  // code.google.com site-wide tracking
  try {
    _uacct="UA-18071-1";
    _uanchor=1;
    _uff=0;
    urchinTracker();
  }
  catch(e) {/* urchinTracker not available. */}
</script>
<!-- end analytics -->
      </div>
    </div> <!-- /gc-footer -->
  </div> <!-- /gc-container -->
</body></html>
