V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
hanxiV2EX
V2EX  ›  分享创造

小爱音箱播放自定义音乐

  •  5
     
  •   hanxiV2EX ·
    hanxi · 2023-10-14 22:03:33 +08:00 via Android · 22106 次点击
    这是一个创建于 408 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/hanxi/xiaomusic

    刚提交初版,勉强能用,很多接口是用的 xiaogpt 项目。

    根据提示语执行接口,播放音乐支持本地音乐,本地没找到就会搜索下载到本地再播放。
    第 1 条附言  ·  300 天前
    版本更新

    1. 新增播放本地的 flac 格式文件;
    2. 新增控制面,方便手机上操控。

    第 2 条附言  ·  189 天前
    版本更新,支持在网页控制台里方便的设置必要参数。

    第 3 条附言  ·  166 天前
    新增播放列表功能
    第 4 条附言  ·  153 天前
    #版本更新

    v0.1.62 版本新增自定义网络歌单功能,可以添加电台和歌曲,不用下载歌曲到本地也能播放音乐,可以分享歌单和使用别人的歌单,具体详情见 https://github.com/hanxi/xiaomusic/issues/78

    第 5 条附言  ·  67 天前
    版本更新:

    - 新增了更好看的主题
    - 新增了微信小程序: XIAO 晓音
    119 条回复    2024-09-20 13:40:19 +08:00
    1  2  
    laylou
        1
    laylou  
       2023-10-14 22:32:28 +08:00
    如何安装?这些命令是在那些地方执行?
    在 Mac 上执行还是找一个在线的端口,在小米上面执行
    hanxiV2EX
        2
    hanxiV2EX  
    OP
       2023-10-14 22:40:34 +08:00 via Android
    @laylou 可以局域网找台 linux 机子运行,还没做好 docker 镜像。
    laylou
        3
    laylou  
       2023-10-14 22:59:33 +08:00
    算是劫持了小米的流量到 linux 机子上吗?
    hanxiV2EX
        4
    hanxiV2EX  
    OP
       2023-10-14 23:02:11 +08:00 via Android
    @laylou 原理是这个,不是劫持流量,是轮训对话记录,用外网的 vps 跑也行,可能速度会慢吧。

    https://github.com/yihong0618/gitblog/issues/258
    tyhunter
        5
    tyhunter  
       2023-10-15 01:29:10 +08:00   ❤️ 2
    666 要是能封装成 Docker 挂在 NAS 跑就好了
    hanxiV2EX
        6
    hanxiV2EX  
    OP
       2023-10-15 09:51:03 +08:00 via Android
    @tyhunter 安排
    hanxiV2EX
        7
    hanxiV2EX  
    OP
       2023-10-15 11:31:53 +08:00
    @tyhunter
    @laylou 已做好 docker 镜像,欢迎体验。
    laylou
        8
    laylou  
       2023-10-15 12:26:14 +08:00
    @hanxiV2EX 在 nas 上的 docker 里安装吗?然后轮训对话记录?小米音箱本身要做修改吗?
    hanxiV2EX
        9
    hanxiV2EX  
    OP
       2023-10-15 13:30:13 +08:00 via Android
    ShineyWang
        10
    ShineyWang  
       2023-10-15 18:17:29 +08:00 via Android
    一直有这样的需求
    想要用小爱直接播放我的 Nas 里面的音乐,可能是 webdav 或者 smb 的路径
    这样能做吗?
    zouzou0208
        11
    zouzou0208  
       2023-10-15 18:24:49 +08:00
    @ShineyWang 理论上都可以的。。。
    hanxiV2EX
        12
    hanxiV2EX  
    OP
       2023-10-15 18:54:35 +08:00 via Android
    @ShineyWang 现在只能是本地路径,你可以把路径挂载进去试试,有问题可以提 issue 吧。
    icySoda
        13
    icySoda  
       2023-10-16 08:28:10 +08:00 via iPhone
    请假一下,为什么要用轮询的方式呢?我看小爱音箱官方是支持开发第三方技能的,是有什么限制吗?
    icySoda
        14
    icySoda  
       2023-10-16 08:28:44 +08:00 via iPhone
    s/请假/请教
    hanxiV2EX
        15
    hanxiV2EX  
    OP
       2023-10-16 10:04:35 +08:00 via Android
    @icySoda 不是很清楚,估计需要申请开发者账号,做成服务号上架吧。
    join
        16
    join  
       2023-10-16 16:46:19 +08:00 via iPhone
    小爱音箱可以破解吗?我实在不相信国产的可联网设备。
    join
        17
    join  
       2023-10-16 17:12:12 +08:00
    @hanxiV2EX 不好意思, 没仔细看你说的原理。现在我大致明白了。这些看着还挺好玩的。
    我的笔记本就是 linux 的,但用做局域网“电脑”好像不太合适,需要 24 小时运行。楼主你用的是啥设备?软路由?
    另外小爱音箱买哪个比较好?
    join
        18
    join  
       2023-10-16 17:14:15 +08:00
    我还有个担心就是,我如果说英语不知道它能不能识别出来并发给 GPT ?
    hanxiV2EX
        19
    hanxiV2EX  
    OP
       2023-10-17 02:09:15 +08:00
    @join 一般的 NAS 都带了 docker 功能,适合运行这个东西。有软路由的话也可以跑在软路由上。英语不知道能不能识别,如果小爱同学可以识别英语的话,xiaogpt 那个工具就可以做到,原理只是拉起小爱同学的对话记录,对话记录米家 app 上也能看到的。
    JarvenI
        20
    JarvenI  
       2023-11-08 10:51:00 +08:00
    我试了一下,用的小爱音箱 pro ,播放音乐会在几分钟的延迟后播放,然后音乐播放时间只能播放 1 分钟左右,不是你这个项目的问题,是 api 的问题,我用 miservice 的那个 cli 命令播放音乐也是这样。
    hanxiV2EX
        21
    hanxiV2EX  
    OP
       2023-11-08 11:35:16 +08:00 via Android
    @JarvenI 是不是音乐文件太大了?
    JarvenI
        22
    JarvenI  
       2023-11-08 18:40:50 +08:00
    @hanxiV2EX 两分钟多点的一个文件,试了两个 mp3 文件都是这样,最小的一个是 8M 的,算大吗?
    hanxiV2EX
        23
    hanxiV2EX  
    OP
       2023-11-08 20:31:09 +08:00 via Android
    @JarvenI 那不大,mp3 的文件服务器在局域网吗?
    JarvenI
        24
    JarvenI  
       2023-11-08 22:25:40 +08:00
    @hanxiV2EX 对的,链接就是 192.168 开头的。
    hanxiV2EX
        25
    hanxiV2EX  
    OP
       2023-11-09 12:12:54 +08:00 via Android
    @JarvenI 可以去 miservice 提个 issue 问问,那边人比较多,比较活跃。
    JarvenI
        26
    JarvenI  
       2023-11-09 23:21:25 +08:00
    @hanxiV2EX 多谢
    deerpine
        27
    deerpine  
       300 天前 via Android
    学习了
    milala
        28
    milala  
       300 天前
    只能播放本地音乐吗
    弄几个和在线的音乐
    hanxiV2EX
        29
    hanxiV2EX  
    OP
       300 天前 via Android
    @milala 本地音乐不存在时会自动搜索下载再播放的,我试过播放故事都行。国内使用需要配置好代理才能下载歌曲,XIAOMUSIC_PROXY 用于配置代理,默认为空,yt-dlp 工具下载歌曲会用到。
    a8500830
        30
    a8500830  
       300 天前
    小爱都有了,小度也不远了吧
    hanxiV2EX
        31
    hanxiV2EX  
    OP
       300 天前 via Android
    @a8500830 我没有小度,如果有人帮忙写好操控接口的话我可以接入。
    xuanyuanaosheng
        32
    xuanyuanaosheng  
       299 天前
    嗯不错
    xianzheng
        33
    xianzheng  
       299 天前
    下载源是哪里,可以指定吗?
    hanxiV2EX
        34
    hanxiV2EX  
    OP
       299 天前 via Android
    @xianzheng 目前是用的 YouTube ,可以加个配置选择 BiliBiliSearch
    qweqqwe
        35
    qweqqwe  
       299 天前
    可以同时两个音箱一起播放吗?
    hanxiV2EX
        36
    hanxiV2EX  
    OP
       299 天前 via Android
    @qweqqwe 目前是不可以的,改改应该是可以实现的。
    hanxiV2EX
        37
    hanxiV2EX  
    OP
       298 天前
    @xianzheng 我测试了用 BiliBiliSearch ,但是有 bug ,等这个 bug 解决之后我再考虑支持换下载源吧。
    https://github.com/yt-dlp/yt-dlp/issues/5083
    huangmingyou
        38
    huangmingyou  
       297 天前
    学习了一圈,有几个疑问,获取对话记录是通过官方 api 还是别的方式,docker 播放的音频是通过音频线还是流媒体发给音箱,获取设备 did 是不是需要劫持流量抓包?
    hanxiV2EX
        39
    hanxiV2EX  
    OP
       297 天前 via Android
    @huangmingyou 获取对话记录是用的 http 接口,应该是爬的手机上请求对话记录的接口。docker 播放是提供 http url 地址给小爱播放。

    原理看这个文章就行

    https://github.com/yihong0618/gitblog/issues/258

    主要是这个库搞定的

    https://github.com/yihong0618/MiService
    kenvix
        40
    kenvix  
       297 天前
    @join #16 🤣不相信国产的可联网设备你买它干嘛?为什么不买 HomePod 和 Nest Audio ?
    hanxiV2EX
        41
    hanxiV2EX  
    OP
       297 天前 via Android
    @join xiaogpt 那个项目是支持发消息给 gpt 的。
    huangmingyou
        42
    huangmingyou  
       297 天前   ❤️ 1
    我用 docker 部署起来了,看起来是通过小米官方的 API 实现交互的。
    huangmingyou
        43
    huangmingyou  
       297 天前
    播放 music 的 ui 点了按钮,执行了,但是界面上没有反馈
    hanxiV2EX
        44
    hanxiV2EX  
    OP
       297 天前 via Android
    @huangmingyou 是缺少了点击反馈效果,后期优化一下。
    yautou
        45
    yautou  
       297 天前   ❤️ 1
    好项目,支持👍
    huangmingyou
        46
    huangmingyou  
       297 天前
    我用语音说“播放歌曲三年二班”, 直接播放云音乐的试听版本了呢?
    hanxiV2EX
        47
    hanxiV2EX  
    OP
       297 天前
    @huangmingyou 可以看看日志,估计是小米账号没登陆成功。另外 ui 我优化了一下,你可以更新看看效果。
    hanxiV2EX
        48
    hanxiV2EX  
    OP
       297 天前
    @xianzheng 最新版本已经支持了更换歌曲下载源,XIAOMUSIC_SEARCH 参数配置为 "bilisearch:" 搜索下载歌曲,但是 yt-dlp 项目有个 bug 还没解决,目前还下载不了。https://github.com/yt-dlp/yt-dlp/issues/5083 等这个 bug 解决了就能用 BiliBiliSearch 了
    huangmingyou
        49
    huangmingyou  
       296 天前
    @hanxiV2EX 已经更新到最新的 docker 版本, docker logs -f xiaomusic 的时候,能看到网页上操作的日志,但是没有看到去取语音历史的日志。还是说有别的日志文件? 我 docer exec -it xiaomusic /bin/bash 到容器里面,用 micli.py list 可以正确列出设备列表。说明账号是对的。 现在是网页可以正常播放。
    hanxiV2EX
        50
    hanxiV2EX  
    OP
       296 天前 via Android
    @huangmingyou 获取历史记录的代码是这个 https://github.com/hanxi/xiaomusic/blob/main/xiaomusic/xiaomusic.py#L169

    你可以加打印调试看看是哪里有问题,也可能是这个问题吧。
    https://github.com/yihong0618/MiService/issues/2

    用网页控制是不走语音历史记录的。
    hanxiV2EX
        51
    hanxiV2EX  
    OP
       296 天前 via Android
    @huangmingyou 这些打印可以打开注释,然后用 --verbose 参数打开调试日志看看。

    https://github.com/hanxi/xiaomusic/blob/main/xiaomusic/xiaomusic.py#L88
    hanxiV2EX
        52
    hanxiV2EX  
    OP
       296 天前
    @xianzheng 下载源搞定哔哩哔哩了,国内可以不用代理了。

    version: '3'

    services:
    xiaomusic:
    image: hanxi/xiaomusic
    container_name: xiaomusic
    restart: unless-stopped
    ports:
    - 8090:8090
    volumes:
    - ./music:/app/music
    environment:
    MI_USER: '小米账号'
    MI_PASS: '小米密码'
    MI_DID: 00000
    MI_HARDWARE: 'L07A'
    XIAOMUSIC_SEARCH: 'bilisearch:'
    XIAOMUSIC_HOSTNAME: '192.168.2.5'
    wongtk
        53
    wongtk  
       296 天前 via iPhone   ❤️ 1
    这个可以通过本地和搜索下载跳过试听了呀
    huangmingyou
        54
    huangmingyou  
       295 天前
    @hanxiV2EX docker 在哪里加这个 verbose,我对 python 不熟悉。
    hanxiV2EX
        55
    hanxiV2EX  
    OP
       295 天前 via Android
    @huangmingyou docker run -it -e MI_USER=<your-xiaomi-account> -e MI_PASS=<your-xiaomi-password> -e MI_DID=<your-xiaomi-speaker-mid> -e MI_HARDWARE='L07A' -e XIAOMUSIC_HOSTNAME=192.168.2.5 -e XIAOMUSIC_SEARCH='bilisearch:' -p 8090:8090 -v ./music:/app/music hanxi/xiaomusic:main --entrypoint '.venv/bin/python3 xiaomusic.py --verbose'

    你试试这样能不能行,docker 用前台模式启动,用 main 分支的镜像,然后修改 entrypoint 传参数进去。
    huangmingyou
        56
    huangmingyou  
       295 天前
    @hanxiV2EX 我调试了,拉列表的时候,disconnect,我用 curl 测试,发现 http 协议可以,https 协议卡住。
    hanxiV2EX
        57
    hanxiV2EX  
    OP
       295 天前 via Android
    huangmingyou
        58
    huangmingyou  
       295 天前
    @hanxiV2EX 不是,就是纯粹的 https 不能连,我在 docker 里面,用 curl https://www.baidu.com 就卡住,用 curl http:www.baidu.com 就正常。我测试用 ubuntu:22.04 的 docker 是可以 curl https 的。
    huangmingyou
        59
    huangmingyou  
       295 天前
    host 是可以 curl https 的,另外 docker 里面我看是有 ca-certificates 包的。
    hanxiV2EX
        60
    hanxiV2EX  
    OP
       295 天前 via Android
    @huangmingyou 那你这个应该是系统问题了,我的系统也是 ubuntu 2204 的
    huangmingyou
        61
    huangmingyou  
       294 天前
    用 hanxi/xiaomusic:latest 创建的容器里面 curl https://www.baidu.com 会卡住,在 ubuntu:22.04 创建的容器里面正常。
    huangmingyou
        62
    huangmingyou  
       294 天前
    容器 curl 回卡住,wgett 没问题,这可能是一个 bug . 我重新注册了账号,终于正常工作了。
    huangmingyou
        63
    huangmingyou  
       294 天前
    能否增加一个播放古诗词的功能。
    hanxiV2EX
        64
    hanxiV2EX  
    OP
       294 天前 via Android
    @huangmingyou 应该是已经支持的,你对小爱同学说'播放歌曲诗歌朗诵李白静夜思'试试?虽然有点奇怪,应该能搜到差不多对应的音频的。
    zgl263885
        65
    zgl263885  
       293 天前 via iPhone
    真的很棒!
    justincnn
        66
    justincnn  
       292 天前
    有可能用 apple music 的资源么?
    cucucun666
        67
    cucucun666  
       286 天前
    小爱音箱 L05C 设备无法正常播放音乐,已测试 micli 5-4 明天天气 0 能正常提示天气情况,可以正常发声。
    hanxiV2EX
        68
    hanxiV2EX  
    OP
       286 天前 via Android
    @cucucun666 试试用命令模式 --use_command 参数
    busy0769
        69
    busy0769  
       258 天前
    大佬,请教一下,如果家里有多个小爱音箱的话,要怎么使用您的项目?是给每个音箱建立一个 docker 吗?
    另外,可否加个选项,只搜索本地文件夹的音乐?
    hanxiV2EX
        70
    hanxiV2EX  
    OP
       258 天前 via Android
    @busy0769 目前只能是一个音箱一个 docker ,只搜索本地文件夹的话可以考虑加。
    wq2020wdm
        71
    wq2020wdm  
       240 天前 via Android
    我成功播放了本地音乐,但口令播放本地有点问题,想请教下:1. 因为我是自建了音乐库,所以是文件夹嵌套的,比如/Music/华语音乐/周杰伦/周杰伦-七里香/周杰伦-七里香.flac ,这样的嵌套是否支持搜索? 2. 我只映射了七里香专辑后,七里香歌曲的命名是 1.0.2 七里香.flac ,我口令是播放歌曲七里香,还是默认下载了,下载好了,后面再说播放歌曲七里香是直接本地了,请问下,这个歌曲命名有规范吗?
    wq2020wdm
        72
    wq2020wdm  
       240 天前 via Android
    试验了一下,文件夹嵌套没问题,但是搜索好像有点问题,歌曲叫周杰伦-七里香.flac ,我试验了播放歌曲七里香,还有播放歌曲周杰伦七里香,都会开始下载,这样,是只能重命名歌曲了吗
    hanxiV2EX
        73
    hanxiV2EX  
    OP
       240 天前 via Android
    @wq2020wdm 搜索目前用的是完全匹配,没有做模糊搜索。
    wq2020wdm
        74
    wq2020wdm  
       240 天前
    @hanxiV2EX 那请问下后续有没有可能支持模糊搜索哪?
    hanxiV2EX
        75
    hanxiV2EX  
    OP
       240 天前 via Android
    @wq2020wdm 还没想好怎么弄比较合适
    superhxl
        76
    superhxl  
       238 天前
    在树莓派 4B 上,安装好了。目前有两个问题:
    1 )搜索似乎有问题,下载下来的不是我要的歌,包括示例“播放歌曲周杰伦晴天”。用过 ytsearch 和 bilisearch ,都不行;
    2 )我访问不了操控面板,提示“拒绝访问”。
    superhxl
        77
    superhxl  
       238 天前
    @superhxl 补充:树莓派刷 openwrt ,在 openwrt docker 中安装的。
    hanxiV2EX
        78
    hanxiV2EX  
    OP
       238 天前 via Android
    @superhxl 拒绝访问是不是端口没映射出来?有没有日志排查一下?
    skschema
        79
    skschema  
       203 天前
    背景信息:使用群晖 docker 部署了 xiaomusic,小爱音箱外观型号是 MDZ - 25 - DA ,使用 micli mina 查寻型号为 S12 ,设置搜索为 bilibili 。

    当前正常:目前使用网页端操作可以下载、播放音乐,点击关机按钮可停止播放。大致类似 @wq2020wdm

    问题:
    1.使用网页端播放的音乐,使用语音指令暂停后不久会自动播放其它音乐,直到使用网页端关机按钮停止。
    2.已经使用网页端下载好某文件名音乐,使用语音指令“播放歌曲 XXXX”仍然播放试听。(多次测试和重启)是不是 xiaogpt 也需要单独部署?

    希望:1.语音指令或网页端能播放指定文件夹或指定列表的歌曲。
    hanxiV2EX
        80
    hanxiV2EX  
    OP
       203 天前 via Android
    @skschema 语音只有关机和停止播放,没有暂停。播放指定文件夹或者播放指定列表还没实现。网页端支持了模糊搜索本地音乐,你可以试试看。
    hanxiV2EX
        81
    hanxiV2EX  
    OP
       203 天前 via Android
    @skschema 语音播放不了的问题可能是 MI_HARDWARE 参数设置错了吧,你检查一下。拉取对话记录用的,填错会取不到对话记录。
    skschema
        82
    skschema  
       203 天前
    @hanxiV2EX 谢谢,获取到正确的型号,目前可以用语音指令了。

    奇怪的是,重新使用 micli mina 获取的内容和上次不一样,之前获取到所有账号下的设备内容,这次只获取到音箱信息。而且设备型号也和上次不一样,本次获取为 S12A 。
    hangbale
        83
    hangbale  
       166 天前
    可以加入播放 webdav 音乐的功能吗,家里小主机上部了个 alist ,歌都放网盘
    harryWebb
        84
    harryWebb  
       165 天前
    小爱音箱要是能搜 spotify 的音乐就够了,现在只能 qq 音乐和网易云太操蛋了,各种屏蔽音乐,本地的音乐一般人不会去挂着存
    hanxiV2EX
        85
    hanxiV2EX  
    OP
       165 天前 via Android
    @hangbale 你可以试试把 alist 的 webdav 挂载到本机系统试试
    fanersai
        86
    fanersai  
       164 天前
    天猫精灵有没有解法呢?
    Qiss
        87
    Qiss  
       164 天前
    有天猫精灵的版本么?
    hanxiV2EX
        88
    hanxiV2EX  
    OP
       164 天前 via Android
    @fanersai
    @Qiss 目前没有,需要天猫精灵有接口才行,没有设备研究。。。
    cirzear
        89
    cirzear  
       164 天前
    牛的,先马克,有时间玩玩
    sakisaki
        90
    sakisaki  
       163 天前 via Android
    求助,有个需求:定时播放自定义语音。例如 8:00 自动播放语音提醒“请不要忘记吃早餐。”。这个功能买哪个智能音箱可以实现?
    cue
        91
    cue  
       163 天前
    请问下是否支持小爱闹钟?
    hanxiV2EX
        92
    hanxiV2EX  
    OP
       163 天前   ❤️ 1
    @sakisaki 好像小爱同学原生支持这样设定闹钟的,闹钟到了会按自己设定的提示语说的。
    hanxiV2EX
        93
    hanxiV2EX  
    OP
       163 天前
    @cue 这个不影响小爱闹钟,只是小爱闹钟不能用这里的音乐。
    sakisaki
        94
    sakisaki  
       163 天前 via Android
    @hanxiV2EX 额,看来客服误导了我。客服说不支持我的需求。
    sakisaki
        95
    sakisaki  
       163 天前 via Android
    @hanxiV2EX 谢谢你的解答
    hanxiV2EX
        96
    hanxiV2EX  
    OP
       163 天前 via Android   ❤️ 1
    @sakisaki 我一般是这样说的:小爱同学八点提醒我请不要忘记吃早餐,到时间了它会复述一遍提醒语的。
    isAK47
        97
    isAK47  
       153 天前
    咨询一个问题,宿主机本身是路由器,空间不大,是否可以设置下载空间的容量上限,超过容量就自动清理?
    hanxiV2EX
        98
    hanxiV2EX  
    OP
       153 天前 via Android
    @isAK47 可以写个脚本定时清理,不过最新版本支持了网络歌单功能,可以不用下载歌曲到本地,只要维护好歌单就行。
    isAK47
        99
    isAK47  
       152 天前
    @hanxiV2EX 歌单功能不错,不过不能覆盖部分场景,比如我家这个小孩子用的比较多。定时清理脚本是在容器内执行吗?顺便问下目前语音找内容还不能模糊匹配是吧
    hanxiV2EX
        100
    hanxiV2EX  
    OP
       152 天前 via Android
    @isAK47 还不支持模糊匹配,有支持的计划了,定时清理在外面和里面都行的,目录只要映射好就行。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4372 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.