Hermes协议音频服务部分的开源实现
项目描述
Hermes Audio Server
Hermes音频服务器实现了由Snips定义的Hermes协议中的音频服务部分。
它旨在与Rhasspy一起使用,Rhasspy是一个离线、多语言语音助手工具包,可与Home Assistant一起工作,并且完全开源。
使用Hermes音频服务器,您可以将电脑(如Raspberry Pi)的麦克风和扬声器用作Rhasspy系统的远程音频输入和输出。
系统要求
Hermes 音频服务器需要 Python 3。它已在运行 Raspbian 9.8 的树莓派和运行 Ubuntu 19.04 的 x86_64 笔记本电脑上进行过测试。原则上,它应该是跨平台的。当您遇到问题或软件以“您的平台不受支持”的消息退出时,请在 GitHub 上打开一个问题。
安装
您可以通过以下方式安装 Hermes 音频服务器及其依赖项
sudo apt install portaudio19-dev
sudo pip3 install hermes-audio-server
注意:这将全局安装 Hermes 音频服务器。如果您想在 Python 虚拟环境中安装 Hermes 音频服务器,请删除 sudo
。
作为服务运行
您可以将 Hermes 音频服务器作为服务运行。
建议以系统用户身份运行它。创建此用户时不要提供登录 shell,也不要为用户创建主目录
sudo useradd -r -s /bin/false hermes-audio-server
此用户还需要访问您的音频设备
sudo usermod -a -G audio hermes-audio-server
配置
Hermes 音频服务器在 JSON 文件 /etc/hermes-audio-server.json
中进行配置,其格式如下
{
"site": "default",
"mqtt": {
"host": "localhost",
"port": 1883,
"authentication": {
"username": "foobar",
"password": "secretpassword"
},
"tls": {
"ca_certificates": "",
"client_certificate": "",
"client_key": ""
}
},
"vad": {
"mode": 0,
"silence": 2,
"status_messages": true
}
}
请注意,这假设您正在使用身份验证和 TLS 连接到您的 MQTT 代理,并且这启用了实验性的语音活动检测(见下文)。
配置文件中的所有键都是可选的。默认行为是连接到 localhost:1883
,不进行身份验证和 TLS,并使用 default
作为站点 ID,禁用语音活动检测。这种情况下的配置文件可能如下所示
{
"site": "default",
"mqtt": {
"host": "localhost",
"port": 1883
}
}
目前 Hermes 音频服务器使用系统的默认麦克风和扬声器。在未来的版本中,这将可配置。
语音活动检测
语音活动检测是 Hermes 音频服务器中的一个实验性功能,默认情况下是禁用的。它基于 py-webrtcvad,并尝试在无语音时抑制发送音频帧。请注意,这一尝试的成功高度依赖于您的麦克风、您的环境和您对 VAD 功能的配置。Hermes 音频服务器的语音活动检测不应被视为隐私功能,而是一个节省网络带宽的功能。如果您真的不想在网络中发送音频帧,除非发出语音命令,您应该在您的设备上运行唤醒词服务,然后才开始将音频流式传输到您的 Rhasspy 服务器,直到命令结束。
如果配置文件中没有指定 vad
键,则语音活动检测不会启用,并且所有记录的音频帧将连续在网络中流式传输。如果您不想这样,请指定 vad
键,以便仅在检测到语音活动时流式传输音频。您可以使用以下子键配置 VAD 功能
mode
:这应该是一个介于 0 和 3 之间的整数。0 是最不激进的非语音过滤,3 是最激进的。默认为 0。silence
:这定义了在多少秒的沉默(未检测到语音)之后,Hermes 音频记录器认为这是语音消息的结束。默认为 2。请确保此值高于或等于 在 Rhasspy 命令监听器的配置中 的min_sec
,否则命令监听器的音频流可能会太早终止。status_messages
:这是一个布尔值:true
或false
。指定 Hermes 音频记录器是否在检测到语音消息的开始或结束时在 MQTT 上发送消息。默认为false
。这在调试时很有用,当您想找到mode
和silence
的正确值时。
运行 Hermes 音频服务器
赫密士音频服务器由两个命令组成:赫密士音频播放器,它接收MQTT上的WAV文件并在扬声器上播放,以及赫密士音频录制器,它从麦克风录制WAV文件并将它们作为音频帧发送到MQTT。
您可以这样运行赫密士音频播放器:
hermes-audio-player
您可以这样运行赫密士音频录制器:
hermes-audio-recorder
您可以同时运行它们,或者如果您只想使用扬声器或麦克风,则只运行其中一个。
使用方法
两个命令都了解--help
选项,该选项为您提供有关识别选项的更多信息。例如
usage: hermes-audio-player [-h] [-v] [-V] [-c CONFIG]
hermes-audio-player is an audio server implementing the playback part of
the Hermes protocol.
optional arguments:
-h, --help show this help message and exit
-v, --verbose use verbose output
-V, --version print version information and exit
-c CONFIG, --config CONFIG
configuration file [default: /etc/hermes-audio-
server.json]
-d, --daemon run as daemon
已知问题/待办事项列表
- 您还不能选择音频设备:命令使用系统的默认麦克风和扬声器。
- 这个项目实际上是Hermes协议音频服务器部分的最小实现,旨在与Rhasspy一起使用。它不是snips-audio-server的直接替代品,因为它缺少WAV帧中的附加元数据。
变更日志
- 0.2.0 (2019-06-04):增加了日志记录和守护进程模式。
- 0.1.1 (2019-05-30):使音频播放器在接收到错误的WAV文件时更健壮。
- 0.1.0 (2019-05-16):增加了语音活动检测选项。
- 0.0.2 (2019-05-11):第一个公开版本。
其他有趣的项目
如果您觉得赫密士音频服务器很有趣,也可以看看以下项目:
- Rhasspy:一个离线、多语言语音助手工具包,与Home Assistant一起使用,并且是完全开源的。
- Snips Led Control:一种简单控制Snips兼容设备LED的方法,当检测到热词时,设备正在监听、说话、空闲等时,会有LED模式。
- Matrix-Voice-ESP32-MQTT-Audio-Streamer:Matrix Voice ESP32板的Hermes Audio Server的等效产品,包括LED控制和OTA更新。
- OpenSnips:与Snips语音平台相关的开源项目的集合。
许可
本项目由Koen Vervloesem提供,作为开源软件,MIT许可。有关更多信息,请参阅LICENSE文件。
项目详情
hermes-audio-server-0.2.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8f62772c407966af5f2198a098d23022532b6cbc7e10bb997163a84d11ff9a9d |
|
MD5 | 09ece810babd5d7fffa25ada2b00d05b |
|
BLAKE2b-256 | 909f331751fcb765710081f72a5a1f52a72bd4bee7496db544e71c2a82f0c265 |