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

标题: 小爱音箱播放NAS音乐 [打印本页]

作者: pikaq    时间: 2023-9-3 23:14
标题: 小爱音箱播放NAS音乐
本帖最后由 pikaq 于 2023-9-3 23:14 编辑

2020年6月39元入手的红米Play音箱,通过node-red-contrib-xiaoai-tts节点包装了两个文本指令:
小爱同学 <指令>:发送指令,例如“小爱同学 几点了”相当于语音问小爱几点了;
小爱音箱 <文本>:tts,例如“小爱音箱 几点了”小爱会发声“几点了”。
[attach]51250[/attach]
还有个很想实现的功能,就是通过小爱音箱播放NAS里的音乐,但在node-red-contrib-xiaoai-tts节点里并没有找到播放链接的功能,如此低配的音箱,蓝牙连手机播放的效果很差,也没有DLNA功能,所以一度以为这个功能无法实现。后来偶然在xiaoai-tts/src/player/playUrl.js at master · vv314/xiaoai-tts (github.com) 发现小爱音箱还有个player_play_url的api可以播放链接,于是包装成指令试了一下:
小爱 播放 <url>
[attach]51252[/attach]
竟然真有效,而且不仅能播放音频文件,连mp4这样的视频文件也能播放(当然只有声音),但是不支持目录,也不支持m3u8这样的播放列表文件。每个文件播放结束后发送“小爱 播放 <下一个url>”来播放下一个文件太麻烦了,于是包装了另一个指令:
小爱 播放目录 <目录|文件|url> [循环模式]
[attach]51254[/attach][attach]51255[/attach]
“播放目录”会执行一个脚本,脚本支持两个参数,第1个必传目录或文件或NAS链接,链接会被转换为NAS上的目录或文件;第2个可选参数循环模式,0表示播放目录不循环,1表示目录循环,2表示单曲循环。脚本会通过传入参数查找文件确定当前要播放的文件,然后调用ffmpeg获取文件播放时长,再发送指令“小爱 播放  <当前文件url>; <当前文件播放时长> 小爱 播放目录 <当前文件> <循环模式>”,作用是让小爱音箱播放NAS上的文件,并且设置一个文件时长后的定时任务,当前文件播放结束后自动重新运行该脚本,脚本会根据传入参数确定下一个要播放的文件,从而实现了让小爱音箱播放NAS上的目录或者单曲循环。
总的来说还是挺满意的,通过小爱播放NAS音乐,播放指定目录,从指定文件开始播放指定目录,单曲循环,定时播放等都实现了,这小爱音箱性价比太值了。


因为这个实现与我的指令、WebDAV、文件分享等功能结合在一起,难以剥离,所以具体的脚本和代码就不分享了,分享方法和思路,感兴趣的可以参考试试。



作者: Ari    时间: 2023-9-3 23:21
求指导怎么弄的控制呀
作者: oyuzai    时间: 2023-9-3 23:56
6 学习一下
作者: hxkjc    时间: 2023-9-4 08:32
学习一下
作者: silas3082    时间: 2023-9-4 09:29
感谢思路,想问一下node-red-contrib-xiaoai-tts节点和/vv314/xiaoai-tts/是一个吗?不是的话后者怎么在ha里边调用?
作者: DDDear    时间: 2023-9-4 11:46
我测试了调音量没问题,但是不能tts和playUrl。。。不知道哪里不对
作者: yuejr    时间: 2023-9-4 12:27
可以安装在NR里吗,NR里怎么播放URL的MP3?
作者: pikaq    时间: 2023-9-4 19:32
silas3082 发表于 2023-9-4 09:29
感谢思路,想问一下node-red-contrib-xiaoai-tts节点和/vv314/xiaoai-tts/是一个吗?不是的话后者怎么在ha ...

对node-red-contrib-xiaoai-tts节点稍微做了点修改,加了一个play_url功能
作者: pikaq    时间: 2023-9-4 19:34
DDDear 发表于 2023-9-4 11:46
我测试了调音量没问题,但是不能tts和playUrl。。。不知道哪里不对

tts是可以的 ,play_url需要自己改代码或者催原作者更新
作者: pikaq    时间: 2023-9-4 19:35
yuejr 发表于 2023-9-4 12:27
可以安装在NR里吗,NR里怎么播放URL的MP3?

对node-red-contrib-xiaoai-tts节点稍微做点修改,加一个play_url功能就可以了
作者: yuejr    时间: 2023-9-4 20:07
pikaq 发表于 2023-9-4 19:35
对node-red-contrib-xiaoai-tts节点稍微做点修改,加一个play_url功能就可以了

谢谢回复,请问怎么加play_url功能?
作者: lidicn    时间: 2023-9-4 20:36
Xiaomi Miot Auto 最后一次更新也支持播放url ,测试了下,也是播放不了m3u8  https://github.com/al-one/hass-xiaomi-miot/pull/1261
作者: silas3082    时间: 2023-9-4 22:11
lidicn 发表于 2023-9-4 20:36
Xiaomi Miot Auto 最后一次更新也支持播放url ,测试了下,也是播放不了m3u8  https://github.com/al-one/h ...

