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

news2024/9/25 14:42:13

项目背景

随着无线通信技术的发展,针对不同音频应用领域的无线音频产品正不断涌现。近日,乐鑫科技推出了基于 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_PATH

git checkout master

git pull

git checkout release/v4.2

git 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 Bytes



I (5504) AUDIO_HAL: Codec mode is 3, Ctrl:1

I (5510) MRM_EXAMPLE: [ 3 ] Create and start input key service

I (5516) ESP_DECODER: esp_decoder_init, stack size is 30720

I (5522) I2S: DMA Malloc info, datalen=blocksize=1200, dma_buf_count=3

I (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: 0

I (5549) ESP_AUDIO_CTRL: Enter play procedure, src:0

I (5554) ESP_AUDIO_CTRL: Play procedure, URL is ok, src:0

I (5560) ESP_AUDIO_CTRL: Request_CMD_Queue CMD:0, Available:5, que:0x3ffd5320

I (5568) ESP_AUDIO_TASK: It's a decoder

I (5572) ESP_AUDIO_TASK: 1.CUR IN:[IN_raw],CODEC:[DEC_auto],RESAMPLE:[48000],OUT:[OUT_iis],rate:0,ch:0,pos:0

I (5583) ESP_AUDIO_TASK: 2.Handles,IN:0x3f806fd0,CODEC:0x3f807254,FILTER:0x3f8075b8,OUT:0x3f807414

I (5592) ESP_AUDIO_TASK: 2.2 Update all pipeline

I (5597) ESP_AUDIO_TASK: 2.3 Linked new pipeline

I (5603) AUDIO_PIPELINE: link el->rb, el:0x3f806fd0, tag:IN_raw, rb:0x3f807758

I (5611) AUDIO_PIPELINE: link el->rb, el:0x3f807254, tag:DEC_auto, rb:0x3f809f98

I (5619) AUDIO_PIPELINE: link el->rb, el:0x3f8075b8, tag:Resample, rb:0x3f80bfd8

I (5627) ESP_AUDIO_TASK: 3. Previous starting...

I (5632) AUDIO_ELEMENT: [IN_raw-0x3f806fd0] Element task created

I (5639) AUDIO_THREAD: The DEC_auto task allocate stack on external memory

I (5648) AUDIO_ELEMENT: [DEC_auto-0x3f807254] Element task created

I (5653) AUDIO_ELEMENT: [DEC_auto] AEL_MSG_CMD_RESUME,state:1

I (5660) ESP_AUDIO_TASK: No Blocking play with decoder

I (5665) ESP_AUDIO_TASK: Recv Element[IN_raw-0x3f806fd0] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNING

I (5677) ESP_AUDIO_TASK: Recv Element[IN_raw-0x3f806fd0] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNING

I (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 Bytes



I (5706) ESP_AUDIO_CTRL: Exit play procedure, ret:0

W (5714) MRM_MULTICAST: creat addr 239.255.255.252 port 1900

I (5718) AUDIO_THREAD: The mrm_slave_client task allocate stack on external memory

I (5726) MRM_CLIENT: Slave start searching...
  • 主机开始播放,打印如下:
I (56177) MRM_EXAMPLE: [ * ] [Play] input key event

I (56734) MRM_CLIENT: slave client task stoped

I (56735) AUDIO_THREAD: The mrm_master_client task allocate stack on external memory

I (58324) HTTP_STREAM: total_bytes=2994349

I (58325) AUDIO_ELEMENT: [http-0x3f805e44] Element task created

I (58325) AUDIO_THREAD: The multi_room_play task allocate stack on external memory

I (58334) ESP_DECODER: Detect audio type is MP3

I (58338) MP3_DECODER: MP3 opened

I (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_RUNNING

I (58367) ESP_AUDIO_TASK: Received music info then on play

I (58368) ESP_AUDIO_TASK: On event play, status:UNKNOWN, 0

I (58374) AUDIO_THREAD: The Resample task allocate stack on external memory

I (58382) AUDIO_ELEMENT: [Resample-0x3f8075b8] Element task created

I (58391) AUDIO_ELEMENT: [Resample] AEL_MSG_CMD_RESUME,state:1

I (58395) AUDIO_ELEMENT: [OUT_iis-0x3f807414] Element task created

I (58402) AUDIO_ELEMENT: [OUT_iis] AEL_MSG_CMD_RESUME,state:1

I (58408) I2S_STREAM: AUDIO_STREAM_WRITER

I (58413) ESP_AUDIO_TASK: Recv Element[OUT_iis-0x3f807414] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNING

I (58567) RSP_FILTER: sample rate of source data : 44100, channel of source data : 2, sample rate of destination data : 2

I (58571) ESP_AUDIO_TASK: Recv Element[Resample-0x3f8075b8] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNING

I (58583) ESP_AUDIO_TASK: ESP_AUDIO status is AEL_STATUS_STATE_RUNNING, 0, src:0, is_stopping:0

I (58592) ESP_AUDIO_TASK: Func:media_ctrl_task, Line:860, MEM Total:4169352 Bytes, Inter:155804 Bytes, Dram:139972 Bytes



I (59139) MRM_CLIENT: ===== Send Sync =====

Version:ESP32 MRM/1.0

Tag:SYNC_PTS

TSF:5784716

Sync:533



I (59543) MRM_CLIENT: ===== Send Sync =====

Version:ESP32 MRM/1.0

Tag:SYNC_PTS

TSF:5785121

Sync:938



I (59947) MRM_CLIENT: ===== Send Sync =====

Version:ESP32 MRM/1.0

Tag:SYNC_PTS

TSF:5785525

Sync:1344



I (60350) MRM_CLIENT: ===== Send Sync =====

Version:ESP32 MRM/1.0

Tag:SYNC_PTS

TSF:5785929

Sync:1749
  • 从机开始播放,打印如下:
I (59095) MRM_EXAMPLE: slave set url https://dl.espressif.com/dl/audio/ff-16b-2c-44100hz.mp3

I (60563) HTTP_STREAM: total_bytes=2994349

I (60563) AUDIO_ELEMENT: [http-0x3f805e44] Element task created

W (60563) AUIDO_MEM: Can't support stack on external memory due to ESP32 chip is 1

I (60573) ESP_DECODER: Detect audio type is MP3

I (60577) MP3_DECODER: MP3 opened

I (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_RUNNING

I (60607) ESP_AUDIO_TASK: Received music info then on play

I (60608) ESP_AUDIO_TASK: On event play, status:UNKNOWN, 0

W (60613) AUIDO_MEM: Can't support stack on external memory due to ESP32 chip is 1

I (60621) AUDIO_ELEMENT: [Resample-0x3f8065b4] Element task created

I (60629) AUDIO_ELEMENT: [Resample] AEL_MSG_CMD_RESUME,state:1

I (60634) AUDIO_ELEMENT: [OUT_iis-0x3f806410] Element task created

I (60641) AUDIO_ELEMENT: [OUT_iis] AEL_MSG_CMD_RESUME,state:1

I (60647) I2S_STREAM: AUDIO_STREAM_WRITER

I (60653) ESP_AUDIO_TASK: Recv Element[OUT_iis-0x3f806410] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNING

I (60800) RSP_FILTER: sample rate of source data : 44100, channel of source data : 2, sample rate of destination data : 2

I (60804) ESP_AUDIO_TASK: Recv Element[Resample-0x3f8065b4] MSG,type:20000,cmd:8,len:4,status:AEL_STATUS_STATE_RUNNING

I (60815) ESP_AUDIO_TASK: ESP_AUDIO status is AEL_STATUS_STATE_RUNNING, 0, src:0, is_stopping:0

I (60824) ESP_AUDIO_TASK: Func:media_ctrl_task, Line:860, MEM Total:4167400 Bytes, Inter:108288 Bytes, Dram:92456 Bytes



I (61554) MRM_EXAMPLE: slave got sync 601

I (61554) MRM_CLIENT: [sync] Sync 601 PTS 714 E2E_delay [68] sync diff [-13] ms

I (61964) MRM_EXAMPLE: slave got sync 1011

I (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.coloradmin.cn/o/1263191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从Android面试题目溯源-1、创建线程有那几种方式

概念 程序执行流的最小单位,处理器调度调度和分派的基本单位。 如何理解这个概念 如下图,可以简单类比吉他,六根弦代表六个线程,每个线程独立且单独运行,且持有上一个音的状态,每根手指可类比为一个CPU的…

E云管家开发个人微信号批量修改好友备注

简要描述: 修改好友备注 请求URL: http://域名地址/modifyRemark 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说…

Linux常见指令基础知识

目录 初始Linux操作系统 Linux背景: 开源 : 发行版本: ​编辑 OS概念,定位: 使用 XShell 远程登录 Linux Linux相关知识 文件是什么? 路径分隔符 (.) 和 (. .&…

玻色量子研发进展

2023年 2023.8 量子计算突破云渲染资源调度!真机测试完整报告公开! 2023.8 量子计算突破金融信用评分!真机测试完整报告公开! 2023.7 玻色量子“揭秘”之旅行商问题与Ising建模 2023.7 玻色量子“揭秘”之背包问题与Ising建…

计算机服务器中了faust勒索病毒怎么办,faust勒索病毒解密文件恢复

计算机技术的不断发展,为企业的生产生活运营提供了坚实基础,但网络是一把双刃剑,网络安全威胁也在不断增加,近期,云天数据恢复中心陆续接到很多企业的求助,企业的计算机服务器遭到了faust勒索病毒攻击&…

HelpLook可以作为wordpress的替代品,帮助企业快速搭建博客

博客作为一个非常有价值的平台,在当今的数字时代具有重要的意义。对于个人和企业来说,选择一款适合自己需求的专业博客搭建软件至关重要。本篇文章将会通过对比两个专业的博客搭建软件——HelpLook和WordPress,看看为什么我说HelpLook可以作为…

js相同字符串截取拼接

原数据 const list [999-1234567801,999-1234567802,999-1234567803, ]; const list1 [999-1234567899,999-1234567900,999-1234567901, ];期望数据 999-1234567801/2/3 //list 999-1234567899/900/901 //list1处理代码 // 连续号码处理 export const formatNumber (tick…

具身智能17篇创新性论文及代码合集,2023最新

今天来聊聊人工智能领域近期的一个热门研究方向——具身智能。 具身智能(Embodied Intelligence)指的是机器人或智能体通过感知、理解和交互来适应环境,并执行任务的能力。与传统的基于规则或符号的人工智能不同,具身智能强调将感…

文件批量重命名:多个路径文件批量改名编号并移动到同一路径的操作方法

在日常生活和工作中,可能会遇到需要批量重命名文件的情况。比如说,从不同的路径下载了一堆图片,或者从不同的文件夹中收集了一些文件,现在要将这些文件按照一定的规则进行编号命名。这种情况下,手动修改文件名并且移动…

【密码学引论】密码学的基本概念

第二章 密码学的基本概念 1、密码学定义 密码编制学和密码分析学共同组成密码学 密码编制学:研究密码编制密码分析学:研究密码破译 2、密码体制的五个组成部分 明文空间M,全体明文的集合密文空间C,全体密文的集合密钥空间K&am…

智慧农田可视化大数据综合管理平台方案,EasyCVR助力农业高质量发展

一、背景需求 我国是农业大国,农业耕地面积达到20亿亩。随着物联网、大数据、人工智能等新一代信息技术与农业农村加速融合,以及国家对农业的重视,智慧农业对于我国农业现代化建设和实施乡村振兴战略具有重大引领与推动作用。在传统农田生产…

python基于YOLOv7系列模型【yolov7-tiny/yolov7/yolov7x】开发构建钢铁产业产品智能自动化检测识别系统

在前文的项目开发实践中,我们已经以钢铁产业产品缺陷检测数据场景为基准,陆续开发构建了多款目标检测模型,感兴趣的话可以自行阅读即可。 《YOLOv3老矣尚能战否?基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统&#xf…

SSM跆拳道网站系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 跆拳道网站系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

Apipost也出IDEA插件了?Apipost-Helper!

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件:Api…

DM8误删除操作恢复方案

达梦数据库三种在误删除操作后的回退方案 一、闪回表 当用户操作不慎导致错误的删改数据时,闪回方式可以恢复数据。闪回技术,就是为了用户可以迅速处理这种 数据逻辑损坏的情况而产生的。 闪回技术主要是通过回滚段存储的 UNDO 记录来完成历史记录的还原…

【傻瓜级JS-DLL-WINCC-PLC交互】4.DLL读取WINCC内部变量

思路 JS-DLL-WINCC-PLC之间进行交互,思路,先用Visual Studio创建一个C#的DLL控件,然后这个控件里面嵌入浏览器组件,实现JS与DLL通信,然后DLL放入到WINCC里面的图形编辑器中,实现DLL与WINCC的通信。然后PLC与…

OpenHarmonyMeetup2023北京站圆满举办

“OpenHarmony正当时”OpenHarmonyMeetup2023城市巡回活动,旨在通过meetup线下交流形式,解读OpenHarmony作为下一代智能终端操作系统的新版本及成果转化,提升开发者对OpenHarmony的关注度,普及OpenHarmony开发技能,加速开发者对OpenHarmony的掌握,从而吸引更多企业和技术爱好者…

在 The Sandbox 设置总部,SCB 10X 和 T-POP 为 4EVE 元宇宙音乐会揭幕

协作学习为全球粉丝提供了无限的可能性,让他们通过革命性的元宇宙体验沉浸在泰国流行文化中。 作为 SCBX 集团背后的创新力量,SCB 10X 很高兴宣布与 T-POP Incorporation 展开开创性合作,T-POP Incorporation 是泰国流行文化在全球舞台上的领…

Phpstudy v8.0/8.1添加 php-7.4.9

1、官网下载最新的php版本 打开Windows版的官网下载,地址:PHP For Windows: Binaries and sources Releases 页面上有不同的PHP版本,这里我们下载的是64位nts版的PHP7.4.9,php-7.4.9-nts-Win32-vc15-x64.zip。 2、解压下载的文…

苹果mac屏幕投屏镜像工具AirServer2024

airserver 是什么软件?AirServer 是一款 Airplay Mac屏幕镜像应用,AirServer可以通过 mac 实时接收iPhone、iPad以及Android设备的实时屏幕画面。AirServer 可以将一个简单的大屏幕或投影仪变成一个通用的屏幕镜像接收器。在您的大屏幕上启用 AirServer …