『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 2033|回复: 53

[智能音箱] Music Assistant语音命令随机播放nas歌曲(手拉手教程)

[复制链接]

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
发表于 2025-1-21 15:20:45 | 显示全部楼层 |阅读模式
本帖最后由 bugensui 于 2025-1-25 16:22 编辑

home assist官方语音助手利用回音壁音响和Music Assistant随机播放nas里的音乐和切歌等操作,享受音乐自由,智能音响普遍音质都不好,还是传统音响好点,很多智能音箱都是5-10w左右,效果很差的,虽然这些音响是可以听歌的,但是很多歌曲要收费,做不到听歌自由,不过这种智能音响也是有好处的,可以做到24小时待机,传统的音响功耗高,不可能一直开机待机,并且大的音响很少带智能功能,除了三星那些比较贵的音响。

需要的条件:
1,ha系统
2,Music Assistant的服务端和ha的Music Assistant集成
3,语音助手硬件(我的是ha的官方语音助手),也可以用其他语音助手代替,前提是获取命令的音频发给ha做stt服务,解析文本
4,连接ha的传统音响(我的是漫步者回音壁,80-100w左右,蓝牙连接ha,vlc负责出声)
5 所有歌曲放在nas上一个文件夹,然后挂载到ha
、一个所有歌曲的播放列表,如all.m3u, 这个需要自己制作,后面会教




可以实现的效果(支持这些命令,需要配合句子自动化实现):
1,播放音乐,备注:随机播放nas上的所有音乐,每次的顺序是不一样的。
2、播放上一首、播放下一首、播放暂停,备注:切歌和暂停。
3,播放{name}(的歌|的歌曲|的专辑),  备注:这个是播放某个歌手的歌曲。
4、播放歌曲{title} ,备注:这个是播放具体某一首歌曲。


这些命令比较简化,我是根据个人习惯指定的,Music Assistant官方的语音意图太复杂了。
为什么是随机播放,不是顺序播放,因为顺序播放每次的顺序都是一样,都听腻了,如果你有几千首歌,你随机播放,每次听到的可能都不一样,一般我们想听歌的时候,大部分场景,都是让音响随机播放音乐,或者说播放谁的歌曲,播放那首歌曲的场景其实不多,因为有的时候你也不一定准确的知道歌名,不过我的自动化也支持这种,但是目前播放那首歌曲,有个难题,因为中文博大精深,你用语音命令说出来的这几个字,ha里的stt转文本,可能识别成其他的文本,就造成搜索不到某首歌,要说的很清楚很准确,这个也是语音转文本的难题(比如我说,播放阿黛尔的歌,ha经常识别成:播放阿大爷的歌,就播放不了)


效果如下





一、制作所有歌曲的播放列表,m3u播放列表的格式如下,可以用代码遍历音乐文件夹(如 music)的音乐文件,然后生成,需要会点代码

#EXTM3U

#EXTINF:1,72242271191
72242271191.mp3

#EXTINF:2,Amani
Amani.mp3

#EXTINF:3,Aqua - My Oh My
Aqua - My Oh My.mp3

#EXTINF:4,BBX-Making Love (Club Radio Edit)
BBX-Making Love (Club Radio Edit).mp3

#EXTINF:5,beyond - 冷雨夜
beyond - 冷雨夜.mp3

ha界面效果如下:

微信图片_20250121162311.png


用代码遍历生成所有音乐的播放列表参考(假如音乐文件夹是music,音乐都放在里面,如果你用windows电脑,可以用windows的组件fso遍历所有文件名,然后输出all.m3u文件,生成好的文件放到music文件夹里就行,ma能读取到,代码是用windows的asp简单写的,你们也可以自己写,用asp需要在windows启用iis的服务,然后运行就可以了);