他说可以用来播放nas上的音乐,url地址怎么填?
作者: lidicn    时间: 2023-9-4 22:56
silas3082 发表于 2023-9-4 22:11
他说可以用来播放nas上的音乐,url地址怎么填?

文件存放在 \\192.168.2.20\config\www\bg.mp3

ha服务
  1. service: media_player.play_media
  2. data:
  3.   media_content_id: http://192.168.2.20:8123/local/bg.mp3
  4.   media_content_type: music
  5. target:
  6.   entity_id: media_player.xiaomi_lx06_a137_play_control
复制代码


作者: pikaq    时间: 2023-9-4 23:09
silas3082 发表于 2023-9-4 22:11
他说可以用来播放nas上的音乐,url地址怎么填?

很多方法都可以,楼上说的利用HA本身的静态文件功能是一个方法,但这要求将文件放到HA的www目录,也可以通过nginx对你的NAS文件提供url访问能力。
作者: silas3082    时间: 2023-9-4 23:16
lidicn 发表于 2023-9-4 22:56
文件存放在 \\192.168.2.20\config\www\bg.mp3

ha服务

确实可以了,但是nas里的音乐都放在www文件夹不实际,实际放在volume1/music文件夹中,能实现播放吗?
作者: silas3082    时间: 2023-9-4 23:21
pikaq 发表于 2023-9-4 23:09
很多方法都可以,楼上说的利用HA本身的静态文件功能是一个方法,但这要求将文件放到HA的www目录,也可以 ...

现在确实实现了播放url,我把音乐文件夹挂载到alist,通过alist的文件的链接可以播放,但是也是只能播放一个音乐。我想实现:对小爱说播放周杰伦的稻香,小爱回答没有版权,接着就从nas本地搜索,有的话就播放。还不知道怎么实现,alist中的地址通过request网页源码获取不到
作者: pikaq    时间: 2023-9-4 23:33
silas3082 发表于 2023-9-4 23:21
现在确实实现了播放url,我把音乐文件夹挂载到alist,通过alist的文件的链接可以播放,但是也是只能播放 ...

需求越复杂,实现就越复杂,面对的环境也更复杂,小爱音箱的api能力确实挺出色,但是基于这个要实现个性化的需求,要解决的问题也挺多的。
作者: lidicn    时间: 2023-9-5 11:03
silas3082 发表于 2023-9-4 23:21
现在确实实现了播放url,我把音乐文件夹挂载到alist,通过alist的文件的链接可以播放,但是也是只能播放 ...

这个类似你的想法https://bbs.hassbian.com/thread-22469-1-1.html
作者: yuejr    时间: 2023-9-5 12:14
lidicn 发表于 2023-9-4 22:56
文件存放在 \\192.168.2.20\config\www\bg.mp3

ha服务

这段代码放在HA里的configuration.yaml里,提示出错:配置无效
Integration error: target - Integration 'target' not found.
Integration error: service - Integration 'service' not found.
Integration error: data - Integration 'data' not found.
作者: silas3082    时间: 2023-9-5 15:35
lidicn 发表于 2023-9-5 11:03
这个类似你的想法https://bbs.hassbian.com/thread-22469-1-1.html

这个帖子我看了,需要支持dlna的小爱音箱才行,我的小爱没有dlna,所以在想办法
作者: silas3082    时间: 2023-9-5 15:38
大佬你的url部分NAS链接是什么样的?
作者: pikaq    时间: 2023-9-5 17:57
silas3082 发表于 2023-9-5 15:38
大佬你的url部分NAS链接是什么样的?

url我做的比较复杂,首先我用nginx让文件支持了webdav访问,nginx的webdav还能支持autoindex网页访问,webdav是设置了密码的,于是我就想在这个页面加一个文件免密分享功能,于是在旁边加了几个分享按钮,点击后会通过nodered生成带有效期的分享链接,喂给小爱的就是这个链接。建议你就部署个nginx,这样也能有url。
作者: silas3082    时间: 2023-9-5 19:41
pikaq 发表于 2023-9-5 17:57
url我做的比较复杂,首先我用nginx让文件支持了webdav访问,nginx的webdav还能支持autoindex网页访问,we ...

确实挺复杂,回头研究一下
作者: pikaq    时间: 2023-9-5 20:16
本帖最后由 pikaq 于 2023-9-5 20:17 编辑
silas3082 发表于 2023-9-5 19:41
确实挺复杂,回头研究一下

部署个nginx让文件支持url访问:
location / {
alias /data/nas/;
autoindex on;
}nginx可以用docker版。

