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

在这里插入图片描述
最近买了小爱音箱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实现前端界面,测试手机浏览器播放效果。
后端和集成可能需要一周时间,调试一周。有活干了,开工。

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

2.16成果问题和解决 :

成果:

先上结论3thplay网页播放,播放列表可持续, 除了语音控制.其他任意终端可以web网页,操控小爱的时候同步歌曲消息,切换歌曲

问题和解决:

  1. xiaomusic docker 安装 pip python-socketio 以后无法import socketio,于是放弃了本容器集成.新建了容器运行正常.
sio = socketio.AsyncServer(async_mode='asgi',cors_allowed_origins='*'  # 允许所有跨域请求,生产环境应限制
)#创建FastAPI应用
app = FastAPI()#将Socket.IO挂载到FastAPI应用
socketio_app = socketio.ASGIApp(socketio_server=sio,other_asgi_app=app,socketio_path='/socket.io'
)
@app.post("/items/")
async def create_item(item: Item):result = {**item.dict()}if item.action=="play":await sio.emit('response',{"action":item.action,"args":item.args,"status":item.args},)else:	await sio.emit('response',{"action":item.action,"status":item.args})return result

wocketio地址 ws://192.168.1.10:58091
2. 在新容器其托管3thplay.html网页时候, 歌曲jurl处于跨域访问,被阻止,在容器 解决方式,在xiaomusic容器的/app/xiaomusic/static/, 放上3thplay.html.可以接收推送消息. 播放端设备打开http://192.168.1.10:58090/static/3thplay.html
3. 更改/app/xiaomusic/xiaomusic.py 中 async def _playmusic(self, name).在播放初始,触发消息发送

    async def thdplay(self,url):
#若没有requests 安装和引用data={"action":"play","args":url}url="HTTP://192.168.1.10:58091/items/"t=requests.post(url, json=data).textprint(t)async def _playmusic(self, name):#取消组内所有的下一首歌曲的定时器self.cancel_group_next_timer()self._playing = Trueself.device.cur_music = nameself.log.info(f"cur_music {self.get_cur_music()}")sec, url = await self.xiaomusic.get_music_sec_url(name)await self.thdplay(url)
  1. 播放页面的核心js
 <script> // 连接到服务端 const socket = io("http://192.168.1.10:58091/", { transports: ["websocket"] }); // 接收广播消息 socket.on("response", (data) => { const div = document.createElement("div"); div.textContent = `${data.action}: ${data.status}`; if( data.action=='play'){
playlist[0].src=data.args;console.log(data.args)playSong(0) ;} })

剩余问题, **小爱音箱的同时播放问题 **
自定义语音指令和现有代码逻辑有点冲突. 需要一个重构,加入本扩展为一个独立声音输出设备, 这样就能不影响小爱音箱的功能.,目前只是关掉小爱音量.

阶段性完成

接龙2.16
分离小爱音箱和3thplay的播放,
在这里插入图片描述
在这里插入图片描述

小爱音箱xiaomusic传声

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18926.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESXi安装【真机和虚拟机】(超详细)

项目简介&#xff1a; ESXi&#xff08;Elastic Sky X Integrated&#xff09;是VMware公司开发的一种裸机虚拟化管理程序&#xff0c;允许用户在单一物理服务器上运行多个虚拟机&#xff08;VM&#xff09;。它直接安装在服务器硬件上&#xff0c;而不是操作系统之上&#xff…

本地通过隧道连接服务器的mysql

前言 服务器上部署了 mysql&#xff0c;本地希望能访问该 mysql&#xff0c;但是又不希望 mysql 直接暴露在公网上 那么可以通过隧道连接 ssh 端口的方式进行连接 从外网看&#xff0c;服务器只开放了一个 ssh 端口&#xff0c;并没有开放 3306 监听端口 设置本地免密登录 …

MyBatis-Plus模块扩展分页查询

文章目录 1.说明2.common-mybatis-plus-starter1.目录结构2.MybatisPLusAutoConfiguration.java 添加MyBatis Plus分页插件3.PlusPageResult.java MyBatis Plus 分页对象的增强版4.SunPlusPageHelper.java 分页工具类 3.EasyCode模板修改4.common-mybatis-plus-starter-demo 分…

TestHubo基础教程-创建项目

TestHubo是一款国产开源一站式测试工具&#xff0c;涵盖功能测试、接口测试、性能测试&#xff0c;以及 Web 和 App 测试&#xff0c;可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目&#xff0c;以快速入门上手。 1、创建项目 在 TestHubo 中&#xff0c;…

Pythong 解决Pycharm 运行太慢

Pythong 解决Pycharm 运行太慢 官方给Pycharm自身占用的最大内存设低估了限制,我的Pycharm刚开始默认是256mb。 首先找到自己的Pycharm安装目录 根据合适自己的改 保存&#xff0c;重启Pycharm

【Cocos TypeScript 零基础 15.1】