如果想新建某个歌手的播放列表,可以直接用Music Assistant加载项的ui界面里的关键词搜索,然后新建播放列表,加入就可以了,这个没有操作难度。
<%
set fso=server.createobject("scripting.filesystemobject")
set fl=fso.getfolder(server.mappath("music"))
on error resume next
list="#EXTM3U"&vbcrlf&vbcrlf
id=0
for each fn in fl.files
id=id+1
list=list&"#EXTINF:"&ID&","&Left(fn.name, Len(fn.name) - 4)&vbcrlf&fn.name&vbcrlf&vbcrlf
next
musiclist=server.mappath("all.m3u")
set fso=createobject("scripting.filesystemobject")
set f=fso.opentextfile(musiclist,2,true)
f.write ""&list&""
f.close
response.write "生成完毕"
%>


二、语音自动化意图命令
QQ20250121-163001.png


QQ20250121-163156.png


语音播放音乐的代码参考
你们可以根据自己的实际情况修改,当句子匹配到(播放音乐)就执行下面的操作,先要把ha里的播放器,用Music Assistant加载项,添加进去,然后在ha的Music Assistant集成里就有这个ma版的播放器了。有了这个ma版播放器,就可以执行music_assistant.play_media专属的播放媒体操作,先给该播放器修改成随机播放模式,然后执行music_assistant.play_media播放媒体操作,类型是播放列表,全部音乐的播放链接是这个:library://playlist/14,需要用到ha里的动作Music Assistant: 获取库项目,查询下所有播放列表的链接,然后就在反馈信息里,能看到(里面有部分代码是判断蓝牙音响有没有开机的,如果没有开机就要延迟执行播放音乐,自动化里第一个动作就是打开音响,如果大家不需要,可以删除)
if:
  - condition: template
    value_template: "{{ trigger.sentence=='播放音乐' }}"
then:
  - alias: 判断音响关机开机延迟操作
    if:
      - condition: state
        entity_id: media_player.man_bu_zhe_yin_xiang
        state: "off"
    then:
      - delay:
          hours: 0
          minutes: 0
          seconds: 1
      - set_conversation_response: 已经随机开始播放音乐
      - delay:
          hours: 0
          minutes: 0
          seconds: 2
    else:
      - set_conversation_response: 好的
  - action: media_player.shuffle_set
    metadata: {}
    data:
      shuffle: true
    target:
      entity_id: media_player.man_bu_zhe_yin_le_2
  - action: music_assistant.play_media
    target:
      entity_id: media_player.man_bu_zhe_yin_le_2
    data:
      media_id: library://playlist/14
      media_type: playlist
      enqueue: replace


三、一些不足和未完善的地方

1,有些音乐元数据作者名显示成繁体,比如大部分梁静茹的歌,元数据作者会正确显示成梁静茹。但是可能部分歌曲会显示成繁体歌手名:梁靜茹,这个时候,你通过语音助手说(播放梁静茹的歌),自动化播放艺术家的歌曲的时候,显示繁体作者名的歌曲就播放不了的,要么自己修改这首歌曲的元数据,更新成简体中文,要么自己新建常用歌手的播放列表,有播放列表的情况下优先播放播放列表,如果没有,就默认播放该艺术家的歌曲。

2,目前的自动化暂时不支持指定区域播放,比如:卫生间播放某某歌曲这种,因为我没有需求,就暂时没有规划。




四、语音命令播放音乐的完整自动化意图(仅供参考)

优化后的完整代码,请移步至:https://mp.weixin.qq.com/s/P0SaGG055VpAvKfI-oXi0g

评分

参与人数 3金钱 +38 收起 理由
sorrypqa + 16 高手,这是高手!
隔壁的王叔叔 + 12 感谢楼主分享!
25989406 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

27

主题

1365

帖子

6164

积分

元老级技术达人

积分
6164
金钱
4774
HASS币
100
发表于 2025-1-21 16:02:22 | 显示全部楼层
等更新,关注
1.随机播放,music 随机播放功能不友好,按播放列表播放每次都是顺序。
2.播放意图如何实现
  播放{name}(的歌|的歌曲|的专辑),  备注:这个是播放某个歌手的歌曲。
  播放歌曲{title} ,备注:这个是播放具体某一首歌曲。
