28 个版本 (10 个稳定版)
6.0.1 | 2023 年 10 月 3 日 |
---|---|
6.0.0 | 2023 年 6 月 29 日 |
5.2.0 | 2023 年 5 月 5 日 |
5.1.0 | 2023 年 4 月 20 日 |
0.1.0 |
|
#90 在 音频
每月 222 下载
170KB
3.5K SLoC
🗣️ aspeak
Azure TTS API 的简单文本到语音客户端. 😆
注意
从版本 6.0.0 开始,aspeak
默认使用 Azure TTS 的 RESTful API。如果您想使用 WebSocket API,可以在调用 aspeak
时指定 --mode websocket
或者在您的配置文件中的 auth
部分设置 mode = "websocket"
。
从版本 4.0.0 开始,aspeak
使用 rust 重新编写。旧版 Python 版本可在 python
分支找到。
您可以在 Azure 注册账户,然后根据需要选择支付计划(或坚持免费层)。免费层包括每月 0.5 百万字符的配额,免费提供。
请参阅 认证部分 了解如何为 aspeak 设置认证。
安装
从 GitHub 发布版下载(推荐大多数用户使用)
从这里下载最新发布版 here。
下载后,解压缩存档,您将得到一个可执行文件。
您可以将它放在您的 PATH
环境变量中的一个目录中,这样您就可以在任何地方运行它。
从 AUR 安装(推荐 Arch Linux 用户使用)
从 v4.1.0 版本开始,您可以从 AUR 安装 aspeak-bin
。
从 PyPI 安装
从 PyPI 安装将为您安装 aspeak
的 Python 绑定。有关使用 Python 绑定的更多信息,请参阅 库使用#Python。
pip install -U aspeak==6.0.0
目前预构建的wheel包只适用于x86_64架构。由于一些技术问题,我还没有将源代码上传到PyPI。因此,要从源码构建wheel,您需要遵循从源码安装中的说明。
由于许多Linux兼容性问题,Linux的wheel包在PyPI上不可用。(但您仍然可以从源码构建它们。)
从源码安装
仅限命令行界面
从源码安装aspeak
的最简单方法是使用cargo
cargo install aspeak -F binary
或者,您也可以从AUR安装aspeak
。
Python Wheel
要构建Python wheel,您首先需要安装maturin
pip install maturin
在克隆仓库并使用cd
进入目录后,您可以通过运行以下命令来构建wheel:
maturin build --release --strip -F python --bindings pyo3 --interpreter python --manifest-path Cargo.toml --out dist-pyo3
maturin build --release --strip --bindings bin -F binary --interpreter python --manifest-path Cargo.toml --out dist-bin
bash merge-wheel.bash
如果一切顺利,您将在dist
目录中获得wheel文件。
用法
运行aspeak help
以查看帮助信息。
运行aspeak help <subcommand>
以查看子命令的帮助信息。
身份验证
身份验证选项应放在任何子命令之前。
例如,要利用您的订阅密钥和一个由区域指定的官方端点,请运行以下命令
$ aspeak --region <YOUR_REGION> --key <YOUR_SUBSCRIPTION_KEY> text "Hello World"
如果您正在使用自定义端点,可以使用--endpoint
选项而不是--region
。
为了避免重复,您可以将身份验证详细信息存储在您的aspeak配置文件中。请阅读以下部分以获取更多详细信息。
从v5.2.0版本开始,您也可以通过以下环境变量设置身份验证密钥
ASPEAK_AUTH_KEY
用于使用订阅密钥进行身份验证ASPEAK_AUTH_TOKEN
用于使用授权令牌进行身份验证
从v4.3.0版本开始,您可以允许aspeak使用代理服务器连接到端点。目前,仅支持http和socks5代理(尚未支持https)。例如
$ aspeak --proxy http://your_proxy_server:port text "Hello World"
$ aspeak --proxy socks5://your_proxy_server:port text "Hello World"
aspeak也尊重HTTP_PROXY
(或http_proxy
)环境变量。
配置
aspeak v4引入了配置文件的概念。配置文件是一个配置文件,其中您可以指定命令行选项的默认值。
运行以下命令以创建默认配置文件:
$ aspeak config init
要编辑配置文件,运行
$ aspeak config edit
如果您在运行上述命令时遇到问题,您可以手动编辑配置文件
首先通过运行以下命令获取配置文件的路径:
$ aspeak config where
然后使用您喜欢的文本编辑器编辑文件。
配置文件是一个TOML文件。默认配置文件如下所示
请检查配置文件中的注释以获取有关可用选项的更多信息。
# Profile for aspeak
# GitHub: https://github.com/kxxt/aspeak
# Output verbosity
# 0 - Default
# 1 - Verbose
# The following output verbosity levels are only supported on debug build
# 2 - Debug
# >=3 - Trace
verbosity = 0
#
# Authentication configuration
#
[auth]
# Endpoint for TTS
# endpoint = "wss://eastus.tts.speech.microsoft.com/cognitiveservices/websocket/v1"
# Alternatively, you can specify the region if you are using official endpoints
# region = "eastus"
# Synthesizer Mode, "rest" or "websocket"
# mode = "rest"
# Azure Subscription Key
# key = "YOUR_KEY"
# Authentication Token
# token = "Your Authentication Token"
# Extra http headers (for experts)
# headers = [["X-My-Header", "My-Value"], ["X-My-Header2", "My-Value2"]]
# Proxy
# proxy = "socks5://127.0.0.1:7890"
# Voice list API url
# voice_list_api = "Custom voice list API url"
#
# Configuration for text subcommand
#
[text]
# Voice to use. Note that it takes precedence over the locale
# voice = "en-US-JennyNeural"
# Locale to use
locale = "en-US"
# Rate
# rate = 0
# Pitch
# pitch = 0
# Role
# role = "Boy"
# Style, "general" by default
# style = "general"
# Style degree, a floating-point number between 0.1 and 2.0
# style_degree = 1.0
#
# Output Configuration
#
[output]
# Container Format, Only wav/mp3/ogg/webm is supported.
container = "wav"
# Audio Quality. Run `aspeak list-qualities` to see available qualities.
#
# If you choose a container format that does not support the quality level you specified here,
# we will automatically select the closest level for you.
quality = 0
# Audio Format(for experts). Run `aspeak list-formats` to see available formats.
# Note that it takes precedence over container and quality!
# format = "audio-16khz-128kbitrate-mono-mp3"
如果您想使用除默认配置文件之外的配置文件,可以使用--profile
参数
aspeak --profile <PATH_TO_A_PROFILE> text "Hello"
如果您想暂时禁用配置文件,可以使用--no-profile
参数
aspeak --no-profile --region eastus --key <YOUR_KEY> text "Hello"
音高和速度
rate
:语音的说话速度。- 如果您使用浮点值(例如
0.5
),该值将乘以100%并变为50.00%
。 - 您还可以使用以下值:
x-slow
、slow
、medium
、fast
、x-fast
、default
。 - 您还可以直接使用百分比值:
+10%
。 - 您还可以使用带后缀
f
的相对浮点值(例如,1.2f
)。- 根据 Azure 文档,
- 相对值,表示为默认值的乘数。
- 例如,
1f
的值会导致速率无变化。值为0.5f
的速率减半。值为3f
的速率增加三倍。
- 如果您使用浮点值(例如
pitch
:声音的音调。- 如果您使用浮点值(例如
-0.5
),则该值将乘以 100%,成为-50.00%
。 - 您还可以使用以下值:
x-low
、low
、medium
、high
、x-high
、default
。 - 您还可以直接使用百分比值:
+10%
。 - 您还可以使用相对值,例如
-2st
或+80Hz
。- 根据 Azure 文档,
- 相对值,表示为带有 "+" 或 "-" 的数字,后跟 "Hz" 或 "st",指定要更改音调的量。
- "st" 表示变化单位是半音,它是标准音阶上音的一半(半步)。
- 您还可以使用绝对值:例如
600Hz
。
- 如果您使用浮点值(例如
注意:不合理的过高/过低值将由 Azure 认知服务剪辑到合理的值。
示例
以下示例假设您已在您的配置文件中设置了身份验证。
对默认扬声器说“Hello, world!”。
$ aspeak text "Hello, world"
SSML 到语音
$ aspeak ssml << EOF
<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='en-US-JennyNeural'>Hello, world!</voice></speak>
EOF
列出所有可用的语音。
$ aspeak list-voices
列出所有可用的中文语音。
$ aspeak list-voices -l zh-CN
获取有关语音的信息。
$ aspeak list-voices -v en-US-SaraNeural
输出
Microsoft Server Speech Text to Speech Voice (en-US, SaraNeural)
Display name: Sara
Local name: Sara @ en-US
Locale: English (United States)
Gender: Female
ID: en-US-SaraNeural
Voice type: Neural
Status: GA
Sample rate: 48000Hz
Words per minute: 157
Styles: ["angry", "cheerful", "excited", "friendly", "hopeful", "sad", "shouting", "terrified", "unfriendly", "whispering"]
将合成语音保存到文件。
$ aspeak text "Hello, world" -o output.wav
如果您更喜欢 mp3/ogg/webm,可以使用 -c mp3
/-c ogg
/-c webm
选项。
$ aspeak text "Hello, world" -o output.mp3 -c mp3
$ aspeak text "Hello, world" -o output.ogg -c ogg
$ aspeak text "Hello, world" -o output.webm -c webm
列出所有可用质量级别
$ aspeak list-qualities
输出
Qualities for MP3:
3: audio-48khz-192kbitrate-mono-mp3
2: audio-48khz-96kbitrate-mono-mp3
-3: audio-16khz-64kbitrate-mono-mp3
1: audio-24khz-160kbitrate-mono-mp3
-2: audio-16khz-128kbitrate-mono-mp3
-4: audio-16khz-32kbitrate-mono-mp3
-1: audio-24khz-48kbitrate-mono-mp3
0: audio-24khz-96kbitrate-mono-mp3
Qualities for WAV:
-2: riff-8khz-16bit-mono-pcm
1: riff-24khz-16bit-mono-pcm
0: riff-24khz-16bit-mono-pcm
-1: riff-16khz-16bit-mono-pcm
Qualities for OGG:
0: ogg-24khz-16bit-mono-opus
-1: ogg-16khz-16bit-mono-opus
1: ogg-48khz-16bit-mono-opus
Qualities for WEBM:
0: webm-24khz-16bit-mono-opus
-1: webm-16khz-16bit-mono-opus
1: webm-24khz-16bit-24kbps-mono-opus
列出所有可用音频格式(仅限专家用户)
$ aspeak list-formats
输出
amr-wb-16000hz
audio-16khz-128kbitrate-mono-mp3
audio-16khz-16bit-32kbps-mono-opus
audio-16khz-32kbitrate-mono-mp3
audio-16khz-64kbitrate-mono-mp3
audio-24khz-160kbitrate-mono-mp3
audio-24khz-16bit-24kbps-mono-opus
audio-24khz-16bit-48kbps-mono-opus
audio-24khz-48kbitrate-mono-mp3
audio-24khz-96kbitrate-mono-mp3
audio-48khz-192kbitrate-mono-mp3
audio-48khz-96kbitrate-mono-mp3
ogg-16khz-16bit-mono-opus
ogg-24khz-16bit-mono-opus
ogg-48khz-16bit-mono-opus
raw-16khz-16bit-mono-pcm
raw-16khz-16bit-mono-truesilk
raw-22050hz-16bit-mono-pcm
raw-24khz-16bit-mono-pcm
raw-24khz-16bit-mono-truesilk
raw-44100hz-16bit-mono-pcm
raw-48khz-16bit-mono-pcm
raw-8khz-16bit-mono-pcm
raw-8khz-8bit-mono-alaw
raw-8khz-8bit-mono-mulaw
riff-16khz-16bit-mono-pcm
riff-22050hz-16bit-mono-pcm
riff-24khz-16bit-mono-pcm
riff-44100hz-16bit-mono-pcm
riff-48khz-16bit-mono-pcm
riff-8khz-16bit-mono-pcm
riff-8khz-8bit-mono-alaw
riff-8khz-8bit-mono-mulaw
webm-16khz-16bit-mono-opus
webm-24khz-16bit-24kbps-mono-opus
webm-24khz-16bit-mono-opus
增加/减少音频质量
# Less than default quality.
$ aspeak text "Hello, world" -o output.mp3 -c mp3 -q=-1
# Best quality for mp3
$ aspeak text "Hello, world" -o output.mp3 -c mp3 -q=3
从文件读取文本并朗读。
$ cat input.txt | aspeak text
或
$ aspeak text -f input.txt
使用自定义编码
$ aspeak text -f input.txt -e gbk
从 stdin 读取并朗读。
$ aspeak text
也许您更喜欢
$ aspeak text -l zh-CN << EOF
我能吞下玻璃而不伤身体。
EOF
朗读中文。
$ aspeak text "你好,世界!" -l zh-CN
使用自定义语音。
$ aspeak text "你好,世界!" -v zh-CN-YunjianNeural
自定义音调、速率和风格
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p 1.5 -r 0.5 -S sad
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=-10% -r=+5% -S cheerful
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=+40Hz -r=1.2f -S fearful
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=high -r=x-slow -S calm
$ aspeak text "你好,世界!" -v zh-CN-XiaoxiaoNeural -p=+1st -r=-7% -S lyrical
高级用法
使用自定义音频格式进行输出
注意:某些音频格式在输出到扬声器时不受支持。
$ aspeak text "Hello World" -F riff-48khz-16bit-mono-pcm -o high-quality.wav
库用法
Python
新版本的 aspeak
使用 Rust 编写,Python 绑定由 PyO3 提供。
以下是一个简单示例
from aspeak import SpeechService
service = SpeechService(region="eastus", key="YOUR_AZURE_SUBSCRIPTION_KEY")
service.speak_text("Hello, world")
首先,您需要创建一个 SpeechService
实例。
创建 SpeechService
实例时,您可以指定以下参数
audio_format
(位置参数):输出音频的音频格式。默认为AudioFormat.Riff24KHz16BitMonoPcm
。- 您可以通过提供容器格式和品质级别来获取音频格式:
AudioFormat("mp3", 2)
。
- 您可以通过提供容器格式和品质级别来获取音频格式:
endpoint
:语音服务的端点。region
:或者,您可以指定语音服务的区域,而不是输入无聊的端点URL。key
:语音服务的订阅密钥。token
:语音服务的认证令牌。如果您提供令牌,则忽略订阅密钥。headers
:语音服务的附加HTTP头部。mode
:选择要使用的合成器。可以是rest
或websocket
。- 在websocket模式下,合成器将在创建
SpeechService
实例时连接到端点。
- 在websocket模式下,合成器将在创建
之后,您可以调用speak_text()
来朗读文本,或调用speak_ssml()
来朗读SSML。或者您也可以调用synthesize_text()
或synthesize_ssml()
来获取音频数据。
对于synthesize_text()
和synthesize_ssml()
,如果您提供了output
,音频数据将被写入该文件,函数将返回None
。否则,函数将返回音频数据。
以下是speak_text()
和synthesize_text()
的常见选项:
locale
:声音的locale。默认为en-US
。voice
:声音名称。默认为en-US-JennyNeural
。rate
:声音的说话速度。它必须是一个字符串,符合本节中记录的要求:[音调和速度](#readme-pitch-and-rate)pitch
:声音的音调。它必须是一个字符串,符合本节中记录的要求:[音调和速度](#readme-pitch-and-rate)style
:声音的风格。- 您可以通过执行
aspeak -L -v <VOICE_ID>
来获取特定声音的可用风格列表。 - 默认值为
general
。
- 您可以通过执行
style_degree
:风格的程度。- 根据[Azure文档](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/speech-synthesis-markup?tabs=csharp#adjust-speaking-styles) ,风格程度指定了说话风格的程度。它是一个介于0.01和2之间的浮点数,包括2。
- 截至写作时,风格程度调整仅支持中文(普通话,简体)神经声音。
role
:声音的角色。- 根据Azure 文档,
role
指定了说话角色扮演。声音可以扮演不同的年龄和性别,但声音名称不会改变。 - 截至写作时,以下这些中文(普通话,简体)神经声音支持角色调整:
zh-CN-XiaomoNeural
,zh-CN-XiaoxuanNeural
,zh-CN-YunxiNeural
和zh-CN-YunyeNeural
。
- 根据Azure 文档,
Rust
将aspeak
添加到您的Cargo.toml
$ cargo add aspeak
然后按照aspeak
crate的文档进行操作。
有4个示例供快速参考
依赖关系
~7–44MB
~743K SLoC