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

小爱音箱播放自定义音乐

  •  1
     
  •   hanxiV2EX ·
    hanxi · 195 天前 via Android · 8159 次点击
    这是一个创建于 195 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://github.com/hanxi/xiaomusic

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

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

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

    78 条回复    2024-04-01 20:03:02 +08:00
    laylou
        1
    laylou  
       195 天前
    如何安装?这些命令是在那些地方执行?
    在 Mac 上执行还是找一个在线的端口,在小米上面执行
    hanxiV2EX
        2
    hanxiV2EX  
    OP
       195 天前 via Android
    @laylou 可以局域网找台 linux 机子运行,还没做好 docker 镜像。
    laylou
        3
    laylou  
       195 天前
    算是劫持了小米的流量到 linux 机子上吗?
    hanxiV2EX
        4
    hanxiV2EX  
    OP
       195 天前 via Android
    @laylou 原理是这个,不是劫持流量,是轮训对话记录,用外网的 vps 跑也行,可能速度会慢吧。

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

    原理看这个文章就行

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

    主要是这个库搞定的

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

    https://github.com/hanxi/xiaomusic/blob/main/xiaomusic/xiaomusic.py#L88
    hanxiV2EX
        52
    hanxiV2EX  
    OP
       84 天前
    @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  
       83 天前 via iPhone   ❤️ 1
    这个可以通过本地和搜索下载跳过试听了呀
    huangmingyou
        54
    huangmingyou  
       83 天前
    @hanxiV2EX docker 在哪里加这个 verbose,我对 python 不熟悉。
    hanxiV2EX
        55
    hanxiV2EX  
    OP
       83 天前 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  
       82 天前
    @hanxiV2EX 我调试了,拉列表的时候,disconnect,我用 curl 测试,发现 http 协议可以,https 协议卡住。
    hanxiV2EX
        57
    hanxiV2EX  
    OP
       82 天前 via Android
    huangmingyou
        58
    huangmingyou  
       82 天前
    @hanxiV2EX 不是,就是纯粹的 https 不能连,我在 docker 里面,用 curl https://www.baidu.com 就卡住,用 curl http:www.baidu.com 就正常。我测试用 ubuntu:22.04 的 docker 是可以 curl https 的。
    huangmingyou
        59
    huangmingyou  
       82 天前
    host 是可以 curl https 的,另外 docker 里面我看是有 ca-certificates 包的。
    hanxiV2EX
        60
    hanxiV2EX  
    OP
       82 天前 via Android
    @huangmingyou 那你这个应该是系统问题了,我的系统也是 ubuntu 2204 的
    huangmingyou
        61
    huangmingyou  
       82 天前
    用 hanxi/xiaomusic:latest 创建的容器里面 curl https://www.baidu.com 会卡住,在 ubuntu:22.04 创建的容器里面正常。
    huangmingyou
        62
    huangmingyou  
       81 天前
    容器 curl 回卡住,wgett 没问题,这可能是一个 bug . 我重新注册了账号,终于正常工作了。
    huangmingyou
        63
    huangmingyou  
       81 天前
    能否增加一个播放古诗词的功能。
    hanxiV2EX
        64
    hanxiV2EX  
    OP
       81 天前 via Android
    @huangmingyou 应该是已经支持的,你对小爱同学说'播放歌曲诗歌朗诵李白静夜思'试试?虽然有点奇怪,应该能搜到差不多对应的音频的。
    zgl263885
        65
    zgl263885  
       80 天前 via iPhone
    真的很棒!
    justincnn
        66
    justincnn  
       79 天前
    有可能用 apple music 的资源么?
    cucucun666
        67
    cucucun666  
       73 天前
    小爱音箱 L05C 设备无法正常播放音乐,已测试 micli 5-4 明天天气 0 能正常提示天气情况,可以正常发声。
    hanxiV2EX
        68
    hanxiV2EX  
    OP
       73 天前 via Android
    @cucucun666 试试用命令模式 --use_command 参数
    busy0769
        69
    busy0769  
       46 天前
    大佬,请教一下,如果家里有多个小爱音箱的话,要怎么使用您的项目?是给每个音箱建立一个 docker 吗?
    另外,可否加个选项,只搜索本地文件夹的音乐?
    hanxiV2EX
        70
    hanxiV2EX  
    OP
       45 天前 via Android
    @busy0769 目前只能是一个音箱一个 docker ,只搜索本地文件夹的话可以考虑加。
    wq2020wdm
        71
    wq2020wdm  
       28 天前 via Android
    我成功播放了本地音乐,但口令播放本地有点问题,想请教下:1. 因为我是自建了音乐库,所以是文件夹嵌套的,比如/Music/华语音乐/周杰伦/周杰伦-七里香/周杰伦-七里香.flac ,这样的嵌套是否支持搜索? 2. 我只映射了七里香专辑后,七里香歌曲的命名是 1.0.2 七里香.flac ,我口令是播放歌曲七里香,还是默认下载了,下载好了,后面再说播放歌曲七里香是直接本地了,请问下,这个歌曲命名有规范吗?
    wq2020wdm
        72
    wq2020wdm  
       28 天前 via Android
    试验了一下,文件夹嵌套没问题,但是搜索好像有点问题,歌曲叫周杰伦-七里香.flac ,我试验了播放歌曲七里香,还有播放歌曲周杰伦七里香,都会开始下载,这样,是只能重命名歌曲了吗
    hanxiV2EX
        73
    hanxiV2EX  
    OP
       27 天前 via Android
    @wq2020wdm 搜索目前用的是完全匹配,没有做模糊搜索。
    wq2020wdm
        74
    wq2020wdm  
       27 天前
    @hanxiV2EX 那请问下后续有没有可能支持模糊搜索哪?
    hanxiV2EX
        75
    hanxiV2EX  
    OP
       27 天前 via Android
    @wq2020wdm 还没想好怎么弄比较合适
    superhxl
        76
    superhxl  
       26 天前
    在树莓派 4B 上,安装好了。目前有两个问题:
    1 )搜索似乎有问题,下载下来的不是我要的歌,包括示例“播放歌曲周杰伦晴天”。用过 ytsearch 和 bilisearch ,都不行;
    2 )我访问不了操控面板,提示“拒绝访问”。
    superhxl
        77
    superhxl  
       26 天前
    @superhxl 补充:树莓派刷 openwrt ,在 openwrt docker 中安装的。
    hanxiV2EX
        78
    hanxiV2EX  
    OP
       25 天前 via Android
    @superhxl 拒绝访问是不是端口没映射出来?有没有日志排查一下?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2739 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 10:21 · PVG 18:21 · LAX 03:21 · JFK 06:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.