简介
在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系统上表现很好)- 我的目标是在树莓派上使用它
重现步骤
- 安装了picroft!(https://mycroft-ai.gitbook.io/docs/using-mycroft-ai/get-mycroft/picroft),等等
- 一开始,由于我是通过HDMI连接的,所以默认的声音是从电视里出来的。
- 在移除了HDMI后,我连接了我的USB设备,并执行了向导。
- 麦克风立刻就能用了,但输出/扬声器不起作用。
- 然后我把扬声器移动到了内置的3.5mm插孔,这样就可以用了(但天哪,声音太小了)
- 调试时间:https://mycroft-ai.gitbook.io/docs/using-mycroft-ai/troubleshooting/audio-troubleshooting
- 走过了所有这些步骤,得出结论:系统是可以用的(我可以通过内置的3.5mm或USB适配器播放声音,根据需要更改脉冲的默认设置)- 但是我的croft输出接收器就是不工作!哎呀,我们只有
listener.device_name
这样的配置不是很奇怪吗?- 它最初是空的,尝试了pulse
和default
都不行...... - 最后我找到了
/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设备的设备时)
建议
- 在如何测试输出的文档中,我们应该使用
aplay ./mycroft-core/mycroft/res/snd/start_listening.wav
而不是“监听/录制麦克风,然后播放” (因为这会导致对麦克风工作的依赖) - 在
/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
- 我们应该在文档中说明如何覆盖系统默认设置(想象一个有多个用途的系统...也许mycroft的麦克风/扬声器应该不同于默认设置?)- 在这种情况下,我们应该提到:
- (A) 在用户配置
listener.device_name
中设置mycroft-config set listener.device_name <DEVICE>
(如文档所述) - (B) 编辑系统配置回放命令(添加到文档中)- 或者-将来-在mycroft系统配置中添加一个新的播放设备配置?(我们可以提到那些回放命令可以指定设备的能力,但我认为在回放命令标志中硬编码ID会让人觉得不可靠,容易让用户出错)
7条答案
按热度按时间ergxz8rk1#
您是正确的,play_*命令不再应该是picroft配置的一部分。它们曾经需要解决Debian Jessie中的pulse/alsa问题,因此它们被添加为系统级默认值(用户配置可以覆盖)。
无论如何,我认为Debian中的错误已经修复,配置可以被移除。也许在enclosure-picroft中打开一个单独的问题?
tkclm6bt2#
感谢forslund的建议,我在那边搜索问题并找到了:MycroftAI/enclosure-picroft#132,这涵盖了上述提案中的(2)个建议(也更新了主要描述)。
jfewjypa3#
关于1,你认为使用audiotest命令添加仅输出的测试步骤是否有益?播放ding声音,它还可以扩展到尝试使用mimic创建一个句子并测试其是否有效。
jutyujz04#
@forslund 听起来不错;想让我尝试一下吗?大致上,它只是
1.(A):添加
aplay ding
2.(B):
mycroft-speak hi
这就是你的想法吗?
wgxvkvu95#
是的,有一些输出文本,例如“在默认设备上播放音频”,“说出一个测试句子”
我不确定mycroft-speak是否可以100%可靠地使用,因为这需要mycroft(或至少是音频进程)正在运行。昨天我的想法是直接从系统路径或mycroft-core/mimic/...使用模仿可执行文件。
另一个选择是从audiotest启动TTS模块。
类似于:
(完全未经测试的代码,所以我不是100%确定它是正确的)
编辑:
我个人认为这是一个好主意,但我现在只是一个社区成员,所以如果他们想要包含这个功能,团队中的某个人需要做出决定。
vm0i2vca6#
@krisgesling ; does the proposal sound good? - if so I'll get a PR in
jckbn6z77#
嘿,谢谢你提醒我这个问题。听起来不错!
关于这三个提议: