ESP Multi-Room Music 方案:支持音频实时同步播放 实现音乐互联共享

项目背景

随着无线通信技术的发展,针对不同音频应用领域的无线音频产品正不断涌现。近日,乐鑫科技推出了基于 Wi-Fi 的多扬声器互联共享音乐通信协议——ESP Multi-Room Music 方案。该方案使用乐鑫自研的基于 Wi-Fi 局域网的音频同步播放技术,支持音频设备间低延时自动校准,打造影院级立体声环绕系统。该方案具有以下优势:

  • 影院级立体声环绕系统: 可居家轻松构建影院级的立体声环绕系统,升级家庭影音系统,感受高质量的澎湃声音体验。
  • 低延时自校准:ESP Multi-Room Music 方案支持自动低延时校准,确保在不同位置的所有扬声器声音同步。
  • DIY 环绕效果:支持用户自定义多设备之间的组网以及环绕效果,可以根据用户的居家环境和喜好,实现对音箱智能 DIY 群组控制。
  • 多播放来源:支持来自媒资云端、手机设备、本地 AUX等输入方式,可随时随地构建设备协同播放场景。
  • 稳定性和可靠性:基于局域网 Wi-Fi 技术,提供稳定、可靠的音频数据传输,让用户的音频体验更加流畅
  • 易于安装和使用:无需复杂的设置过程,用户即可轻松安装和使用。同时摆脱繁琐的信号线缆,使空间更加整洁。

观看视频了解 ESP Multi-Room Music 方案。

ESP 音乐互联共享【超酷】

ESP Multi-Room Music 方案开源项目现已开源在 GitHub


项目价值

ESP Multi-Room Music 方案支持单个音箱的独立操作,在实现语音对话、音乐播放的同时,还能与其他预设群组音箱同步播放,并完成精确的实时校准同步,以实现立体环绕的音箱效果。这意味着,无论是个人消费类音响产品,还是专业商业音响产品,该方案都能为用户提供卓越的环绕体验和便利的使用体验。其低时延同步播放的特性该方案还能够被用于校园广播、居家检测报警、工厂流程化产品等应用中,为实时音频信息传递和设备实时共享提供关键支持。此外,ESP Multi-Room Music 方案还能 ESP RainMaker 云平台实现互联,在满足用户使用 APP 对音响进行 DIY 群组控制的同时,还能作为语音中枢记录环境中的其他智能产品。

综上所述,ESP Multi-Room Music 方案为音频互联共享提供了崭新和高效的解决方案,这将为用户、学生、家庭和企业带来更丰富、更便捷、更智能的音频体验!


开发指南

1. 环境配置

硬件要求本例程支持的开发板在 $ADF_PATH/examples/README_CN.md 文档例程与乐鑫音频开发板的兼容性表格中有标注表格中标有绿色复选框的开发板均可运行本例程。如下面的配置一节所述可以在 menuconfig 中选择开发板。

2. 编译和下载

使用 IDF 其他分支本例程支持 IDF release/v4.2 及以后的分支例程默认使用 IDF release/v4.4 分支

cd $IDF_PATHgit checkout mastergit pullgit checkout release/v4.2git submodule update --init --recursive

配置打开配置选项 idf.py menuconfig

在 menuconfig > Audio HAL 中选择合适的开发板。

在 Example Configuration > WiFi SSID  WiFi Password 配置 Wi-Fi 网络。

编译和下载:请先编译版本并烧录到开发板上,然后运行 monitor 工具来查看串口输出 (替换 PORT 为端口名称):

idf.py -p PORT flash monitor

退出调试界面使用 Ctrl-]。

有关配置和使用 ESP-IDF 生成项目的完整步骤,请参阅《ESP-IDF 编程指南》

3. 如何使用例程

功能和用法:

  • 准备三块及以上乐鑫音频开发板(例如 ESP32-S3-Krovo-2 或者 ESP32-LyraT-Mini),同时在所有开发板上加载并运行示例。
  • 当所有开发板都处于从机开始搜索模式后,按下其中一块开发板的 PLAY/REC 键开始 (ESP) Multi-Room Music 播放。

日志输出:

  • 从机开始搜索,打印如下:
I (5451) ESP_AUDIO_TASK: media_ctrl_task running...,0x3f805a60----------------------------- ESP Audio Platform -----------------------------|                                                                            ||                 ESP_AUDIO-v1.6.6-10-gf944a6b-aca0d7f-2d83f7a               ||                     Compile date: Mar 15 2021-11:14:21                     |------------------------------------------------------------------------------I (5492) ESP_AUDIO_CTRL: Func:media_ctrl_create, Line:342, MEM Total:4338832 Bytes, Inter:220956 Bytes, Dram:205124 BytesI (5504) AUDIO_HAL: Codec mode is 3, Ctrl:1I (5510) MRM_EXAMPLE: [ 3 ] Create and start input key serviceI (5516) ESP_DECODER: esp_decoder_init, stack size is 30720I (5522) I2S: DMA Malloc info, datalen=blocksize=1200, dma_buf_count=3I (5545) I2S: APLL: Req RATE: 48000, real rate: 47999.961, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 12287990.000, SCLK: 1535998.750000, diva: 1, divb: 0I (5549) ESP_AUDIO_CTRL: Enter play procedure, src:0I (5554) ESP_AUDIO_CTRL: Play procedure, URL is ok, src:0I (5560) ESP_AUDIO_CTRL: Request_CMD_Queue CMD:0, Available:5, que:0x3ffd5320I (5568) ESP_AUDIO_TASK: It's a decoderI (5572) ESP_AUDIO_TASK: 1.CUR IN:[IN_raw],CODEC:[DEC_auto],RESAMPLE:[48000],OUT:[OUT_iis],rate:0,ch:0,pos:0I (5583) ESP_AUDIO_TASK: 2.Handles,IN:0x3f806fd0,CODEC:0x3f807254,FILTER:0x3f8075b8,OUT:0x3f807414I (5592) ESP_AUDIO_TASK: 2.2 Update all pipelineI (5597) ESP_AUDIO_TASK: 2.3 Linked new pipelineI (5603) AUDIO_PIPELINE: link el->rb, el:0x3f806fd0, tag:IN_raw, rb:0x3f807758I (5611) AUDIO_PIPELINE: link el->rb, el:0x3f807254, tag:DEC_auto, rb:0x3f809f98I (5619) AUDIO_PIPELINE: link el->rb, el:0x3f8075b8, tag:Resample, rb:0x3f80bfd8I (5627) ESP_AUDIO_TASK: 3. Previous starting...I (5632) AUDIO_ELEMENT: [IN_raw-0x3f806fd0] Element task createdI (5639) AUDIO_THREAD: The DEC_auto task allocate stack on external memoryI (5648) AUDIO_ELEMENT: [DEC_auto-0x3f807254] Element task createdI (5653) AUDIO_ELEMENT: [DEC_auto] AEL_MSG_CMD_RESUME,state:1I (5660) ESP_AUDIO_TASK: No Blocking play with decoderI (5665) ESP_AUDIO_TASK: Recv Element[IN_raw-0x3f806fd0] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (5677) ESP_AUDIO_TASK: Recv Element[IN_raw-0x3f806fd0] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (5688) ESP_DECODER: Ready to do audio type check, pos:0, (line 104)I (5695) ESP_AUDIO_CTRL: Func:_ctrl_play, Line:763, MEM Total:4267572 Bytes, Inter:206344 Bytes, Dram:190512 BytesI (5706) ESP_AUDIO_CTRL: Exit play procedure, ret:0W (5714) MRM_MULTICAST: creat addr 239.255.255.252 port 1900I (5718) AUDIO_THREAD: The mrm_slave_client task allocate stack on external memoryI (5726) MRM_CLIENT: Slave start searching...
  • 主机开始播放,打印如下:
I (56177) MRM_EXAMPLE: [ * ] [Play] input key eventI (56734) MRM_CLIENT: slave client task stopedI (56735) AUDIO_THREAD: The mrm_master_client task allocate stack on external memoryI (58324) HTTP_STREAM: total_bytes=2994349I (58325) AUDIO_ELEMENT: [http-0x3f805e44] Element task createdI (58325) AUDIO_THREAD: The multi_room_play task allocate stack on external memoryI (58334) ESP_DECODER: Detect audio type is MP3I (58338) MP3_DECODER: MP3 openedI (58342) ADF_BIT_STREAM: The element is 0x3f807254. The reserve data 2 is 0x0.I (58353) ESP_AUDIO_TASK: Recv Element[DEC_auto-0x3f807254] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (58367) ESP_AUDIO_TASK: Received music info then on playI (58368) ESP_AUDIO_TASK: On event play, status:UNKNOWN, 0I (58374) AUDIO_THREAD: The Resample task allocate stack on external memoryI (58382) AUDIO_ELEMENT: [Resample-0x3f8075b8] Element task createdI (58391) AUDIO_ELEMENT: [Resample] AEL_MSG_CMD_RESUME,state:1I (58395) AUDIO_ELEMENT: [OUT_iis-0x3f807414] Element task createdI (58402) AUDIO_ELEMENT: [OUT_iis] AEL_MSG_CMD_RESUME,state:1I (58408) I2S_STREAM: AUDIO_STREAM_WRITERI (58413) ESP_AUDIO_TASK: Recv Element[OUT_iis-0x3f807414] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (58567) RSP_FILTER: sample rate of source data : 44100, channel of source data : 2, sample rate of destination data : 2I (58571) ESP_AUDIO_TASK: Recv Element[Resample-0x3f8075b8] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (58583) ESP_AUDIO_TASK: ESP_AUDIO status is AEL_STATUS_STATE_RUNNING, 0, src:0, is_stopping:0I (58592) ESP_AUDIO_TASK: Func:media_ctrl_task, Line:860, MEM Total:4169352 Bytes, Inter:155804 Bytes, Dram:139972 BytesI (59139) MRM_CLIENT: ===== Send Sync =====Version:ESP32 MRM/1.0Tag:SYNC_PTSTSF:5784716Sync:533I (59543) MRM_CLIENT: ===== Send Sync =====Version:ESP32 MRM/1.0Tag:SYNC_PTSTSF:5785121Sync:938I (59947) MRM_CLIENT: ===== Send Sync =====Version:ESP32 MRM/1.0Tag:SYNC_PTSTSF:5785525Sync:1344I (60350) MRM_CLIENT: ===== Send Sync =====Version:ESP32 MRM/1.0Tag:SYNC_PTSTSF:5785929Sync:1749
  • 从机开始播放,打印如下:
I (59095) MRM_EXAMPLE: slave set url https://dl.espressif.com/dl/audio/ff-16b-2c-44100hz.mp3I (60563) HTTP_STREAM: total_bytes=2994349I (60563) AUDIO_ELEMENT: [http-0x3f805e44] Element task createdW (60563) AUIDO_MEM: Can't support stack on external memory due to ESP32 chip is 1I (60573) ESP_DECODER: Detect audio type is MP3I (60577) MP3_DECODER: MP3 openedI (60581) ADF_BIT_STREAM: The element is 0x3f806250. The reserve data 2 is 0x0.I (60592) ESP_AUDIO_TASK: Recv Element[DEC_auto-0x3f806250] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (60607) ESP_AUDIO_TASK: Received music info then on playI (60608) ESP_AUDIO_TASK: On event play, status:UNKNOWN, 0W (60613) AUIDO_MEM: Can't support stack on external memory due to ESP32 chip is 1I (60621) AUDIO_ELEMENT: [Resample-0x3f8065b4] Element task createdI (60629) AUDIO_ELEMENT: [Resample] AEL_MSG_CMD_RESUME,state:1I (60634) AUDIO_ELEMENT: [OUT_iis-0x3f806410] Element task createdI (60641) AUDIO_ELEMENT: [OUT_iis] AEL_MSG_CMD_RESUME,state:1I (60647) I2S_STREAM: AUDIO_STREAM_WRITERI (60653) ESP_AUDIO_TASK: Recv Element[OUT_iis-0x3f806410] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (60800) RSP_FILTER: sample rate of source data : 44100, channel of source data : 2, sample rate of destination data : 2I (60804) ESP_AUDIO_TASK: Recv Element[Resample-0x3f8065b4] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNINGI (60815) ESP_AUDIO_TASK: ESP_AUDIO status is AEL_STATUS_STATE_RUNNING, 0, src:0, is_stopping:0I (60824) ESP_AUDIO_TASK: Func:media_ctrl_task, Line:860, MEM Total:4167400 Bytes, Inter:108288 Bytes, Dram:92456 BytesI (61554) MRM_EXAMPLE: slave got sync 601I (61554) MRM_CLIENT: [sync] Sync 601 PTS 714 E2E_delay [68] sync diff [-13] msI (61964) MRM_EXAMPLE: slave got sync 1011I (61965) MRM_CLIENT: [sync] Sync 1011 PTS 1024 E2E_delay [73] sync diff [-3] ms