回复

使用道具 举报

1

主题

19

帖子

130

积分

注册会员

Rank: 2

积分
130
金钱
111
HASS币
0
发表于 2025-1-21 16:04:11 | 显示全部楼层
感谢大佬
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
 楼主| 发表于 2025-1-21 16:05:46 | 显示全部楼层
25989406 发表于 2025-1-21 16:02
等更新,关注
1.随机播放,music 随机播放功能不友好,按播放列表播放每次都是顺序。
2.播放意图如何实现

内容有点长,我想写的仔细简单点,要晚点
回复

使用道具 举报

55

主题

1441

帖子

6172

积分

论坛DIY达人

积分
6172
金钱
4731
HASS币
30
发表于 2025-1-21 22:25:37 | 显示全部楼层
我喜欢使用播放列表有随机乱序功能的播放器(这样每首歌都能播放到而且只放一次),而不喜欢随机播放功能(经常出现有些个经常出现,有些永远没播放过)
回复

使用道具 举报

16

主题

227

帖子

1219

积分

金牌会员

Rank: 6Rank: 6

积分
1219
金钱
992
HASS币
0
发表于 2025-1-21 22:54:16 | 显示全部楼层
sorrypqa 发表于 2025-1-21 22:25
我喜欢使用播放列表有随机乱序功能的播放器(这样每首歌都能播放到而且只放一次),而不喜欢随机播放功能( ...

MA默认带一个500首随机列表,每次都是一样的么?
回复

使用道具 举报

26

主题

120

帖子

675

积分

高级会员

Rank: 4

积分
675
金钱
555
HASS币
0
发表于 2025-1-21 23:42:39 | 显示全部楼层
本帖最后由 wjh2972406 于 2025-1-21 23:52 编辑

额,有点复杂,我直接用VLC插件,然后用哈曼卡顿的智能音响播放HA主机里的歌曲。哈曼和JBL有专门的谷歌音响或是亚马逊ALEXA音响,音质很好,HA有官方google home和亚马逊alexa集成,省事。不过要先把歌曲导入HA主机里,我的HA装载在X86小主机,硬盘有500G.
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
 楼主| 发表于 2025-1-22 00:03:13 | 显示全部楼层
sorrypqa 发表于 2025-1-21 22:25
我喜欢使用播放列表有随机乱序功能的播放器(这样每首歌都能播放到而且只放一次),而不喜欢随机播放功能( ...

随机乱序功能和随机播放有什么区别,ha里有你说的这个概念吗,ha的动作里好像没有
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
 楼主| 发表于 2025-1-22 00:06:25 | 显示全部楼层
duanyudan123 发表于 2025-1-21 22:54
MA默认带一个500首随机列表,每次都是一样的么?

确实有500首的随机列表,这个我到没有研究过,我之前一直以为这个500首歌曲是不变的,难道是经常变化的?如果经常变化,那也可以调用播放器播放这个列表,我在ma界面里新建了很多歌手的列表,以后直接说歌手名字就行,比如播放林俊杰的歌曲,他就会播放林俊杰的播放列表
回复

使用道具 举报

164

主题

2644

帖子

8174

积分

元老级技术达人

积分
8174
金钱
5525
HASS币
30
 楼主| 发表于 2025-1-22 00:10:41 | 显示全部楼层
wjh2972406 发表于 2025-1-21 23:42
额,有点复杂,我直接用VLC插件,然后用哈曼卡顿的智能音响播放HA主机里的歌曲。哈曼和JBL有专门的谷歌音响 ...

哈曼卡顿的智能音响应该都要上千块,你这样是一首歌一首歌的放吧,你直接把歌曲放在x86主机上,你点一首,他就放一首吧,ha里是这样的,你没有播放列表吧,我这个确实很复杂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-3-4 22:57 , Processed in 0.154220 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表