作者: silas3082    时间: 2023-9-5 20:35
pikaq 发表于 2023-9-5 20:16
部署个nginx让文件支持url访问:
location / {
alias /data/nas/;

好的,谢谢
作者: sorrypqa    时间: 2023-9-6 07:15
楼主您好!能发一下侧边栏的OPENWRT和WEBDAV的仓库地址吗?
作者: yuejr    时间: 2023-9-6 10:17
本帖最后由 yuejr 于 2023-9-6 10:18 编辑
lidicn 发表于 2023-9-4 22:56
文件存放在 \\192.168.2.20\config\www\bg.mp3

ha服务
  1. service: media_player.play_media
  2. data:
  3.   media_content_id: [audio]http://192.168.2.20:8123/local/bg.mp3[/audio]
  4.   media_content_type: music
  5. target:
  6.   entity_id: media_player.xiaomi_lx06_a137_play_control
复制代码

你好,请问你的这段代码放在什么地方,功能在NR里怎么调用?
作者: longtor    时间: 2023-9-6 10:41

学习一下
作者: 416631663    时间: 2023-9-6 12:12
webdav挂载如何实现的呢?
作者: pikaq    时间: 2023-9-6 14:19
本帖最后由 pikaq 于 2023-9-6 14:22 编辑
sorrypqa 发表于 2023-9-6 07:15
楼主您好!能发一下侧边栏的OPENWRT和WEBDAV的仓库地址吗?

侧边栏可以用panel_iframe来做,效果差不多https://www.home-assistant.io/integrations/panel_iframe/
openwrt就是openwrt的页面,webdav是nginx的autoindex功能,用nginx开启autoindex on就有了,默认界面比较丑,你可以网上搜个好看的模板,关键词“nginx autoindex 美化”。
作者: pikaq    时间: 2023-9-6 14:23
416631663 发表于 2023-9-6 12:12
webdav挂载如何实现的呢?

很多方法可以实现,很多人用alist,我用nginx撸的
作者: 416631663    时间: 2023-9-6 14:25
pikaq 发表于 2023-9-6 14:23
很多方法可以实现,很多人用alist,我用nginx撸的

alist我已经用docker跑起来了,主要是如何集成到HA里? 感谢!
作者: lidicn    时间: 2023-9-6 21:38
yuejr 发表于 2023-9-6 10:17
你好,请问你的这段代码放在什么地方,功能在NR里怎么调用?

[attach]51341[/attach]ha 开发者工具 服务,在ha自动化里也是类似用法
node-red
call service节点
[attach]51343[/attach]

[attach]51342[/attach]





作者: yuejr    时间: 2023-9-7 09:57
本帖最后由 yuejr 于 2023-9-7 09:58 编辑
lidicn 发表于 2023-9-6 21:38
ha 开发者工具 服务,在ha自动化里也是类似用法
node-red
call service节点

谢谢详细回复,设置后有出错提示,是不是小爱音箱play的增强版不能用,还是设置需要调整?


作者: DX3906    时间: 2023-9-9 08:15
6,但是小爱音箱音质太差。我用的denon流媒体音响,通过airplay播放NAS音乐,可以接入HA,但不知道怎么播放列表内容。
作者: pikaq    时间: 2023-9-11 15:15
DX3906 发表于 2023-9-9 08:15
6,但是小爱音箱音质太差。我用的denon流媒体音响,通过airplay播放NAS音乐,可以接入HA,但不知道怎么播放 ...

写个脚本,计算当前播放文件,调用服务播放,并设置一个播放完自动重新执行的定时器。
作者: 猩猩点灯    时间: 2023-9-16 19:59
lidicn 发表于 2023-9-6 21:38
ha 开发者工具 服务,在ha自动化里也是类似用法
node-red
call service节点

小爱触屏音箱亲测不支持URL播放本地音乐
作者: xxlxmd    时间: 2023-9-23 17:03
我也发现 我的 play 和 play 增强版 调用都没反应 NR 里面  就显示一个 bject
_msgid: "57c20b7b015f44b6"
payload: 1695459745597
topic: ""
作者: 三尺寒    时间: 2024-4-12 16:29
调用ffmpeg获取文件播放时长是怎么做的,可以分享下流吗
作者: pikaq    时间: 2024-4-18 11:53
三尺寒 发表于 2024-4-12 16:29
调用ffmpeg获取文件播放时长是怎么做的,可以分享下流吗

调用ffmpeg命令:
  1. ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1  filepath
复制代码

作者: 大写的小强    时间: 2024-6-26 09:06
pikaq 发表于 2023-9-4 19:35
对node-red-contrib-xiaoai-tts节点稍微做点修改,加一个play_url功能就可以了

不太懂代码的小白怎么改,我家的是play和play增强版,想请问楼主能否有时间时出个详细的教程,谢谢!
作者: daem    时间: 2024-6-26 09:58
我是直接把歌传到网易云音乐的网盘,再把网盘的歌建歌单,网易云绑定小爱音箱,在小爱音箱app选音乐收藏,找到歌单播放,这样就可以听会员歌曲了
作者: sanmoking    时间: 2024-12-28 21:45
lidicn 发表于 2023-9-4 22:56
文件存放在 \\192.168.2.20\config\www\bg.mp3

ha服务

你好,我用这个代码,原本是想播报语音之前,来个小铃声提醒一下,它会一直单曲循环,就是铃声一直播放,怎么改成只播一次




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5