相关资源

  • 项目 Github 链接
  • 项目 README 文档_CN
  • 例程与乐鑫音频开发板的兼容性表格
  • 乐鑫物联网开发框架 ESP-IDF
  • 乐鑫 ESP RainMaker SDK

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

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

相关文章

Pycharm修改文件默认打开方式 + CSV Editor插件使用

1、File —> Settings —> Editor —> File Types 然后将*csv添加到最上面 在plugins中下载插件,CSV Editor 备注:不在上一步的“File Types”中将*.csv设置为CSV格式,插件是不起作用的 就可以使用了

CRM在设备制造行业的应用,优化资源配置

设备制造业竞争激烈,公司要以客户为中心,搞好售后服务。CRM管理软件是设备制造业客户关系管理的重要工具。以下是CRM在设备制造业里的典型应用。 1.营销管理 制订市场策略:设备制造通常涉及较长的决策周期和销售周期。客户可能会在多家供货商…

PHP+vue+elementui高校学生社团信息管理系统o7q4a

社团是由高校用户依据兴趣爱好自愿组成,按照章程自主开展活动的用户组织。高校社团是实施素质教育的重要途径和有效方式,在加强校园文化建设、提高用户综合素质、引导用户适应社会、促进用户交流等方面发挥着重要作用,是新形势下有效凝聚用户…

win11安装(未完待续)