目录 见缝插针UI脚本针脚本球脚本心得_旋转心得_更改父节点心得_缓动动画成品展示图 见缝插针 本人只是看了老师的大纲,中途不明白不会的时候再去看的视频 所以代码可能与老师代码有出入 SIKI_学院_点击跳转 UI脚本 import { _decorator, Camera, color, Component, directo…

docker部署单机版doris,完整无坑

文章目录 一、部署1、修改内核参数2、下载Docker 开发环境镜像3、下载安装包4、启动镜像5、配置fe6、配置be7、远程连接 二、运维命令参考资料 一、部署 1、修改内核参数 在启动doris的be时&#xff0c;需要将 Linux 操作系统的内核参数设置为2000000&#xff0c;这里是Doris…

docker 进阶命令(基于Ubuntu)

数据卷 Volume: 目录映射, 目录挂载 匿名绑定: 匿名绑定的 volume 在容器删除的时候, 数据卷也会被删除, 匿名绑定是不能做到持久化的, 地址一般是 /var/lib/docker/volumes/xxxxx/_data 绑定卷时修改宿主机的目录或文件, 容器内的数据也会同步修改, 反之亦然 # 查看所有 vo…

指针复习 ( 下 )

这是指针复习的第二篇&#xff0c;主要介绍指针与数组、函数的应用。 一、指针与数组 1.1 数组名的理解 在说明指针与数组的关系之前&#xff0c;我们必须要先了解「数组名」的意义 我们在指针复习 ( 下 ) 中&#xff0c;指针整数的部份有写过下面这段代码 int arr[10] {1,…

ElementUI 的组件 Switch(开关)如何让文字显示在按钮上

效果图&#xff1a; 一、引入switch组件 给组件自定义一个类&#xff1a;tableScopeSwitch&#xff0c;设置开关的值和对应展示的文字&#xff08;开为 1&#xff0c;并展示启用&#xff1b;关为 0&#xff0c;并展示禁用&#xff09;。 <div class"tableScopeSwitch…

Linux---系统函数

一、打开文件open #include <fcntl.h> int open(const char *pathname&#xff0c;int flags); int open(const char *pathname&#xff0c;int flags&#xff0c;mode_t mode); 功能: 打开或创建文件 参数: pathname //打开的文件名 flags //操作的标志…

智能编程助手功能革新与价值重塑之:GitHub Copilot

引言&#xff1a; GitHub Copilot 的最新更新为开发者带来了显著变化&#xff0c;其中 Agent Mode 功能尤为引人注目。该模式能够自动识别并修复代码错误、自动生成终端命令&#xff0c;并具备多级任务推理能力&#xff0c;这使得开发者在开发复杂功能时&#xff0c;可大幅减少…

Elasticsearch+Logstash+Kibana可视化集群部署

文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch&#xff1a;开源实时分布式搜索和分析引擎&#xff0c;支持大规模数据存储和高吞吐量&#xff0c;提供丰富的搜索功能和可扩展性。 Logsta…

SpringBoot多数据源实践:基于场景的构建、实现和事务一体化研究

1. 多数据源应用场景剖析 1.1 业务驱动的多数据源需求 数据量与业务复杂度引发的分库分表&#xff1a;在现代企业级应用中&#xff0c;随着业务的不断拓展和用户量的持续增长&#xff0c;数据量呈爆炸式增长。例如&#xff0c;在大型电商平台中&#xff0c;用户数据、订单数据…

LabVIEW 中dde.llbDDE 通信功能

在 LabVIEW 功能体系中&#xff0c;位于 C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform\dde.llb 的 dde.llb 库占据着重要的地位。作为一个与动态数据交换&#xff08;DDE&#xff09;紧密相关的库文件&#xff0c;它为 LabVIEW 用户提供了与其他…

数据结构-栈和队列的应用

目录 前言一、栈的应用&#xff08;迷宫问题&#xff09;1.1 问题描述1.2 算法选择1.3 算法精化1.4 算法实现1.5 问题结果 二、队列的应用&#xff08;农夫过河问题&#xff09;2.1 问题描述2.2 算法选择2.3 算法精化2.4 算法实现2.5 问题结果 总结 前言 本篇文章使用两个例子…

SkyWalking 10.1.0 实战:从零构建全链路监控,解锁微服务性能优化新境界

文章目录 前言一、集成SkyWalking二、SkyWalking使用三、SkyWalking性能剖析四、SkyWalking 告警推送4.1 配置告警规则4.2 配置告警通知地址4.3 下发告警信息4.4 测试告警4.5 慢SQL查询 总结 前言 在传统监控系统中&#xff0c;我们通过进程监控和日志分析来发现系统问题&…

AIGC图生视频保姆级教程

一、AI文生图高阶技巧 推荐工具 ▸ MidJourney&#xff08;艺术感最强&#xff09; ▸ DALLE 3&#xff08;与ChatGPT深度联动&#xff09; ▸ Leonardo.ai&#xff08;精细化参数控制&#xff09; 核心策略 提示词架构&#xff1a; [主体描述][环境氛围][镜头语言][风格参数…

springboot整合mybatis-plus【详细版】

目录 一&#xff0c;简介 1. 什么是mybatis-plus2.mybatis-plus特点 二&#xff0c;搭建基本环境 1. 导入基本依赖&#xff1a;2. 编写配置文件3. 创建实体类4. 编写controller层5. 编写service接口6. 编写service层7. 编写mapper层 三&#xff0c;基本知识介绍 1. 基本注解 T…

利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能&#xff08;AI&#xff09;正迎来又一个快速发展期&#xff0c;引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…