Files
ts-mobile-go/docs/teamspeak-sdk-3.5.2/doc/client/faq.html
T
2026-07-20 19:01:03 +08:00

280 lines
26 KiB
HTML

<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>FAQ &mdash; TeamSpeak SDK documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../_static/css/theme.css?v=9edc463e" />
<script src="../_static/jquery.js?v=5d32c60e"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../_static/documentation_options.js?v=7f41d439"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="Custom passwords" href="passwords.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
TeamSpeak SDK
<img src="../_static/logo.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">API</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../errors.html">TeamSpeak Error Codes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../properties.html">Property Enums</a></li>
<li class="toctree-l1"><a class="reference internal" href="../enumerations.html">Structures &amp; Enumerations</a></li>
<li class="toctree-l1"><a class="reference internal" href="../client_api.html">TeamSpeak Client Functions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server_api.html">TeamSpeak Server Functions</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Server</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../server/intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/basic.html">Getting started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/list-items.html">List available clients, channels, servers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/vserver-manage.html">Create and stop virtual servers</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/advanced-create.html">Advanced virtual server creation</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/info.html">Retrieve and store information</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/channels.html">Managing channels</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/clients.html">Managing clients</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/whisper.html">Whisper lists</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/encryption.html">Custom encryption</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/passwords.html">Custom passwords</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/permissions.html">Permission checks</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/security-salt.html">Security salts and hashes</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/disable-commands.html">Disabling protocol commands</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/filetransfer.html">Filetransfer</a></li>
<li class="toctree-l1"><a class="reference internal" href="../server/faq.html">FAQ</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Client</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="intro.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="basic.html">Getting started</a></li>
<li class="toctree-l1"><a class="reference internal" href="connections.html">Managing server connections</a></li>
<li class="toctree-l1"><a class="reference internal" href="logging.html">Logging</a></li>
<li class="toctree-l1"><a class="reference internal" href="audio.html">Client Audio</a></li>
<li class="toctree-l1"><a class="reference internal" href="wave-files.html">Playing wave files</a></li>
<li class="toctree-l1"><a class="reference internal" href="3dsound.html">3D Sound</a></li>
<li class="toctree-l1"><a class="reference internal" href="whisper.html">Whisper lists</a></li>
<li class="toctree-l1"><a class="reference internal" href="voice-encryption.html">Channel voice data encryption</a></li>
<li class="toctree-l1"><a class="reference internal" href="info.html">Retrieve and store information</a></li>
<li class="toctree-l1"><a class="reference internal" href="channels.html">Channel Management</a></li>
<li class="toctree-l1"><a class="reference internal" href="client-list.html">List clients</a></li>
<li class="toctree-l1"><a class="reference internal" href="client-kick.html">Kicking clients</a></li>
<li class="toctree-l1"><a class="reference internal" href="local-mute.html">Muting other clients</a></li>
<li class="toctree-l1"><a class="reference internal" href="textmessages.html">Text chat</a></li>
<li class="toctree-l1"><a class="reference internal" href="filetransfer.html">Filetransfer</a></li>
<li class="toctree-l1"><a class="reference internal" href="encryption.html">Custom encryption</a></li>
<li class="toctree-l1"><a class="reference internal" href="passwords.html">Custom passwords</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#implementing-push-to-talk">Implementing Push-To-Talk</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#example">Example</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#adjusting-the-volume">Adjusting the volume</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#output-volume">Output volume</a></li>
<li class="toctree-l3"><a class="reference internal" href="#input-volume">Input volume</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#talk-across-channels">Talk across channels</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">TeamSpeak SDK</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">FAQ</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="faq">
<h1>FAQ<a class="headerlink" href="#faq" title="Link to this heading"></a></h1>
<section id="implementing-push-to-talk">
<span id="c-faq"></span><h2>Implementing Push-To-Talk<a class="headerlink" href="#implementing-push-to-talk" title="Link to this heading"></a></h2>
<p>Push-To-Talk should be implemented by toggling the client variable
<a class="reference internal" href="../properties.html#c.ClientProperties.CLIENT_INPUT_DEACTIVATED" title="ClientProperties.CLIENT_INPUT_DEACTIVATED"><code class="xref c c-enumerator docutils literal notranslate"><span class="pre">CLIENT_INPUT_DEACTIVATED</span></code></a> using the function
<a class="reference internal" href="info-client.html#c.ts3client_setClientSelfVariableAsInt" title="ts3client_setClientSelfVariableAsInt"><code class="xref c c-func docutils literal notranslate"><span class="pre">ts3client_setClientSelfVariableAsInt()</span></code></a>.
Valid variables are defined in <a class="reference internal" href="../enumerations.html#c.InputDeactivationStatus" title="InputDeactivationStatus"><code class="xref c c-enum docutils literal notranslate"><span class="pre">InputDeactivationStatus</span></code></a>.</p>
<p>For Push-To-Talk toggle between <a class="reference internal" href="../enumerations.html#c.InputDeactivationStatus.INPUT_ACTIVE" title="InputDeactivationStatus.INPUT_ACTIVE"><code class="xref c c-enumerator docutils literal notranslate"><span class="pre">INPUT_ACTIVE</span></code></a> (talking) and
<a class="reference internal" href="../enumerations.html#c.InputDeactivationStatus.INPUT_DEACTIVATED" title="InputDeactivationStatus.INPUT_DEACTIVATED"><code class="xref c c-enumerator docutils literal notranslate"><span class="pre">INPUT_DEACTIVATED</span></code></a> (not talking).</p>
<section id="example">
<h3>Example<a class="headerlink" href="#example" title="Link to this heading"></a></h3>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">error</span><span class="p">;</span>
<span class="linenos"> 2</span><span class="kt">bool</span><span class="w"> </span><span class="n">shouldTalk</span><span class="p">;</span>
<span class="linenos"> 3</span>
<span class="linenos"> 4</span><span class="n">shouldTalk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">isPushToTalkButtonPressed</span><span class="p">();</span><span class="w"> </span><span class="c1">// Your key detection implementation</span>
<span class="linenos"> 5</span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">error</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ts3client_setClientSelfVariableAsInt</span><span class="p">(</span><span class="n">scHandlerID</span><span class="p">,</span><span class="w"> </span><span class="n">CLIENT_INPUT_DEACTIVATED</span><span class="p">,</span><span class="w"> </span><span class="n">shouldTalk</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="n">INPUT_ACTIVE</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">INPUT_DEACTIVATED</span><span class="p">))</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 6</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">errorMsg</span><span class="p">;</span>
<span class="linenos"> 7</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ts3client_getErrorMessage</span><span class="p">(</span><span class="n">error</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">errorMsg</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 8</span><span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Error toggling push-to-talk: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">errorMsg</span><span class="p">);</span>
<span class="linenos"> 9</span><span class="w"> </span><span class="n">ts3client_freeMemory</span><span class="p">(</span><span class="n">errorMsg</span><span class="p">);</span>
<span class="linenos">10</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">11</span><span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="linenos">12</span><span class="p">}</span>
<span class="linenos">13</span>
<span class="linenos">14</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ts3client_flushClientSelfUpdates</span><span class="p">(</span><span class="n">scHandlerID</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">15</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">errorMsg</span><span class="p">;</span>
<span class="linenos">16</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ts3client_getErrorMessage</span><span class="p">(</span><span class="n">error</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">errorMsg</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">17</span><span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Error flushing after toggling push-to-talk: %s</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">errorMsg</span><span class="p">);</span>
<span class="linenos">18</span><span class="w"> </span><span class="n">ts3client_freeMemory</span><span class="p">(</span><span class="n">errorMsg</span><span class="p">);</span>
<span class="linenos">19</span><span class="w"> </span><span class="p">}</span>
<span class="linenos">20</span><span class="p">}</span>
</pre></div>
</div>
<p>It is not necessary to close and reopen the capture device to implement
Push-To-Talk.</p>
<p>Basically it would be possible to toggle <a class="reference internal" href="../properties.html#c.ClientProperties.CLIENT_INPUT_MUTED" title="ClientProperties.CLIENT_INPUT_MUTED"><code class="xref c c-enumerator docutils literal notranslate"><span class="pre">CLIENT_INPUT_MUTED</span></code></a> as well, but
the advantage of <a class="reference internal" href="../properties.html#c.ClientProperties.CLIENT_INPUT_DEACTIVATED" title="ClientProperties.CLIENT_INPUT_DEACTIVATED"><code class="xref c c-enumerator docutils literal notranslate"><span class="pre">CLIENT_INPUT_DEACTIVATED</span></code></a> is that the change is not
propagated to the server and other connected clients, thus saving
network traffic. <a class="reference internal" href="../properties.html#c.ClientProperties.CLIENT_INPUT_MUTED" title="ClientProperties.CLIENT_INPUT_MUTED"><code class="xref c c-enumerator docutils literal notranslate"><span class="pre">CLIENT_INPUT_MUTED</span></code></a> should instead be used for manually
muting the microphone when using Voice Activity Detection instead of
Push-To-Talk.</p>
<p>If you need to query the current muted state, use
<a class="reference internal" href="info-client.html#c.ts3client_getClientSelfVariableAsInt" title="ts3client_getClientSelfVariableAsInt"><code class="xref c c-func docutils literal notranslate"><span class="pre">ts3client_getClientSelfVariableAsInt()</span></code></a></p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="kt">int</span><span class="w"> </span><span class="n">hardwareStatus</span><span class="p">,</span><span class="w"> </span><span class="n">deactivated</span><span class="p">,</span><span class="w"> </span><span class="n">muted</span><span class="p">;</span>
<span class="linenos"> 2</span>
<span class="linenos"> 3</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ts3client_getClientSelfVariableAsInt</span><span class="p">(</span><span class="n">scHandlerID</span><span class="p">,</span><span class="w"> </span><span class="n">CLIENT_INPUT_HARDWARE</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">hardwareStatus</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 4</span><span class="w"> </span><span class="cm">/* Handle error */</span>
<span class="linenos"> 5</span><span class="p">}</span>
<span class="linenos"> 6</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ts3client_getClientSelfVariableAsInt</span><span class="p">(</span><span class="n">scHandlerID</span><span class="p">,</span><span class="w"> </span><span class="n">CLIENT_INPUT_DEACTIVATED</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">deactivated</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos"> 7</span><span class="w"> </span><span class="cm">/* Handle error */</span>
<span class="linenos"> 8</span><span class="p">}</span>
<span class="linenos"> 9</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ts3client_getClientSelfVariableAsInt</span><span class="p">(</span><span class="n">scHandlerID</span><span class="p">,</span><span class="w"> </span><span class="n">CLIENT_INPUT_MUTED</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">muted</span><span class="p">)</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">ERROR_ok</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">10</span><span class="w"> </span><span class="cm">/* Handle error */</span>
<span class="linenos">11</span><span class="p">}</span>
<span class="linenos">12</span>
<span class="linenos">13</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">hardwareStatus</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">HARDWAREINPUT_DISABLED</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">14</span><span class="w"> </span><span class="cm">/* No capture device available */</span>
<span class="linenos">15</span><span class="p">}</span>
<span class="linenos">16</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">deactivated</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">INPUT_DEACTIVATED</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">17</span><span class="w"> </span><span class="cm">/* Input was deactivated for Push-To-Talk (not propagated to server) */</span>
<span class="linenos">18</span><span class="p">}</span>
<span class="linenos">19</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">muted</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">MUTEINPUT_MUTED</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="linenos">20</span><span class="w"> </span><span class="cm">/* Input was muted (propagated to server) */</span>
<span class="linenos">21</span><span class="p">}</span>
</pre></div>
</div>
<p>When using Push-To-Talk, you should deactivate Voice Activity Detection
in the <a class="reference internal" href="preprocessor.html#preproc"><span class="std std-ref">preprocessor</span></a> or keep the VAD level very low. To
deactivate VAD, use:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="n">ts3client_setPreProcessorConfigValue</span><span class="p">(</span><span class="n">serverConnectionHandlerID</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;vad&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;false&quot;</span><span class="p">);</span>
</pre></div>
</div>
</section>
</section>
<section id="adjusting-the-volume">
<h2>Adjusting the volume<a class="headerlink" href="#adjusting-the-volume" title="Link to this heading"></a></h2>
<section id="output-volume">
<h3>Output volume<a class="headerlink" href="#output-volume" title="Link to this heading"></a></h3>
<p>The global voice output volume can be adjusted by changing the
“volume_modifier” playback option using <a class="reference internal" href="playback-options.html#c.ts3client_setPlaybackConfigValue" title="ts3client_setPlaybackConfigValue"><code class="xref c c-func docutils literal notranslate"><span class="pre">ts3client_setPlaybackConfigValue()</span></code></a>.
The value is in decibel, so 0 means no modification, negative values make the
signal quieter and positive values louder.</p>
<p>Example to increase the output volume by 10 decibel:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="linenos">1</span><span class="n">ts3client_setPlaybackConfigValue</span><span class="p">(</span><span class="n">scHandlerID</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;volume_modifier&quot;</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">);</span>
</pre></div>
</div>
<p>In addition to modifying the global output volue, the volume of
individual clients can be changed with
<a class="reference internal" href="playback-options.html#c.ts3client_setClientVolumeModifier" title="ts3client_setClientVolumeModifier"><code class="xref c c-func docutils literal notranslate"><span class="pre">ts3client_setClientVolumeModifier()</span></code></a>.</p>
</section>
<section id="input-volume">
<h3>Input volume<a class="headerlink" href="#input-volume" title="Link to this heading"></a></h3>
<p><a class="reference internal" href="preprocessor.html#preproc"><span class="std std-ref">Automatic Gain Control</span></a> (AGC) takes care of the input
volume during preprocessing automatically. Instead of modifying the
input volume directly, you modify the AGC preprocessor settings with
<a class="reference internal" href="preprocessor.html#c.ts3client_setPreProcessorConfigValue" title="ts3client_setPreProcessorConfigValue"><code class="xref c c-func docutils literal notranslate"><span class="pre">ts3client_setPreProcessorConfigValue()</span></code></a>.</p>
</section>
</section>
<section id="talk-across-channels">
<h2>Talk across channels<a class="headerlink" href="#talk-across-channels" title="Link to this heading"></a></h2>
<p>Generally clients can only talk to other clients in the same channel.
However, for specific scenarios this can be overruled using <a class="reference internal" href="whisper.html#c-whisper"><span class="std std-ref">whisper
lists</span></a>. This feature allows specific clients to
temporarily talk to other clients or channels outside of their own
channel. While whispering, talking to the own channel is disabled.</p>
<p>An example for a scenario where whisper may be useful would be a team
consisting of a number of squads. Each squad is assigned to one channel,
so squad members can only talk to other members of the same squad. In
addition, there is a team leader and squad leaders, who want to
communicate accross the squad channels. This can be implemented with
whispering, so the team leader could broadcast to all squad leaders, or
a squad leader could briefly report to the team leader temporarily
sending his voice data to him instead of the squad leaders channel.</p>
<p>This mechanism is powerful and flexible allowing the SDK developer to
handle more complex scenarios overruling the standard behavior where
clients can only talk to other clients within the same channel.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="passwords.html" class="btn btn-neutral float-left" title="Custom passwords" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2020, TeamSpeak Systems GmbH.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>