学习补丁 test.bat 运行后需要重启 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmgr /skms kms.03k.org slmgr /ato 文件扩展名 主题 性能设置 开始按钮靠左 任务栏对齐方式-靠左 必备软件 f.lux redshift 360管家 驱动精灵 edge c*lash(v2*ray不支持w…

Python源码17:使用海龟画图turtle画五星红旗

turtle模块是一个Python的标准库之一,它提供了一个基于Turtle graphics的绘图库。Turtle graphics是一种流行的绘图方式,它通过控制一个小海龟在屏幕上移动来绘制图形。 turtle模块可以让您轻松地创建和控制海龟图形,从而帮助您学习Python编…

首次超越1000量子比特大关!量子前哨详解IBM突破性进展

(图片来源:网络) 本周,IBM在其年度量子峰会上宣布,公司已在量子计算领域取得重要突破。其中包括备受期待的1121量子比特Condor QPU,以及一个较小的133量子比特Heron QPU,这些QPU能够与其他QPU组…

java springboot简单了解数据源实现 与 springboot内置数据源

之前 我们讲到的项目 数据库管理 用了三种技术 数据源管理方式 我们选择了: DruidDataSource 持久化技术: MyBatis-Plus / MyBatis 数据库: MySql 那么 我们在刚接触数据库连接时 是没用配置Druid的 那它有没有用数据源呢? 我们接触过的配置Druid的方式有两种 用…

揭秘AI魔法绘画:Stable Diffusion引领无限创意新纪元

文章目录 1. 无限的创意空间2. 高效的创作过程3. 个性化的艺术表达4. 跨界合作的可能性5. 艺术教育的革新6. 艺术市场的拓展 《AI魔法绘画:用Stable Diffusion挑战无限可能》编辑推荐内容简介作者简介精彩书评目录前言/序言本书读者对象学习建议获取方式 随着科技的…

【IEEE独立出版】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024) 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议(NNICE 2024&#xff0…

从一篇前端大佬文章中我学到了很多

我们先看下页面是怎么样的&#xff1a; 功能很简单&#xff0c;就是复制下面的二维码图片&#xff0c;然后粘贴到文本框中&#xff0c;且显示在框的正中间&#xff0c;最后点击识别按钮&#xff0c;把识别二维码的结果展示到下面。 源代码&#xff1a; <!DOCTYPE html>…

Node.js下载安装教程

一、下载安装包 1、百度网盘自提链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Bbw895MtUgjlfZylPHCCxw 提取码&#xff1a;x89v 2、进入官网下载 https://nodejs.org/zh-cn/download/ 选择对应版本&#xff0c;我这里选的windows64位版本 二、安装程序 1、…

C# Demo--汉字转拼音

1.Nuget安装NPOI及Pinyin4net 2.Demo 代码部分 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using NPOI.SS.UserModel; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using System.IO;…

【每日易题】Leetcode上Hard难度的动态规划题目——地下城游戏的实现

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;博主最近一直在钻研动态规划算法&#xff0c;最近在Leetcode上刷题的时候遇到一个Hard难度的动态规划题&#xff0c;今天就借此机会来给大家分享…

win11 install oh-my-posh

安装配置 下载 Nerd Fonts 字体 oh-my-posh font installNerd Fonts 网站下载&#xff0c;解压后右击安装 为终端设置 Nerd Fonts 字体 修改 Windows 终端设置&#xff08;默认快捷方式&#xff1a;CTRL SHIFT ,&#xff09;&#xff0c;在settings.json文件defaults属性下添…

在Linux上优化HTTP服务器的性能

在Linux上优化HTTP服务器的性能是一个涉及多个方面的任务&#xff0c;包括服务器硬件、网络设置、软件配置和内容优化。以下是一些关键的优化建议&#xff1a; 选择合适的HTTP服务器软件 Linux上有多种HTTP服务器软件&#xff0c;如Apache、Nginx、Lighttpd等。选择适合您需求…

uView ui 1x uniapp 表格table行内容长度不一导致高度不统一而出现的不对齐问题

问题 因为td单元格内空长度不定导致行单元格未对齐 解决&#xff1a; 重置td的高度&#xff1a;height:100% 改为height:auto !import <u-table><u-tr v-for"(item,index) in Lineinfo.Cust_Name" ><u-td style"height: auto !important;back…

8_企业架构缓存中间件分布式memcached

企业架构缓存中间件分布式memcached 学习目标和内容 1、能够理解描述网站业务访问流程 2、能够理解网站业务的优化方向 3、能够描述内存缓存软件Memcached的作用 4、能够通过命令行操作Memcached 5、能够操作安装php的memcached扩展 extension 6、能够实现session存储到memcach…

前端vue导出PPT幻灯片,使用pptxgen.js,超详细(赋原数据)

即上一篇文章最终代码 前端vue导出PPT&#xff0c;使用pptxgen.js 前端vue导出PPT&#xff0c;使用pptxgen.js 一个平台下有10个国家&#xff0c;这个是后端返回数据固定的&#xff0c;每一个国家下面有10个物流方式&#xff0c;这10个物流方式是这10个国家都有的&#xff0c;…

第二十一章 网络通信

21.1网络程序设计基础 21.1.1局域网与互联网 服务器是指提供信息的计算机程序&#xff0c;客户机是指请求信息的计算机程序。网络用于连接服务器与客户机&#xff0c;实现两者间的相互通信。 21.1.2网络协议 1. IP协议 IP是Internet Protocol的简称。 TCP/IP模式是一种层…

Ubuntu18.04 本地安装CVAT标注工具

写在前面&#xff1a; 1、如果直接clone最新版本的cvat&#xff0c;python版本最好安装3.8的&#xff0c;因为其中部分代码的语法只有高版本的python才可以支持。 2、安装完成以后本地登陆可能出现"cannot connect to cvat server"的错误&#xff0c;可以从Cannot …