RealtimeTTS
易于使用,低延迟的实时应用文本转语音库
关于项目
RealtimeTTS 是一款为实时应用设计的最先进的文本转语音 (TTS) 库。它以其快速将文本流转换为高质量音频输出且具有最小延迟而著称。
重要: ❗️ 安装 已更改以允许更多自定义。请使用
pip install realtimetts[all]
而不是pip install realtimetts
。更多 信息在这里。
提示: 查看 Linguflex,这是 RealtimeTTS 派生的原始项目。它让您通过讲话控制环境,是目前最强大和复杂的开源助理之一。
注意: 如果您遇到“General synthesis error: isin() received an invalid combination of arguments”错误,这是由于新的 transformers 库引入了与 Coqui TTS 的不兼容性(见 此处)。此问题在最新版本中不应出现,但如果出现,请降级到旧版 transformers 版本:
pip install transformers==4.38.2
。
https://github.com/KoljaB/RealtimeTTS/assets/7604638/87dcd9a5-3a4e-4f57-be45-837fc63237e7
主要特色
- 低延迟
- 几乎瞬时的文本转语音转换
- 兼容 LLM 输出
- 高质量音频
- 生成清晰且自然的语音
- 多引擎 TTS 支持
- 支持 OpenAI TTS、Elevenlabs、Azure Speech Services、Coqui TTS、gTTS 和 System TTS
- 多语言
- 强大且可靠:
- 使用回退机制确保连续操作
- 在发生中断时切换到替代引擎,保证关键和专业使用场景下的一致性能和可靠性
提示: 查看 RealtimeSTT,该库的输入对应部分,具有语音转文本功能。它们共同构成了一个强大的实时音频封装大语言模型。
常见问题解答
查看 FAQ 页面 以获取有关使用 RealtimeTTS 的许多问题的答案。
更新
最新版本:v0.4.5
查看 发布历史。
技术栈
此库使用了:
-
文本转语音引擎
- OpenAIEngine:OpenAI 的 TTS 系统提供了6种自然发音的声音。
- CoquiEngine:高质量的本地神经 TTS。
- AzureEngine:微软领先的 TTS 技术。每月免费500000字符。
- ElevenlabsEngine:提供最佳音质的语音。
- GTTSEngine:免费使用且无需设置本地 GPU。
- SystemEngine:本地引擎,便于快速设置。
-
句子边界检测
- NLTK Sentence Tokenizer:自然语言工具包的句子分词器,适用于简单的英文文本转语音任务或当优先考虑简易性时。
- Stanza Sentence Tokenizer:Stanza 的句子分词器,适用于处理多语言文本或需要更高准确性和性能时。
通过使用“行业标准”组件,RealtimeTTS 提供了可靠的高端技术基础,以开发先进的语音解决方案。
安装
注意: 不再推荐使用
pip install realtimetts
的基本安装,请使用pip install realtimetts[all]
。
RealtimeTTS 库提供了根据您的使用案例安装各种依赖项的选项。以下是根据需求安装 RealtimeTTS 的不同方式:
完全安装
要安装支持所有 TTS 引擎的 RealtimeTTS:
pip install -U realtimetts[all]
自定义安装
RealtimeTTS 允许通过最小库安装进行自定义安装。以下是可用的选项:
- all:安装支持所有引擎的完整版本。
- system:包括系统特定的 TTS 功能(例如,pyttsx3)。
- azure:添加对 Azure 认知服务语音的支持。
- elevenlabs:包含与 ElevenLabs API 的集成。
- openai:支持 OpenAI 语音服务。
- gtts:支持 Google 文本转语音。
- coqui:安装 Coqui TTS 引擎。
- minimal:仅安装基本要求,没有引擎(仅在您想开发自己的引擎时需要)
例如,如果您只想为本地神经 Coqui TTS 使用安装 RealtimeTTS,则应使用:
pip install realtimetts[coqui]
例如,如果您只想安装支持 Azure 认知服务语音、ElevenLabs 和 OpenAI 的 RealtimeTTS:
pip install realtimetts[azure,elevenlabs,openai]
虚拟环境安装
对于那些希望在虚拟环境中进行完全安装的人,请按照以下步骤操作:
python -m venv env_realtimetts
env_realtimetts\Scripts\activate.bat
python.exe -m pip install --upgrade pip
pip install -U realtimetts[all]
更多信息请参见 CUDA 安装。
引擎要求
RealtimeTTS 支持的不同引擎具有各自的要求。请确保根据所选引擎满足这些要求。
SystemEngine
SystemEngine
使用系统的内置 TTS 功能开箱即用。无需额外设置。
GTTSEngine
GTTSEngine
使用 Google 翻译的文本转语音 API 开箱即用。无需额外设置。
OpenAIEngine
要使用 OpenAIEngine
:
- 设置环境变量 OPENAI_API_KEY
- 安装 ffmpeg(见 CUDA 安装 第3点)
AzureEngine
要使用 AzureEngine
,您将需要:
- 微软 Azure 文本转语音 API 密钥(通过 AzureEngine 构造器参数 "speech_key" 提供,或在环境变量 AZURE_SPEECH_KEY 中)
- 微软 Azure 服务地区。
确保在初始化 AzureEngine
时已正确配置这些凭据。
ElevenlabsEngine
对于 ElevenlabsEngine
,您需要:
-
Elevenlabs API 密钥(通过 ElevenlabsEngine 构造器参数 "api_key" 提供,或在环境变量 ELEVENLABS_API_KEY 中)
-
系统中安装了
mpv
(用于流式传输 mpeg 音频,Elevenlabs 仅提供 mpeg)。🔹 安装
mpv
:-
macOS:
brew install mpv
-
Linux 和 Windows:请访问 mpv.io 获取安装说明。
-
CoquiEngine
提供高质量的本地神经 TTS 和语音克隆。
首先下载神经 TTS 模型。在大多数情况下,使用 GPU 合成可以快到足以实现实时需要大约 4-5 GB 的 VRAM。
- 要克隆语音,请将包含源语音的 wav 文件的文件名作为 "voice" 参数提交给 CoquiEngine 构造器
- 语音克隆效果最佳的文件是一个22050 Hz 单声道 16bit 的 WAV 文件,其中包含一个短的(大约5-30 秒)样本
在大多数系统上需要 GPU 支持运行以足够快的速度实现实时,否则您会遇到音频卡顿。
快速开始
这是一个基本的应用示例:
from RealtimeTTS import TextToAudioStream, SystemEngine, AzureEngine, ElevenlabsEngine
engine = SystemEngine() # 用您的 TTS 引擎替换
stream = TextToAudioStream(engine)
stream.feed("Hello world! How are you today?")
stream.play_async()
提供文本
您可以输入独立字符串:
stream.feed("Hello, this is a sentence.")
或者您可以输入生成器和字符迭代器以进行实时流:
def write(prompt: str):
for chunk in openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content" : prompt}],
stream=True
):
if (text_chunk := chunk["choices"][0]["delta"].get("content")) is not None:
yield text_chunk
text_stream = write("A three-sentence relaxing speech.")
stream.feed(text_stream)
char_iterator = iter("Streaming this character by character.")
stream.feed(char_iterator)
播放
异步播放:
stream.play_async()
while stream.is_playing():
time.sleep(0.1)
同步播放:
stream.play()
测试库
测试子目录包含一组脚本,帮助您评估和理解 RealtimeTTS 库的功能。
请注意,大多数测试仍依赖于旧版 OpenAI API (<1.0.0)。在 openai_1.0_test.py 中展示了如何使用新版 OpenAI API。
-
simple_test.py
- 描述:以“hello world”风格展示库的最简单用法。
-
complex_test.py
- 描述:全面展示库提供的大部分功能。
-
coqui_test.py
- 描述:本地 coqui TTS 引擎测试。
-
translator.py
- 依赖:运行
pip install openai realtimestt
。 - 描述:实时翻译成六种不同的语言。
- 依赖:运行
-
openai_voice_interface.py
- 依赖:运行
pip install openai realtimestt
。 - 描述:唤醒词激活和语音控制 OpenAI API 的用户界面。
- 依赖:运行
-
advanced_talk.py
- 依赖:运行
pip install openai keyboard realtimestt
。 - 描述:在开始 AI 对话之前选择 TTS 引擎和语音。
- 依赖:运行
-
minimalistic_talkbot.py
- 依赖:运行
pip install openai realtimestt
。 - 描述:20 行代码的基本聊天机器人。
- 依赖:运行
-
simple_llm_test.py
- 依赖:运行
pip install openai
。 - 描述:展示如何将库与大型语言模型 (LLMs) 集成的简单示例。
- 依赖:运行
-
test_callbacks.py
- 依赖:运行
pip install openai
。 - 描述:展示回调并让您检查实际应用环境中的延迟时间。
- 依赖:运行
暂停、恢复与停止
暂停音频流:
stream.pause()
恢复已暂停的流:
stream.resume()
立即停止流:
stream.stop()
要求解释
-
Python 版本:
- 要求:Python >= 3.9, < 3.13
- 原因:该库依赖于 GitHub 上的 "TTS" 库,该库要求 Python 版本介于这个范围内。
-
PyAudio:创建输出音频流
-
stream2sentence:将输入的文本流拆分为句子
-
pyttsx3:系统文本转语音转换引擎
-
pydub:用于转换音频块格式
-
azure-cognitiveservices-speech:Azure 文本转语音转换引擎
-
elevenlabs:Elevenlabs 文本转语音转换引擎
-
coqui-TTS:Coqui 的 XTTS 文本转语音库,用于高质量的本地神经 TTS
向 Idiap 研究所 致敬,感谢他们维护 coqui tts 的一个分支。
-
openai:用于与 OpenAI 的 TTS API 交互
-
gtts:Google 翻译的文本转语音转换
配置
TextToAudioStream
的初始化参数
当您初始化 TextToAudioStream
类时,您可以使用各种选项来自定义其行为。以下是可用的参数:
engine
(BaseEngine)
- 类型:BaseEngine
- 要求:是
- 描述:负责文本转音频合成的底层引擎。您必须提供
BaseEngine
或其子类的实例以启用音频合成。
on_text_stream_start
(callable)
- 类型:可调用函数
- 要求:否
- 描述:这是一个可选的回调函数,在文本流开始时触发。用于任何设置或日志记录。
on_text_stream_stop
(callable)
- 类型:可调用函数
- 要求:否
- 描述:这是一个可选的回调函数,在文本流结束时激活。您可以用它进行清理任务或日志记录。
on_audio_stream_start
(callable)
- 类型:可调用函数
- 要求:否
- 描述:这是一个可选的回调函数,在音频流开始时调用。用于 UI 更新或事件记录。
on_audio_stream_stop
(callable)
- 类型:可调用函数
- 要求:否
- 描述:这是一个可选的回调函数,在音频流停止时调用。适用于资源清理或后处理任务。
on_character
(callable)
- 类型:可调用函数
- 要求:否
- 描述:这是一个可选的回调函数,在处理单个字符时调用。
output_device_index
(int)
- 类型:整数
- 要求:否
- 默认值:无
- 描述:指定要使用的输出设备索引。无则使用默认设备。
tokenizer
(字符串)
- 类型:字符串
- 要求:否
- 默认值:nltk
- 描述:用于句子拆分的分词器(当前支持 "nltk" 和 "stanza")。
language
(string)
- 类型:字符串
- 要求:否
- 默认值:en
- 描述:用于句子拆分的语言。
muted
(bool)
- 类型:布尔值
- 要求:否
- 默认值:假
- 描述:全局静音参数。如果为真,则不会打开 pyAudio 流。禁用通过本地扬声器的音频播放(如果您想将音频合成为文件或处理音频块),并覆盖播放参数静音设置。
level
(int)
- 类型:整数
- 要求:否
- 默认值:
logging.WARNING
- 描述:设置内部日志记录器的日志级别。这可以是 Python 内置
logging
模块中的任何整数常量。
示例用法:
engine = YourEngine() # 用您的引擎替换
stream = TextToAudioStream(
engine=engine,
on_text_stream_start=my_text_start_func,
on_text_stream_stop=my_text_stop_func,
on_audio_stream_start=my_audio_start_func,
on_audio_stream_stop=my_audio_stop_func,
level=logging.INFO
)
方法
play
和 play_async
这些方法负责执行文本到音频的合成并播放音频流。不同之处在于 play
是阻塞函数,而 play_async
在单独的线程中运行,允许其他操作继续进行。
参数:
fast_sentence_fragment
(bool)
- 默认值:
True
- 描述:如果设置为
True
,方法将优先考虑速度,生成和播放句子片段更快。此选项适用于延迟很重要的应用。
fast_sentence_fragment_allsentences
(bool)
- 默认值:
False
- 描述:如果设置为
True
,将快速句子片段处理应用于所有句子,而不仅是第一个。
fast_sentence_fragment_allsentences_multiple
(bool)
- 默认值:
False
- 描述:如果设置为
True
,允许生成多个句子片段,而不仅仅是单个。
buffer_threshold_seconds
(float)
-
默认值:
0.0
-
描述:指定缓冲阈值的时间(秒),影响音频播放的平滑度和连续性。
- 工作原理:在合成新句子之前,系统会检查缓冲器中的音频材料是否超过
buffer_threshold_seconds
指定的时间。如果超过,它会从文本生成器中检索另一句子,假设它能够在剩余音频提供的时间窗口内获取并合成这个新句子。此过程允许文本到语音引擎拥有更多上下文进行更好的合成,提升用户体验。
较高的值确保有更多预缓冲音频,减少播放过程中出现静音或间断的可能性。如果您体验到中断,请考虑增加该值。
- 工作原理:在合成新句子之前,系统会检查缓冲器中的音频材料是否超过
minimum_sentence_length
(int)
- 默认值:
10
- 描述:设置将字符串视为要合成的句子的最小字符长度。此选项影响文本块的处理和播放。
minimum_first_fragment_length
(int)
- 默认值:
10
- **描述
muted
(bool)
- 默认值:
False
- 描述: 如果为 True,则禁用本地扬声器的音频播放。这在你希望合成文件或处理音频片段而不播放它们时非常有用。
sentence_fragment_delimiters
(str)
- 默认值:
".?!;:,\n…)]}。-"
- 描述: 一个被认为是句子分隔符的字符字符串。
force_first_fragment_after_words
(int)
- 默认值:
15
- 描述: 在第一个句子片段强制生成之前的单词数量。
CUDA安装
这些步骤推荐给那些需要更好性能并且拥有兼容NVIDIA GPU的人。
注意: 检查你的NVIDIA GPU是否支持CUDA,请访问官方CUDA GPUs列表。
要使用带有CUDA支持的torch,请按以下步骤操作:
注意: 较新的pytorch安装可能(未经证实)不再需要安装Toolkit(以及可能的cuDNN)。
-
安装NVIDIA CUDA工具包:
例如,要安装Toolkit 12.X,请- 访问NVIDIA CUDA下载页面。
- 选择你的操作系统、系统架构和操作系统版本。
- 下载并安装软件。
或者安装Toolkit 11.8请
- 访问NVIDIA CUDA工具包存档。
- 选择你的操作系统、系统架构和操作系统版本。
- 下载并安装软件。
-
安装NVIDIA cuDNN:
例如,要为CUDA 11.x安装cuDNN 8.7.0,请
- 访问NVIDIA cuDNN存档。
- 点击“下载cuDNN v8.7.0(2022年11月28日),适用于CUDA 11.x”。
- 下载并安装软件。
-
安装ffmpeg:
你可以从ffmpeg网站下载适用于你操作系统的安装程序。
或者使用包管理器:
-
在Ubuntu或Debian上:
sudo apt update && sudo apt install ffmpeg
-
在Arch Linux上:
sudo pacman -S ffmpeg
-
在MacOS上使用Homebrew (https://brew.sh/):
brew install ffmpeg
-
在Windows上使用Chocolatey (https://chocolatey.org/):
choco install ffmpeg
-
在Windows上使用Scoop (https://scoop.sh/):
scoop install ffmpeg
-
-
安装支持CUDA的PyTorch:
要升级PyTorch安装以启用带有CUDA支持的GPU,请根据你特定的CUDA版本按以下说明进行操作。这在你希望通过CUDA增强RealtimeSTT性能时非常有用。
-
对于CUDA 11.8:
要更新PyTorch和Torchaudio以支持CUDA 11.8,请使用以下命令:
pip install torch==2.3.1+cu118 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu118
-
对于CUDA 12.X:
要更新PyTorch和Torchaudio以支持CUDA 12.X,请执行以下操作:
pip install torch==2.3.1+cu121 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
将
2.3.1
替换为与系统和需求匹配的PyTorch版本。 -
-
解决兼容性问题的修复: 如果遇到库兼容性问题,请尝试将这些库设置为固定版本:
pip install networkx==2.8.8 pip install typing_extensions==4.8.0 pip install fsspec==2023.6.0 pip install imageio==2.31.6 pip install networkx==2.8.8 pip install numpy==1.24.3 pip install requests==2.31.0
💖 鸣谢
衷心感谢Coqui AI团队 - 特别是天才Eren Gölge - 首次向我们提供具有实时速度和可克隆声音的本地高质量合成!
感谢Pierre Nicolas Durette通过他的gtts python库,向我们提供了无需GPU的Google Translate免费tts使用。
贡献
随时欢迎贡献(例如,添加新引擎的PR)。
许可证信息
❗ 重要说明:
虽然这个库的源代码是开源的,但它所依赖的许多引擎的使用并不是:外部引擎提供商通常在其免费计划中限制商业使用。这意味着引擎可以用于非商业项目,但商业用途需要付费计划。
引擎许可证摘要:
CoquiEngine
- 许可证: 仅对非商业项目开放源代码。
- 商业使用: 需要付费计划。
- 详情: CoquiEngine License
ElevenlabsEngine
- 许可证: 仅对非商业项目开放源代码。
- 商业使用: 每个付费计划都可用。
- 详情: ElevenlabsEngine License
AzureEngine
- 许可证: 仅对非商业项目开放源代码。
- 商业使用: 从标准级别起可用。
- 详情: AzureEngine License
SystemEngine
- 许可证: Mozilla公共许可证2.0和GNU较低公共许可证(LGPL)第3版。
- 商业使用: 在此许可证下允许。
- 详情: SystemEngine License
GTTSEngine
- 许可证: MIT许可证
- 商业使用: 它在MIT许可证下,因此理论上是可能的。由于它利用了未记录的Google Translate语音功能,需要一些谨慎。
- 详情: GTTS MIT License
OpenAIEngine
- 许可证: 请阅读OpenAI使用条款
免责声明: 这是在撰写时理解的许可证摘要。这不是法律建议。如果计划在项目中使用不同的引擎,请自行阅读和尊重各个引擎提供商的许可证。
作者
Kolja Beigel
电子邮件: kolja.beigel@web.de
GitHub