首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

用你的 ESP32 做一个音乐电台

  • 24-03-03 17:41
  • 2384
  • 9149
blog.csdn.net

本工程源代码托管位置 https://github.com/tidyjiang8/esp32-projects

在 GitHub 上找到一个德国小伙移植的 ESP32 音频相关的项目,实现起来比较简单,在这里分享一下。该项目主要是向一个网络服务器获取音乐,然后在 ESP32 上面进行本地解码、播放,从而做成了一个网络电台的功能。

【所需硬件】

最简单的方案包括:

  • 一块 ESP32 开发板
  • 一个低功率的喇叭

由于没有喇叭,我直接用的耳机代替的。

【硬件接线】

对于内置 DAC 模式,一共需要接三根线:

GPIO25   ----   左声道
GPIO26   ---    右声道
GND      ---    地
  • 1
  • 2
  • 3

一般耳机的左/右声道如下图所示:

【快速开始】

【 假设】

  • 你已经安装好 ESP-IDF 和工具链。
  • 你已经有一个 WiFi 热点。
  • 板子与耳机的线已经接好(PS:我是板子跑起来后用手直接将线按在耳机的接口上的)。

【步骤】

  • 使用数据线将开发板连接到你的系统中,让系统能够识别到你的板子(Windows 是COM\*, Linux 是/dev/ttyUSB\*)。
  • 进入web_radio所在目录。
  • 执行命名make menuconfig进行配置。
    • 对串口进行配置。
    • 对需要连接的 AP 的 SSID 和 PASSWORD 进行配置。依次进入Web Radio / Bluetooth Speaker --->、Wifi Configuration --->,然后输入热点的 SSID和密码。
    • 对音频输出模式进行选项。依次进入Web Radio / Bluetooth Speaker --->、Audio Output --->、Select Audio Output Mode,然后选择Built-In DAC。
  • 执行命令make进行编译
  • 执行命令make flash monitor将编译生成的镜像烧写到 ESP32 开发板上面,并查看串口输出。

【现象】

带上耳机,有没有听到音乐呢?

此外,按下 boot 按键,音乐会暂停,再次按下 boot 按键,音乐会重新播放。

【实现原理总结】

整个 Web Radio 的实现过程可以划分为三部分:

  • 获取音频流。程序使用的 http 协议从一个服务器上面获取的音频数据,并将整个数据存放到一个 buffer 中。
  • 对音频流进行解码。当 buffer 中有一定的数据后(可以通过宏进行调整),开启解码线程。解码线程会从这个 buffer 中取出数据,然后调用解码库,将音频流解码为可直接输出的数字信号。
  • 将解码后的数据通过 DAC 输出。解码线程每解完一帧数据后,将它通过 I2S 驱动程序直接送给 DAC。

这里面存在一个同步的问题,即从服务器上面获取音频流与对音频流进行解码的同步。如果获取的音频流过快,超过了解码的速度,则它可能将 buffer 撑爆,因此会丢失部分数据;如果解码的速度过快,超过了获取音频的速度,则它可能将 buffer 消耗的干干净净,从而也会出现声音卡顿问题。这需要进行权衡。

注:本文转载自blog.csdn.net的chunhua.jiang的文章"http://blog.csdn.net/tidyjiang/article/details/72667823"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top