mycroft-core 默认情况下,Picroft上的play_*系统设置硬编码为设备0,0,

polkgigr  于 4个月前  发布在  其他
关注(0)|答案(7)|浏览(107)

简介

在Linux系统上使用mycroft已经有一段时间了,现在想切换到树莓派上的低功耗picroft。安装过程相当顺利,但是我遇到了一些“尴尬”的默认设置,导致我花了几个小时才弄清楚所有的音频配置组件。
希望通过这里解决主要问题...并提出改进/修复的建议(如果核心团队同意这些建议,我很乐意处理PR)。

设置

  • 我正在运行一个树莓派3B+
  • 使用的Mycroft软件版本是20 oh 2, release 4
  • 使用的唤醒词是“Hey Mycroft”
  • 使用的音频:Bus 001 Device 004: ID 08a8:0016 Andrea Electronics(这个功能是正常的!我已经提交了支持该硬件的PR:add Andrea Electronics USB SUMA documentation#178)- 这个带有USB麦克风和扬声器适配器(在Linux系统上表现很好)- 我的目标是在树莓派上使用它

重现步骤

  1. 安装了picroft!(https://mycroft-ai.gitbook.io/docs/using-mycroft-ai/get-mycroft/picroft),等等
  2. 一开始,由于我是通过HDMI连接的,所以默认的声音是从电视里出来的。
  3. 在移除了HDMI后,我连接了我的USB设备,并执行了向导。
  4. 麦克风立刻就能用了,但输出/扬声器不起作用。
  5. 然后我把扬声器移动到了内置的3.5mm插孔,这样就可以用了(但天哪,声音太小了)
  6. 调试时间:https://mycroft-ai.gitbook.io/docs/using-mycroft-ai/troubleshooting/audio-troubleshooting
  7. 走过了所有这些步骤,得出结论:系统是可以用的(我可以通过内置的3.5mm或USB适配器播放声音,根据需要更改脉冲的默认设置)- 但是我的croft输出接收器就是不工作!哎呀,我们只有listener.device_name这样的配置不是很奇怪吗?- 它最初是空的,尝试了pulsedefault都不行......
  8. 最后我找到了/etc/mycroft/mycroft.conf,然后做了一些互联网研究......唉!这里的系统配置覆盖了默认设置......完全破坏了音频故障排除文档。回放命令是硬编码到设备0的!;/
(.venv) pi@picroft:~ $ cat /etc/mycroft/mycroft.conf
{
   "play_wav_cmdline": "aplay -Dhw:0,0 %1",
   "play_mp3_cmdline": "mpg123 -a hw:0,0 %1",

^^这就是罪魁祸首;在删除了那个硬编码的、或者将其设置为正确的硬编码值之后,重启树莓派后,一切都正常了!

请尽可能具体地描述预期条件以及与预期条件的偏差。

当用户第一次安装并遵循音频故障排除流程,通过工作流和隔离音频问题的步骤时,他们应该能够得出“不支持的硬件”与“支持的硬件”之间的结论,并仅通过该文档(或至少在我的知识范围内的mycroft ...特定于树莓派硬件的东西是额外的好处)实现一个正常工作的mycroft安装。

以下是相关的配置:

(.venv) pi@picroft:~ $ lsusb
Bus 001 Device 004: ID 08a8:0016 Andrea Electronics 
(snip)
(.venv) pi@picroft:~ $ pactl infofo
Server String: /run/user/1000/pulse/native
Library Protocol Version: 32
Server Protocol Version: 32
Is Local: yes
Client Index: 42
Tile Size: 65496
User Name: pi
Host Name: picroft
Server Name: pulseaudio
Server Version: 12.2
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.usb-Andrea_Electronics_Andrea_PureAudio_USB-SA_JUNE_2010-00.analog-stereo
Default Source: alsa_input.usb-Andrea_Electronics_Andrea_PureAudio_USB-SA_JUNE_2010-00.analog-stereo
Cookie: 7904:7177
(.venv) pi@picroft:~ $ aplay -ll
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 7/7
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: ALSA [bcm2835 ALSA], device 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: USBSA [Andrea PureAudio USB-SA], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

这可以工作(以及各种组合)

(.venv) pi@picroft:~ $ aplay -Dhw:1,0 ./mycroft-core/mycroft/res/snd/start_listening.wav
Playing WAVE './mycroft-core/mycroft/res/snd/start_listening.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo

(.venv) pi@picroft:~ $ aplay ./mycroft-core/mycroft/res/snd/start_listening.wav
Playing WAVE './mycroft-core/mycroft/res/snd/start_listening.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo

(当默认脉冲接收器设置为当然要连接到USB设备的设备时)

建议

  1. 在如何测试输出的文档中,我们应该使用 aplay ./mycroft-core/mycroft/res/snd/start_listening.wav 而不是“监听/录制麦克风,然后播放” (因为这会导致对麦克风工作的依赖)
  2. /etc/mycroft/mycroft.conf 中的默认值应该是:
(.venv) pi@picroft:~ $ cat /etc/mycroft/mycroft.conf
{
   "play_wav_cmdline": "aplay %1",
   "play_mp3_cmdline": "mpg123 %1",

,我认为我们不应该在mycroft系统配置级别上硬编码播放设备!(默认情况下不应该)- 让我们让它从默认设备播放出来,帮助用户了解如何配置脉冲的默认接收器/发送器(就像文档中已经做的那样)编辑:参见 MycroftAI/enclosure-picroft#132

  1. 我们应该在文档中说明如何覆盖系统默认设置(想象一个有多个用途的系统...也许mycroft的麦克风/扬声器应该不同于默认设置?)- 在这种情况下,我们应该提到:
  • (A) 在用户配置 listener.device_name 中设置 mycroft-config set listener.device_name <DEVICE>(如文档所述)
  • (B) 编辑系统配置回放命令(添加到文档中)- 或者-将来-在mycroft系统配置中添加一个新的播放设备配置?(我们可以提到那些回放命令可以指定设备的能力,但我认为在回放命令标志中硬编码ID会让人觉得不可靠,容易让用户出错)
ergxz8rk

ergxz8rk1#

您是正确的,play_*命令不再应该是picroft配置的一部分。它们曾经需要解决Debian Jessie中的pulse/alsa问题,因此它们被添加为系统级默认值(用户配置可以覆盖)。
无论如何,我认为Debian中的错误已经修复,配置可以被移除。也许在enclosure-picroft中打开一个单独的问题?

tkclm6bt

tkclm6bt2#

感谢forslund的建议,我在那边搜索问题并找到了:MycroftAI/enclosure-picroft#132,这涵盖了上述提案中的(2)个建议(也更新了主要描述)。

jfewjypa

jfewjypa3#

关于1,你认为使用audiotest命令添加仅输出的测试步骤是否有益?播放ding声音,它还可以扩展到尝试使用mimic创建一个句子并测试其是否有效。

jutyujz0

jutyujz04#

@forslund 听起来不错;想让我尝试一下吗?大致上,它只是
1.(A):添加 aplay ding
2.(B): mycroft-speak hi
这就是你的想法吗?

wgxvkvu9

wgxvkvu95#

是的,有一些输出文本,例如“在默认设备上播放音频”,“说出一个测试句子”

我不确定mycroft-speak是否可以100%可靠地使用,因为这需要mycroft(或至少是音频进程)正在运行。昨天我的想法是直接从系统路径或mycroft-core/mimic/...使用模仿可执行文件。

另一个选择是从audiotest启动TTS模块。

类似于:

from unittest.mock import Mock
from mycroft.tts import TTSFactory
    
    tts = TTSFactory.create()
    tts.init(Mock())
    tts.execute('Hi')

(完全未经测试的代码,所以我不是100%确定它是正确的)

编辑:
我个人认为这是一个好主意,但我现在只是一个社区成员,所以如果他们想要包含这个功能,团队中的某个人需要做出决定。

vm0i2vca

vm0i2vca6#

@krisgesling ; does the proposal sound good? - if so I'll get a PR in

jckbn6z7

jckbn6z77#

嘿,谢谢你提醒我这个问题。听起来不错!
关于这三个提议:

  1. 这将是文档的一个很好的更新,而且正如你一直在谈论的那样,如果将这个添加到现有的audiotest中,那就更好了,这样我们就可以指向一个测试录音、输出和mycroft语音的单一命令。
  2. 听起来这应该被移除,我们只需要好好测试它,以确保我们不会破坏现有的设置。
  3. 如果能对这个的文档有任何改进,我们将非常感激!

相关问题