小爱音箱控制手机和电视听歌的尝试

ops/2025/2/22 21:51:14/

在这里插入图片描述
最近买了小爱音箱pro,老婆让我扔了,吃灰多年的旧音箱。当然舍不得,比小爱还贵,刚好还有一台红米手机,能插音箱,为了让音箱更加灵活,买了个2元的蓝牙接收模块Type-c供电3.5接口。这就是本次尝试起因和硬件组成。

前文介绍了小爱音箱结合xiaomusic实现尘封的NAS音乐不自由
那个文章实现小爱同学声控xiaomusic 这就是本次尝试的软件基础。

本文最终目的是,小爱声控xiaomusic通过红米(其他TV,机顶盒等)播放歌曲输出到旧音箱(3.5借口或者蓝牙接收器)
本文的附加目标是阻止要改小爱电路板的冲动,本人也曾想用折腾电路板去取代软件工程的活。那样一不小心万劫不复,就算成功还有电磁干扰,就算无干扰线路是硬连接,还需要硬切换,跟未来感的声控对比太复古,就好比太空方碑上雕刻了一个火柴人。

说了这么多上使用说明:
如图,将本工程的网页在红米打开,点一次播放。因为启动阶段必须手点,接下来放在一边。小爱语音控制,切歌听歌。
后台框架:
采用flask做原型开发,后期转到rust。需要socketio-flask网页处于监听长联接状态。xiaomusic,在听到红米语音时,所有操作,转入3thplay。通过requests请求flask-url,传递指令内容,socketio,分发给web浏览器,进行播放控制。

02.13夜晚构思软件架构
02.14借助ima在deepseek实现前端界面,测试手机浏览器播放效果。
后端和集成可能需要一周时间,调试一周。有活干了,开工。

万万没想到这些只是尝试的开始吧。


http://www.ppmy.cn/ops/158533.html

相关文章

Attanger: Zotfile 插件在 Zotero7 的平替

ZotFile 是 Zotero6 里广泛使用的插件,但是作者弃坑了。zotero 官方最近在力推 zotero7,而 ZotFile 又不支持 7,这就让用户很难办(摊手)。 ZotFile 的 issue 里有相关的讨论,在 24 年下半年,大…

Java并发中的CAS机制:原理、应用与挑战(通俗易懂版)

上一期文章内容:Java并发中的乐观锁与悲观锁, 本期文章我们来讲一下Java并发中的CAS机制 一、从银行账户案例理解CAS CAS 是一种乐观锁机制,用于在不使用锁的情况下实现多线程对共享资源的并发访问。 它包含三个操作数:内存位置&a…

期权帮|股指期货保证金制度解析!

锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 股指期货保证金制度解析! 股指期货保证金制度是股指期货交易中的重要制度之一,它降低了投资者的持仓成本、提高了资金利用效率,但同时也带来…

Node.js 调用 DeepSeek API 完整指南

简介 本文将介绍如何使用 Node.js 调用 DeepSeek API,实现流式对话并保存对话记录。Node.js 版本使用现代异步编程方式实现,支持流式处理和错误处理。 1. 环境准备 1.1 系统要求 Node.js 14.0 或更高版本npm 包管理器 1.2 项目结构 deepseek-proje…

RocketMQ及和Kafka的区别

目录 1 从场景入手2 RocketMQ是什么?3 RocketMQ及和Kafka的区别3.1 在架构上做了减法3.1.1 简化协调节点3.1.2 简化分区3.1.3 底层存储3.1.3.1 Kafka底层存储3.1.3.1 RocketMQ底层存储 3.1.4 简化备份模型3.1.4.1 Kafka备份模型3.1.4.2 RocketMQ备份模型 3.1.5 Rock…

HCIA项目实践---ACL访问控制列表相关知识和配置过程

十 ACL访问控制列表 1 策略的概念 在网络连通之后, 把所有为了追求控制而实现的技术都叫策略 2 访问控制 在路由器流量流入或者流出的接口上,匹配流量,执行相应的动作。(流量流入或者流出的接口并不是一个固定的概念而是一个相对的…

PMP冲刺每日一题(8)

试题1 您已经被委派为某项目的项目经理,权职范围明确界定,限于产品总装线的设计及建设阶段。客户组的一位成员向项目部门主管要求在项目安装阶段完成一项小工作。项目部门主管请客户询问项目经理。对这一请求的答复应包括∶ A、经修订的资源计划 B、经项…

javafx HTMLEditor自定义字体

javafx HTMLEditor原有的字体选择有很多,选择的时候很难定位为常用的,所以需要自定义HTMLEditor的字体选择。 可以使用lookupAll查找到字体选择的ComboBox int i 0;limitedFonts FXCollections.observableArrayList("SimSun", "SimHei…