hermes协议音频服务器部分的开源实现

hermes-audio-server的Python项目详细描述


爱马仕音频服务器

build status>>>>>>>>>code质量><<<<<<<<<<<<<<pypi软件包版本github license

hermes audio server实现了由snips定义的hermes协议的音频服务器部分。

它是一个离线的、多语言的语音助手工具包,可以与家庭助手一起使用,并且是完全开源的。

使用Hermes Audio Server,您可以使用计算机的麦克风和扬声器(如覆盆子PI)作为Rhasspy系统的远程音频输入和输出。

系统要求

hermes音频服务器需要python 3。它已经在运行Raspbian9.8的Raspberry Pi和Ubuntu19.04的x86_64笔记本上进行了测试,但原则上它应该是跨平台的。当您遇到问题或软件退出时出现不支持您的平台的消息,请在github上打开一个问题。

安装

您可以安装Hermes Audio Server及其依赖项,如下所示:

sudo apt install portaudio19-dev
sudo pip3 install hermes-audio-server

注意:这将在全球安装Hermes音频服务器。如果要在python虚拟环境中安装hermes音频服务器,请删除sudo

作为服务运行

您可以将Hermes Audio Server作为服务运行。

建议以系统用户身份运行。创建此用户时不需要登录shell,也不需要为用户创建主目录:

sudo useradd -r -s /bin/false hermes-audio-server

此用户还需要访问您的音频设备:

sudo usermod -a -G audio hermes-audio-server

配置

hermes audio server在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}}

注意,这假设您正在使用authe连接到MQTT代理的标识和TLS,并启用实验性语音活动检测(请参见下文)。

配置文件中的所有键都是可选的。默认行为是在没有身份验证和TLS的情况下连接localhost:1883,并使用default作为站点ID并禁用语音活动检测。这种情况下的配置文件如下:

{"site":"default","mqtt":{"host":"localhost","port":1883}}

目前Hermes音频服务器使用系统默认的麦克风和扬声器。在未来的版本中,这将是可配置的。

语音活动检测

语音活动检测是hermes音频服务器的一项实验功能,默认情况下是禁用的。它基于py webrtcvad,并试图在没有语音时抑制发送音频帧。请注意,此尝试的成功与否在很大程度上取决于您的麦克风、环境和VAD功能的配置。hermes音频服务器中的语音活动检测不应视为隐私功能,而应视为节省网络带宽的功能。如果您确实不想在网络上发送音频帧(除了发出语音命令时),则应在设备上运行唤醒字服务,然后才开始将音频流传输到Rhasspy服务器,直到命令结束。

如果未在配置文件中指定VAD键,则不会启用语音活动检测,所有录制的音频帧都将在网络上连续传输。如果不需要,请指定vad键以仅在检测到语音活动时播放音频。您可以使用以下子键配置VAD功能:

运行Hermes音频服务器

Hermes Audio Server由两个命令组成:Hermes Audio Player接收MQTT上的WAV文件并在扬声器上播放;Hermes Audio Recorder从麦克风记录WAV文件并在MQTT上作为音频帧发送。

您可以这样运行Hermes音频播放器:

hermes-audio-player

您可以这样运行Hermes录音机:

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

已知问题/待办事项列表

变更日志

  • 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):第一个公开版本。

其他有趣的项目

如果您觉得Hermes Audio Server有趣,也可以查看以下项目:

  • rhasspy:一个脱机、多语言的语音助手工具包,可与家庭助手一起使用,完全开源。
  • snips led控件:一种简单的方法来控制snips兼容设备的led,当检测到热词时,该设备正在听、说、空闲,…
  • matrix-voice-esp32-mqtt-audio-streamer:相当于Hermes Audio Server的矩阵语音ESP32板,包括LED控制和OTA更新。
  • opensnips:与snips语音平台相关的开源项目集合。

许可证

本项目由koen vervloesem提供,是一款具有麻省理工学院许可证的开源软件。有关详细信息,请参阅许可证文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在ArrayList<List>中选择我的列表中的哪一列用于排序我的ArrayList?   Java设计模式相当于Smalltalk的:   如何在Java中说stringA>stringB   用Python重写Java代码的Python方式   java如何在Mybatis for Postgresql db中使用like(非IN)编写查询?   java看不到如何禁用AlertDialog对话框   java正常转换,但照明仍然很奇怪?   为什么Java中存在检查和未检查异常   使用Flink的JavaSpringBootGradle项目不起作用   java我可以在最终hashmap中存储函数名以供执行吗?   java无法理解实际应用程序中的枚举   java Hibernate注释执行内部连接   java Jenkins Maven3错误,工件已启用   数组的java打印内容只返回[null,null,null,null]   java对同一实体的多个更新   java将日期从一个时区转换为本地时区   jface tableviewer中的java多行功能或换行文本功能   ArrayList是如何在Java中实现的?   如何将程序的输出像矩阵一样写入文件,Java   java EasyMock和返回泛型类的方法