add nojekyll to resolve theme
This commit is contained in:
@@ -1,20 +0,0 @@
|
|||||||
# Minimal makefile for Sphinx documentation
|
|
||||||
#
|
|
||||||
|
|
||||||
# You can set these variables from the command line, and also
|
|
||||||
# from the environment for the first two.
|
|
||||||
SPHINXOPTS ?=
|
|
||||||
SPHINXBUILD ?= sphinx-build
|
|
||||||
SOURCEDIR = source
|
|
||||||
BUILDDIR = build
|
|
||||||
|
|
||||||
# Put it first so that "make" without argument is like "make help".
|
|
||||||
help:
|
|
||||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
||||||
|
|
||||||
.PHONY: help Makefile
|
|
||||||
|
|
||||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
|
||||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
|
||||||
%: Makefile
|
|
||||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
|||||||
|
# Sphinx build info version 1
|
||||||
|
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||||
|
config: 7b818b47e6f359b937e5a2517f120d43
|
||||||
|
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||||
|
Before Width: | Height: | Size: 286 B After Width: | Height: | Size: 286 B |
|
Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 90 B |
|
Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 90 B |
@@ -0,0 +1,295 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html lang="en" data-content_root="./">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
|
<title>Welcome to whisper_live’s documentation! — whisper_live documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" />
|
||||||
|
<script src="_static/documentation_options.js?v=5929fcd5"></script>
|
||||||
|
<script src="_static/doctools.js?v=888ff710"></script>
|
||||||
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
||||||
|
<link rel="index" title="Index" href="genindex.html" />
|
||||||
|
<link rel="search" title="Search" href="search.html" />
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
||||||
|
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
||||||
|
|
||||||
|
</head><body>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="document">
|
||||||
|
<div class="documentwrapper">
|
||||||
|
<div class="bodywrapper">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="body" role="main">
|
||||||
|
|
||||||
|
<section id="welcome-to-whisper-live-s-documentation">
|
||||||
|
<h1>Welcome to whisper_live’s documentation!<a class="headerlink" href="#welcome-to-whisper-live-s-documentation" title="Link to this heading">¶</a></h1>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
</div>
|
||||||
|
<dl class="py class" id="module-whisper_live.server">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient">
|
||||||
|
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">whisper_live.server.</span></span><span class="sig-name descname"><span class="pre">ServeClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">websocket</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">task</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'transcribe'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">multilingual</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_uid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><dl class="simple">
|
||||||
|
<dt>Attributes:</dt><dd><p>RATE (int): The audio sampling rate (constant) set to 16000.
|
||||||
|
SERVER_READY (str): A constant message indicating that the server is ready.
|
||||||
|
DISCONNECT (str): A constant message indicating that the client should disconnect.
|
||||||
|
client_uid (str): A unique identifier for the client.
|
||||||
|
data (bytes): Accumulated audio data.
|
||||||
|
frames (bytes): Accumulated audio frames.
|
||||||
|
language (str): The language for transcription.
|
||||||
|
task (str): The task type, e.g., “transcribe.”
|
||||||
|
transcriber (WhisperModel): The Whisper model for speech-to-text.
|
||||||
|
timestamp_offset (float): The offset in audio timestamps.
|
||||||
|
frames_np (numpy.ndarray): NumPy array to store audio frames.
|
||||||
|
frames_offset (float): The offset in audio frames.
|
||||||
|
text (list): List of transcribed text segments.
|
||||||
|
current_out (str): The current incomplete transcription.
|
||||||
|
prev_out (str): The previous incomplete transcription.
|
||||||
|
t_start (float): Timestamp for the start of transcription.
|
||||||
|
exit (bool): A flag to exit the transcription thread.
|
||||||
|
same_output_threshold (int): Threshold for consecutive same output segments.
|
||||||
|
show_prev_out_thresh (int): Threshold for showing previous output segments.
|
||||||
|
add_pause_thresh (int): Threshold for adding a pause (blank) segment.
|
||||||
|
transcript (list): List of transcribed segments.
|
||||||
|
send_last_n_segments (int): Number of last segments to send to the client.
|
||||||
|
wrapper (textwrap.TextWrapper): Text wrapper for formatting text.
|
||||||
|
pick_previous_segments (int): Number of previous segments to include in the output.
|
||||||
|
websocket: The WebSocket connection for the client.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.add_frames">
|
||||||
|
<span class="sig-name descname"><span class="pre">add_frames</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame_np</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.add_frames" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Add audio frames to the ongoing audio stream buffer.</p>
|
||||||
|
<p>This method is responsible for maintaining the audio stream buffer, allowing the continuous addition
|
||||||
|
of audio frames as they are received. It also ensures that the buffer does not exceed a specified size
|
||||||
|
to prevent excessive memory usage.</p>
|
||||||
|
<p>If the buffer size exceeds a threshold (45 seconds of audio data), it discards the oldest 30 seconds
|
||||||
|
of audio data to maintain a reasonable buffer size. If the buffer is empty, it initializes it with the provided
|
||||||
|
audio frame. The audio stream buffer is used for real-time processing of audio data for transcription.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Args:</dt><dd><p>frame_np (numpy.ndarray): The audio frame data as a NumPy array.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.cleanup">
|
||||||
|
<span class="sig-name descname"><span class="pre">cleanup</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.cleanup" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Perform cleanup tasks before exiting the transcription service.</p>
|
||||||
|
<p>This method performs necessary cleanup tasks, including stopping the transcription thread, marking
|
||||||
|
the exit flag to indicate the transcription thread should exit gracefully, and destroying resources
|
||||||
|
associated with the transcription process.</p>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.disconnect">
|
||||||
|
<span class="sig-name descname"><span class="pre">disconnect</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.disconnect" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Notify the client of disconnection and send a disconnect message.</p>
|
||||||
|
<p>This method sends a disconnect message to the client via the WebSocket connection to notify them
|
||||||
|
that the transcription service is disconnecting gracefully.</p>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.fill_output">
|
||||||
|
<span class="sig-name descname"><span class="pre">fill_output</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">output</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.fill_output" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Format the current incomplete transcription output by combining it with previous complete segments.
|
||||||
|
The resulting transcription is wrapped into two lines, each containing a maximum of 50 characters.</p>
|
||||||
|
<p>It ensures that the combined transcription fits within two lines, with a maximum of 50 characters per line.
|
||||||
|
Segments are concatenated in the order they exist in the list of previous segments, with the most
|
||||||
|
recent complete segment first and older segments prepended as needed to maintain the character limit.
|
||||||
|
If a 3-second pause is detected in the previous segments, any text preceding it is discarded to ensure
|
||||||
|
the transcription starts with the most recent complete content. The resulting transcription is returned
|
||||||
|
as a single string.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Args:</dt><dd><p>output(str): The current incomplete transcription segment.</p>
|
||||||
|
</dd>
|
||||||
|
<dt>Returns:</dt><dd><p>str: A formatted transcription wrapped in two lines.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.speech_to_text">
|
||||||
|
<span class="sig-name descname"><span class="pre">speech_to_text</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.speech_to_text" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Process an audio stream in an infinite loop, continuously transcribing the speech.</p>
|
||||||
|
<p>This method continuously receives audio frames, performs real-time transcription, and sends
|
||||||
|
transcribed segments to the client via a WebSocket connection.</p>
|
||||||
|
<p>If the client’s language is not detected, it waits for 30 seconds of audio input to make a language prediction.
|
||||||
|
It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments
|
||||||
|
are sent to the client in real-time, and a history of segments is maintained to provide context.Pauses in speech
|
||||||
|
(no output from Whisper) are handled by showing the previous output for a set duration. A blank segment is added if
|
||||||
|
there is no speech for a specified duration to indicate a pause.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Raises:</dt><dd><p>Exception: If there is an issue with audio processing or WebSocket communication.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.update_segments">
|
||||||
|
<span class="sig-name descname"><span class="pre">update_segments</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">segments</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">duration</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.update_segments" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Processes the segments from whisper. Appends all the segments to the list
|
||||||
|
except for the last segment assuming that it is incomplete.</p>
|
||||||
|
<p>Updates the ongoing transcript with transcribed segments, including their start and end times.
|
||||||
|
Complete segments are appended to the transcript in chronological order. Incomplete segments
|
||||||
|
(assumed to be the last one) are processed to identify repeated content. If the same incomplete
|
||||||
|
segment is seen multiple times, it updates the offset and appends the segment to the transcript.
|
||||||
|
A threshold is used to detect repeated content and ensure it is only included once in the transcript.
|
||||||
|
The timestamp offset is updated based on the duration of processed segments. The method returns the
|
||||||
|
last processed segment, allowing it to be sent to the client for real-time updates.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Args:</dt><dd><p>segments(dict) : dictionary of segments as returned by whisper
|
||||||
|
duration(float): duration of the current chunk</p>
|
||||||
|
</dd>
|
||||||
|
<dt>Returns:</dt><dd><dl class="simple">
|
||||||
|
<dt>dict or None: The last processed segment with its start time, end time, and transcribed text.</dt><dd><p>Returns None if there are no valid segments to process.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py class">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer">
|
||||||
|
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">whisper_live.server.</span></span><span class="sig-name descname"><span class="pre">TranscriptionServer</span></span><a class="headerlink" href="#whisper_live.server.TranscriptionServer" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Represents a transcription server that handles incoming audio from clients.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Attributes:</dt><dd><p>RATE (int): The audio sampling rate (constant) set to 16000.
|
||||||
|
vad_model (torch.Module): The voice activity detection model.
|
||||||
|
vad_threshold (float): The voice activity detection threshold.
|
||||||
|
clients (dict): A dictionary to store connected clients.
|
||||||
|
websockets (dict): A dictionary to store WebSocket connections.
|
||||||
|
clients_start_time (dict): A dictionary to track client start times.
|
||||||
|
max_clients (int): Maximum allowed connected clients.
|
||||||
|
max_connection_time (int): Maximum allowed connection time in seconds.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer.get_wait_time">
|
||||||
|
<span class="sig-name descname"><span class="pre">get_wait_time</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.TranscriptionServer.get_wait_time" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Calculate and return the estimated wait time for clients.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Returns:</dt><dd><p>float: The estimated wait time in minutes.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer.recv_audio">
|
||||||
|
<span class="sig-name descname"><span class="pre">recv_audio</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">websocket</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.TranscriptionServer.recv_audio" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Receive audio chunks from a client in an infinite loop.</p>
|
||||||
|
<p>Continuously receives audio frames from a connected client
|
||||||
|
over a WebSocket connection. It processes the audio frames using a
|
||||||
|
voice activity detection (VAD) model to determine if they contain speech
|
||||||
|
or not. If the audio frame contains speech, it is added to the client’s
|
||||||
|
audio data for ASR.
|
||||||
|
If the maximum number of clients is reached, the method sends a
|
||||||
|
“WAIT” status to the client, indicating that they should wait
|
||||||
|
until a slot is available.
|
||||||
|
If a client’s connection exceeds the maximum allowed time, it will
|
||||||
|
be disconnected, and the client’s resources will be cleaned up.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Args:</dt><dd><p>websocket (WebSocket): The WebSocket connection for the client.</p>
|
||||||
|
</dd>
|
||||||
|
<dt>Raises:</dt><dd><p>Exception: If there is an error during the audio frame processing.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
<dl class="py method">
|
||||||
|
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer.run">
|
||||||
|
<span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9090</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.TranscriptionServer.run" title="Link to this definition">¶</a></dt>
|
||||||
|
<dd><p>Run the transcription server.</p>
|
||||||
|
<dl class="simple">
|
||||||
|
<dt>Args:</dt><dd><p>host (str): The host address to bind the server.
|
||||||
|
port (int): The port number to bind the server.</p>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
</dd></dl>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
<section id="indices-and-tables">
|
||||||
|
<span id="module-whisper_live.client"></span><h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Link to this heading">¶</a></h1>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
|
||||||
|
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
|
||||||
|
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
||||||
|
<div class="sphinxsidebarwrapper">
|
||||||
|
<h1 class="logo"><a href="#">whisper_live</a></h1>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Navigation</h3>
|
||||||
|
|
||||||
|
<div class="relations">
|
||||||
|
<h3>Related Topics</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="#">Documentation overview</a><ul>
|
||||||
|
</ul></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div id="searchbox" style="display: none" role="search">
|
||||||
|
<h3 id="searchlabel">Quick search</h3>
|
||||||
|
<div class="searchformwrapper">
|
||||||
|
<form class="search" action="search.html" method="get">
|
||||||
|
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
||||||
|
<input type="submit" value="Go" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>document.getElementById('searchbox').style.display = "block"</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="clearer"></div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
©2023, Collabora.
|
||||||
|
|
||||||
|
|
|
||||||
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
|
||||||
|
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
|
||||||
|
|
||||||
|
|
|
||||||
|
<a href="_sources/index.rst.txt"
|
||||||
|
rel="nofollow">Page source</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+1
-295
@@ -1,295 +1 @@
|
|||||||
<!DOCTYPE html>
|
<meta http-equiv="refresh" content="0; url=./html/index.html" />
|
||||||
|
|
||||||
<html lang="en" data-content_root="./">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
|
|
||||||
<title>Welcome to whisper_live’s documentation! — whisper_live documentation</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" />
|
|
||||||
<link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" />
|
|
||||||
<script src="_static/documentation_options.js?v=5929fcd5"></script>
|
|
||||||
<script src="_static/doctools.js?v=888ff710"></script>
|
|
||||||
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
||||||
<link rel="index" title="Index" href="genindex.html" />
|
|
||||||
<link rel="search" title="Search" href="search.html" />
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
|
|
||||||
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
|
|
||||||
|
|
||||||
</head><body>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="document">
|
|
||||||
<div class="documentwrapper">
|
|
||||||
<div class="bodywrapper">
|
|
||||||
|
|
||||||
|
|
||||||
<div class="body" role="main">
|
|
||||||
|
|
||||||
<section id="welcome-to-whisper-live-s-documentation">
|
|
||||||
<h1>Welcome to whisper_live’s documentation!<a class="headerlink" href="#welcome-to-whisper-live-s-documentation" title="Link to this heading">¶</a></h1>
|
|
||||||
<div class="toctree-wrapper compound">
|
|
||||||
</div>
|
|
||||||
<dl class="py class" id="module-whisper_live.server">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient">
|
|
||||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">whisper_live.server.</span></span><span class="sig-name descname"><span class="pre">ServeClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">websocket</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">task</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'transcribe'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">device</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">multilingual</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">language</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_uid</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><dl class="simple">
|
|
||||||
<dt>Attributes:</dt><dd><p>RATE (int): The audio sampling rate (constant) set to 16000.
|
|
||||||
SERVER_READY (str): A constant message indicating that the server is ready.
|
|
||||||
DISCONNECT (str): A constant message indicating that the client should disconnect.
|
|
||||||
client_uid (str): A unique identifier for the client.
|
|
||||||
data (bytes): Accumulated audio data.
|
|
||||||
frames (bytes): Accumulated audio frames.
|
|
||||||
language (str): The language for transcription.
|
|
||||||
task (str): The task type, e.g., “transcribe.”
|
|
||||||
transcriber (WhisperModel): The Whisper model for speech-to-text.
|
|
||||||
timestamp_offset (float): The offset in audio timestamps.
|
|
||||||
frames_np (numpy.ndarray): NumPy array to store audio frames.
|
|
||||||
frames_offset (float): The offset in audio frames.
|
|
||||||
text (list): List of transcribed text segments.
|
|
||||||
current_out (str): The current incomplete transcription.
|
|
||||||
prev_out (str): The previous incomplete transcription.
|
|
||||||
t_start (float): Timestamp for the start of transcription.
|
|
||||||
exit (bool): A flag to exit the transcription thread.
|
|
||||||
same_output_threshold (int): Threshold for consecutive same output segments.
|
|
||||||
show_prev_out_thresh (int): Threshold for showing previous output segments.
|
|
||||||
add_pause_thresh (int): Threshold for adding a pause (blank) segment.
|
|
||||||
transcript (list): List of transcribed segments.
|
|
||||||
send_last_n_segments (int): Number of last segments to send to the client.
|
|
||||||
wrapper (textwrap.TextWrapper): Text wrapper for formatting text.
|
|
||||||
pick_previous_segments (int): Number of previous segments to include in the output.
|
|
||||||
websocket: The WebSocket connection for the client.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.add_frames">
|
|
||||||
<span class="sig-name descname"><span class="pre">add_frames</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">frame_np</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.add_frames" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Add audio frames to the ongoing audio stream buffer.</p>
|
|
||||||
<p>This method is responsible for maintaining the audio stream buffer, allowing the continuous addition
|
|
||||||
of audio frames as they are received. It also ensures that the buffer does not exceed a specified size
|
|
||||||
to prevent excessive memory usage.</p>
|
|
||||||
<p>If the buffer size exceeds a threshold (45 seconds of audio data), it discards the oldest 30 seconds
|
|
||||||
of audio data to maintain a reasonable buffer size. If the buffer is empty, it initializes it with the provided
|
|
||||||
audio frame. The audio stream buffer is used for real-time processing of audio data for transcription.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Args:</dt><dd><p>frame_np (numpy.ndarray): The audio frame data as a NumPy array.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.cleanup">
|
|
||||||
<span class="sig-name descname"><span class="pre">cleanup</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.cleanup" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Perform cleanup tasks before exiting the transcription service.</p>
|
|
||||||
<p>This method performs necessary cleanup tasks, including stopping the transcription thread, marking
|
|
||||||
the exit flag to indicate the transcription thread should exit gracefully, and destroying resources
|
|
||||||
associated with the transcription process.</p>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.disconnect">
|
|
||||||
<span class="sig-name descname"><span class="pre">disconnect</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.disconnect" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Notify the client of disconnection and send a disconnect message.</p>
|
|
||||||
<p>This method sends a disconnect message to the client via the WebSocket connection to notify them
|
|
||||||
that the transcription service is disconnecting gracefully.</p>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.fill_output">
|
|
||||||
<span class="sig-name descname"><span class="pre">fill_output</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">output</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.fill_output" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Format the current incomplete transcription output by combining it with previous complete segments.
|
|
||||||
The resulting transcription is wrapped into two lines, each containing a maximum of 50 characters.</p>
|
|
||||||
<p>It ensures that the combined transcription fits within two lines, with a maximum of 50 characters per line.
|
|
||||||
Segments are concatenated in the order they exist in the list of previous segments, with the most
|
|
||||||
recent complete segment first and older segments prepended as needed to maintain the character limit.
|
|
||||||
If a 3-second pause is detected in the previous segments, any text preceding it is discarded to ensure
|
|
||||||
the transcription starts with the most recent complete content. The resulting transcription is returned
|
|
||||||
as a single string.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Args:</dt><dd><p>output(str): The current incomplete transcription segment.</p>
|
|
||||||
</dd>
|
|
||||||
<dt>Returns:</dt><dd><p>str: A formatted transcription wrapped in two lines.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.speech_to_text">
|
|
||||||
<span class="sig-name descname"><span class="pre">speech_to_text</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.speech_to_text" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Process an audio stream in an infinite loop, continuously transcribing the speech.</p>
|
|
||||||
<p>This method continuously receives audio frames, performs real-time transcription, and sends
|
|
||||||
transcribed segments to the client via a WebSocket connection.</p>
|
|
||||||
<p>If the client’s language is not detected, it waits for 30 seconds of audio input to make a language prediction.
|
|
||||||
It utilizes the Whisper ASR model to transcribe the audio, continuously processing and streaming results. Segments
|
|
||||||
are sent to the client in real-time, and a history of segments is maintained to provide context.Pauses in speech
|
|
||||||
(no output from Whisper) are handled by showing the previous output for a set duration. A blank segment is added if
|
|
||||||
there is no speech for a specified duration to indicate a pause.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Raises:</dt><dd><p>Exception: If there is an issue with audio processing or WebSocket communication.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.ServeClient.update_segments">
|
|
||||||
<span class="sig-name descname"><span class="pre">update_segments</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">segments</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">duration</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.ServeClient.update_segments" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Processes the segments from whisper. Appends all the segments to the list
|
|
||||||
except for the last segment assuming that it is incomplete.</p>
|
|
||||||
<p>Updates the ongoing transcript with transcribed segments, including their start and end times.
|
|
||||||
Complete segments are appended to the transcript in chronological order. Incomplete segments
|
|
||||||
(assumed to be the last one) are processed to identify repeated content. If the same incomplete
|
|
||||||
segment is seen multiple times, it updates the offset and appends the segment to the transcript.
|
|
||||||
A threshold is used to detect repeated content and ensure it is only included once in the transcript.
|
|
||||||
The timestamp offset is updated based on the duration of processed segments. The method returns the
|
|
||||||
last processed segment, allowing it to be sent to the client for real-time updates.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Args:</dt><dd><p>segments(dict) : dictionary of segments as returned by whisper
|
|
||||||
duration(float): duration of the current chunk</p>
|
|
||||||
</dd>
|
|
||||||
<dt>Returns:</dt><dd><dl class="simple">
|
|
||||||
<dt>dict or None: The last processed segment with its start time, end time, and transcribed text.</dt><dd><p>Returns None if there are no valid segments to process.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py class">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer">
|
|
||||||
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">whisper_live.server.</span></span><span class="sig-name descname"><span class="pre">TranscriptionServer</span></span><a class="headerlink" href="#whisper_live.server.TranscriptionServer" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Represents a transcription server that handles incoming audio from clients.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Attributes:</dt><dd><p>RATE (int): The audio sampling rate (constant) set to 16000.
|
|
||||||
vad_model (torch.Module): The voice activity detection model.
|
|
||||||
vad_threshold (float): The voice activity detection threshold.
|
|
||||||
clients (dict): A dictionary to store connected clients.
|
|
||||||
websockets (dict): A dictionary to store WebSocket connections.
|
|
||||||
clients_start_time (dict): A dictionary to track client start times.
|
|
||||||
max_clients (int): Maximum allowed connected clients.
|
|
||||||
max_connection_time (int): Maximum allowed connection time in seconds.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer.get_wait_time">
|
|
||||||
<span class="sig-name descname"><span class="pre">get_wait_time</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.TranscriptionServer.get_wait_time" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Calculate and return the estimated wait time for clients.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Returns:</dt><dd><p>float: The estimated wait time in minutes.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer.recv_audio">
|
|
||||||
<span class="sig-name descname"><span class="pre">recv_audio</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">websocket</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.TranscriptionServer.recv_audio" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Receive audio chunks from a client in an infinite loop.</p>
|
|
||||||
<p>Continuously receives audio frames from a connected client
|
|
||||||
over a WebSocket connection. It processes the audio frames using a
|
|
||||||
voice activity detection (VAD) model to determine if they contain speech
|
|
||||||
or not. If the audio frame contains speech, it is added to the client’s
|
|
||||||
audio data for ASR.
|
|
||||||
If the maximum number of clients is reached, the method sends a
|
|
||||||
“WAIT” status to the client, indicating that they should wait
|
|
||||||
until a slot is available.
|
|
||||||
If a client’s connection exceeds the maximum allowed time, it will
|
|
||||||
be disconnected, and the client’s resources will be cleaned up.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Args:</dt><dd><p>websocket (WebSocket): The WebSocket connection for the client.</p>
|
|
||||||
</dd>
|
|
||||||
<dt>Raises:</dt><dd><p>Exception: If there is an error during the audio frame processing.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
<dl class="py method">
|
|
||||||
<dt class="sig sig-object py" id="whisper_live.server.TranscriptionServer.run">
|
|
||||||
<span class="sig-name descname"><span class="pre">run</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">host</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">9090</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#whisper_live.server.TranscriptionServer.run" title="Link to this definition">¶</a></dt>
|
|
||||||
<dd><p>Run the transcription server.</p>
|
|
||||||
<dl class="simple">
|
|
||||||
<dt>Args:</dt><dd><p>host (str): The host address to bind the server.
|
|
||||||
port (int): The port number to bind the server.</p>
|
|
||||||
</dd>
|
|
||||||
</dl>
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
</dd></dl>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
<section id="indices-and-tables">
|
|
||||||
<span id="module-whisper_live.client"></span><h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Link to this heading">¶</a></h1>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
|
|
||||||
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
|
|
||||||
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
|
|
||||||
</ul>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
||||||
<div class="sphinxsidebarwrapper">
|
|
||||||
<h1 class="logo"><a href="#">whisper_live</a></h1>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Navigation</h3>
|
|
||||||
|
|
||||||
<div class="relations">
|
|
||||||
<h3>Related Topics</h3>
|
|
||||||
<ul>
|
|
||||||
<li><a href="#">Documentation overview</a><ul>
|
|
||||||
</ul></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div id="searchbox" style="display: none" role="search">
|
|
||||||
<h3 id="searchlabel">Quick search</h3>
|
|
||||||
<div class="searchformwrapper">
|
|
||||||
<form class="search" action="search.html" method="get">
|
|
||||||
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
|
|
||||||
<input type="submit" value="Go" />
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>document.getElementById('searchbox').style.display = "block"</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="clearer"></div>
|
|
||||||
</div>
|
|
||||||
<div class="footer">
|
|
||||||
©2023, Collabora.
|
|
||||||
|
|
||||||
|
|
|
||||||
Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
|
|
||||||
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
|
|
||||||
|
|
||||||
|
|
|
||||||
<a href="_sources/index.rst.txt"
|
|
||||||
rel="nofollow">Page source</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
|
|
||||||
pushd %~dp0
|
|
||||||
|
|
||||||
REM Command file for Sphinx documentation
|
|
||||||
|
|
||||||
if "%SPHINXBUILD%" == "" (
|
|
||||||
set SPHINXBUILD=sphinx-build
|
|
||||||
)
|
|
||||||
set SOURCEDIR=source
|
|
||||||
set BUILDDIR=build
|
|
||||||
|
|
||||||
%SPHINXBUILD% >NUL 2>NUL
|
|
||||||
if errorlevel 9009 (
|
|
||||||
echo.
|
|
||||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
|
||||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
|
||||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
|
||||||
echo.may add the Sphinx directory to PATH.
|
|
||||||
echo.
|
|
||||||
echo.If you don't have Sphinx installed, grab it from
|
|
||||||
echo.https://www.sphinx-doc.org/
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
|
|
||||||
if "%1" == "" goto help
|
|
||||||
|
|
||||||
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
|
||||||
goto end
|
|
||||||
|
|
||||||
:help
|
|
||||||
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
|
|
||||||
|
|
||||||
:end
|
|
||||||
popd
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
# Configuration file for the Sphinx documentation builder.
|
|
||||||
#
|
|
||||||
# For the full list of built-in configuration values, see the documentation:
|
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
||||||
|
|
||||||
# -- Project information -----------------------------------------------------
|
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
|
||||||
|
|
||||||
project = 'whisper_live'
|
|
||||||
copyright = '2023, Collabora'
|
|
||||||
author = 'Collabora'
|
|
||||||
|
|
||||||
# -- General configuration ---------------------------------------------------
|
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
|
||||||
|
|
||||||
extensions = []
|
|
||||||
|
|
||||||
templates_path = ['_templates']
|
|
||||||
exclude_patterns = []
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output -------------------------------------------------
|
|
||||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
|
|
||||||
|
|
||||||
html_theme = 'alabaster'
|
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
extensions = [
|
|
||||||
'sphinx.ext.duration',
|
|
||||||
'sphinx.ext.doctest',
|
|
||||||
'sphinx.ext.autodoc',
|
|
||||||
]
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
.. whisper_live documentation master file, created by
|
|
||||||
sphinx-quickstart on Fri Sep 22 11:39:30 2023.
|
|
||||||
You can adapt this file completely to your liking, but it should at least
|
|
||||||
contain the root `toctree` directive.
|
|
||||||
|
|
||||||
Welcome to whisper_live's documentation!
|
|
||||||
========================================
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
|
|
||||||
.. automodule:: whisper_live.server
|
|
||||||
:members:
|
|
||||||
|
|
||||||
.. automodule:: whisper_live.client
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Indices and tables
|
|
||||||
==================
|
|
||||||
|
|
||||||
* :ref:`genindex`
|
|
||||||
* :ref:`modindex`
|
|
||||||
* :ref:`search`
|
|
||||||
Reference in New Issue
Block a user