esp32 下蓝牙播放音乐歌词的获得

news2024/11/19 4:31:22

以esp32 或者esp8266 作为蓝牙音乐接收端是可以获取到歌词的。

走了不少弯路,这方面还是资料有缺失,其实这是很简单的事情。

使用了A2DP这个库,GitHub - pschatzmann/ESP32-A2DP: A Simple ESP32 Bluetooth A2DP Library (to implement a Music Receiver or Sender) that supports Arduino, PlatformIO and Espressif IDF

其他btaudio 这个库其实也行,只要是满足蓝牙a2dp这个协议就可以。

获取歌词的关键是

void avrc_metadata_callback(uint8_t data1, const uint8_t *data2)
{
  // Serial.printf("AVRC metadata rsp: attribute id 0x%x, %s\n", data1, data2);
 
  String strData2=getStringFromChars(data2,sizeof(data2));
  String strData2 = (const char *)data2;
  
  if (data1 == 2)
  {
    Serial.printf("歌名:%s", data2);

  }
  if (data1 == 4)
  {
   Serial.printf("歌手:%s", data2);
   
  }
  if (data1 == 1)
  {
     Serial.printf("专辑:%s", data2);

  }

avrc_metadata_callback 是一个回调方法,它的注册在setup中

#include <Arduino.h>
#include "a2dp/BluetoothA2DPSink.h"


BluetoothA2DPSink a2dp_sink;

void setup()
{

  Serial.begin(115200);


  a2dp_sink.set_avrc_metadata_attribute_mask(ESP_AVRC_MD_ATTR_TITLE | ESP_AVRC_MD_ATTR_ARTIST | ESP_AVRC_MD_ATTR_ALBUM | ESP_AVRC_MD_ATTR_TRACK_NUM | ESP_AVRC_MD_ATTR_NUM_TRACKS  );
  a2dp_sink.set_avrc_metadata_callback(avrc_metadata_callback);

  a2dp_sink.start("my music");

}

注意上面:

set_avrc_metadata_attribute_mask 是告诉发送端我要那些数据

set_avrc_metadata_callback 是设置回调函数接受metadata

a2dp 库和btaudio库都有对应的方法,只是名字可能不一样。

一般情况下,回调函数获得的数据是:

ESP_AVRC_MD_ATTR_TITLE  曲名

ESP_AVRC_MD_ATTR_ARTIST 演唱人

ESP_AVRC_MD_ATTR_ALBUM 专辑

ESP_AVRC_MD_ATTR_TRACK_NUM  当前第X首

ESP_AVRC_MD_ATTR_NUM_TRACKS 总共X首

这个回调函数avrc_metadata_callback(uint8_t data1, const uint8_t *data2) 中:

data1 对应一个16进制标记

data2 对应文本

在播放音乐的时候,蓝牙传递的歌词是通过 ESP_AVRC_MD_ATTR_TITLE   完成的,简单的讲ESP_AVRC_MD_ATTR_TITLE  第一次传回来的是歌曲名,后面传回来的就是歌词了。

吻别
张学友
吻别
0
0
作曲: 殷文琦
吻别 - 张学友
吻别
0
0
编曲: 殷文琦
吻别 - 张学友
吻别
0
0
制作人: 黄庆元
吻别 - 张学友
吻别
0
0
前尘往事成云烟
吻别 - 张学友
吻别
0
0
消散在彼此眼前
吻别 - 张学友
吻别
0
0
就连说过了再见
吻别 - 张学友
吻别
0
0
也看不见你有些哀怨
吻别 - 张学友
吻别
0
0

问题的关键来了,当你上面代码运行下去却可能怎么都获取不到歌词,metadata只传递一次,本人也在这个问题上折腾了一天,基本把a2dp的代码研究了一个透,它自己也没有特别的提到歌词这个事情。还去查什么AVRCP 指令,各种折腾;其实都是歧路,白白耗费了一天时间折腾。

不能获取到歌词的原因是播放器本身没有点开字幕传递设置,这点QQ音乐和网易云都一样,而有些播放器可能你点开了歌词传递之类的也可能获取不到歌词。当然前提是你的meta最初会有数据。

成品效果如下:

由于歌词文字不固定,所以在单片机中显示歌词,就又必须折腾软字库,请看前文

在esp32(esp8266) 提供软字库显示中文的解决方案_platform的博客-CSDN博客

TFT屏幕在arduino (esp 32)下的驱动,汉字显示和字库比较_platform的博客-CSDN博客

其实不论是不是esp32还是其他单片机或者其他,基本原理都是一样的。在meta中获得歌词,很多网络说法都是有问题的。

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

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

相关文章

微信外h5跳转小程序3中方式

1.转短链接跳转小程序&#xff08;支持微信内外&#xff09; 目前限制50wc次 先转短链接 文档&#xff1a;获取scheme码 | 微信开放文档 2.微信公众号h5内跳转小程序&#xff08;支持微信内&#xff09; 微信公众号h5页面跳转微信小程序_程序007的博客-CSDN博客 3.使用云函…

对Android 说Hello ——Qt For Android

1. Qt 安卓环境搭建 平台&#xff1a;Qt5.15.2 官网教程&#xff1a; Getting Started with Qt for Android | Qt 5.15 网上的教程&#xff1a; qt5.15.2配置android_加油吧&#xff0c;小杜的博客-CSDN博客 注意 &#xff1a;注意ndk的路径中不能有空格&#xff0c;我之前…

【AIGC】AI欺诈,做好以下几点,无需忧虑

文章目录 前言列举几种AI欺诈的形式以及其识别方法1.AI深度学习生成的假视频、假图片2.AI自动生成的德文或语音3.AI自动注册账号和刷数据4.AI智能防御机制 如何预防&#xff1f;1.提高公众警惕性2.发展AI监测技术3.加强关键领域的人工审核4.完善法律法规5.国际合作与交流6.开源…

图表控件LightningChart .NET v.10.4.1已经发布!新增DataCursor功能、ZoomBar自定义控件

LightningChart.NET原名LightningChart Ultimate SDK&#xff0c;是一款高性能WPF和Winforms图表,可以实时可视化多达1万亿个数据点。LightningChart完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的…

bmp转jpg怎么转?bmp转换jpg的几个方法

bmp转换jpg的几个方法~什么是BMP呢&#xff1f;BMP是位图文件格式的一种&#xff0c;全称为Bitmap&#xff08;位图&#xff09;&#xff0c;是一种基于像素的图像文件格式。BMP是Windows操作系统中最常用的图像格式之一&#xff0c;通常以.bmp或.dib作为文件扩展名。BMP文件格…

LabVIEWCompactRIO 开发指南32 确保无损数据传输

LabVIEWCompactRIO 开发指南32 确保无损数据传输 如果无损数据传输很重要&#xff0c;或者如果要将数据从多个I/O通道传输到同一DMA FIFO&#xff0c;则必须能够监控DMA机制的状态并对发生的任何故障做出反应。在FPGADMA写入节点上&#xff0c;超时通常表示DMA缓冲器已满。当…

华为OD机试之处理器问题(Java源码)

处理器问题 题目描述 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器&#xff0c;编号分别为0、1、2、3、4、5、6、7。 编号0-3的处理器处于同一个链路中&#xff0c;编号4-7的处理器处于另外一个链路中&#xff0c;不通链路中的处理器不能通信。 如下图所示。…

IEEE独立出版 | 第七届计算机科学与智能控制国际会议(ISCSIC 2023)

会议简介 Brief Introduction 第七届计算机科学与智能控制国际会议(ISCSIC 2023) 会议时间&#xff1a;2023年10月27日-29日 召开地点&#xff1a;中国南京 大会官网&#xff1a; ISCSIC 2023-2023 7th International Symposium on Computer Science and Intelligent Control(I…

大型企业建设财务共享中心需要重视的5个核心要素

随着数字化技术和财务共享的发展&#xff0c;财务共享建设正逐步深化。为发挥企业财务共享中心的最大价值&#xff0c;用友网络财务共享专家唐勇提出了5个关键点&#xff0c;需要企业重视&#xff1a; 从整体财务职能转型的视角规划财务共享中心的定位&#xff1a; 企业在规划…

为年迈母亲打造的“亲情关怀”视频聊天软件

写在前面 母亲的眼神越来越不好了&#xff0c;长期干农活的手也愈加粗糙&#xff0c;智能手机本是一个平常之物&#xff0c;她确无缘使用&#xff0c;现在仍在不断更换着“翻盖手机”。为了能让她绕开微信视频聊天那些繁琐而容易点错的功能&#xff0c;程序员的我“开发”下面…

如何通过QQ进行手机号溯源

0x01 通过在线网址查询 Q绑在线查询&#xff1a;http://2k.24kz.cn/ 0x02 非数据库查询方法 如果上述的网址查询不到信息的号。会提示说没有找到 可能说明数据库中并无该qq号所绑定手机号的信息 开始正题&#xff1a; 第一步&#xff1a;点击添加账号&#xff0c;复制其QQ账…

Prompt Engineering | 文本转换prompt

LLM非常擅长将输入转换成不同的格式&#xff0c;例如多语种文本翻译、拼写及语法纠正、语气调整、格式转换等。 文章目录 1、文本翻译1.1、中文转西班牙语1.2、识别语种1.3、多语种翻译1.4、翻译正式语气1.4、通用翻译器 2、语气 / 风格调整3、格式转换4、拼写及语法纠正5、一个…

2021上半年

2021上半年 a 程序计数器pc d 更正一下&#xff1a;都是支持流水线技术的 DMA传送数据不需要CPU干预&#xff0c;和io设备并行工作&#xff08;存储周期&#xff09; c c c b c 关于TLS: B B D A D 保护的是&#xff1a;软件程序和文档 D B C B 前向传播&#xff1…

Containerd+Kubernetes搭建k8s集群

ContainerdKubernetes搭建k8s集群 文档说明安装软件的版本和下载地址环境说明服务器准备负载均衡IP地址准备 安装步骤环境设置关闭防火墙关闭SELinux关闭swap分区设置主机名称解析设置主机名称加载 br_netfilter 模块桥接的IPv4流量传递到iptables升级操作系统内核导入elrepo g…

Three.js--》实现3d汽车模型展览搭建

目录 项目搭建 初始化three.js基础代码 添加汽车模型展示 动态修改汽车模型 今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 项目搭建 本案例还是借助…

makefile make 的隐式规则

文章目录 前言一、什么是隐式规则?二、典型隐式规则情况三、查看隐式规则四、隐式规则的禁用五、隐式规则的副作用总结 前言 一、什么是隐式规则? make 提供了一些常用的&#xff0c;例行的规则实现。 当相应的规则未提供时 &#xff0c; make 尝试使用隐式规则。 make 提供…

KDZK-F水轮发电机转子测试仪

一、产品概述 KDZK-F水轮发电机转子测试仪是判断发电机转子绕组有无匝间短路的专用仪器&#xff0c;可以自动、手动&#xff08;单向或双向&#xff09;测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标&#xff0c;操作更方便。 可选择快速的…

手写操作系统必掌握基础:函数调用约定

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。深入研究Windows内核、Linux内核、Hotspot源码…聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写模拟器、手写编程语言… 目前我已经做了两个成熟的课程&#xff1a;手写JVM、手写OS&a…

RTX4060 系 2399 元起,NVIDIA 又赢麻了

就在上周&#xff0c;NVIDIA 正式官宣了 RTX40 系显卡家族中更加主流的三款新品。 分别是 RTX 4060、RTX 4060 Ti 8G 以及 RTX 4060 Ti 16G。 其中 RTX 4060 Ti 8G 解禁时间为本月 23 日晚&#xff0c;24 日上架开售。 而 RTX 4060、RTX 4060 Ti 16G 要等到七月份。 价格部分…

2023年湖北建筑架子工报名流程?报名需要什么资料?考试一次过?

2023年湖北建筑架子工报名流程&#xff1f;报名需要什么资料&#xff1f;考试一次过&#xff1f; 建筑架子工证是建筑行业必备的证书之一&#xff0c;它是证明持有人可以在建筑工地上从事搭建脚手架、模板等施工工作的重要证明。启程别告诉你架子工的报名流程和资料。 百度搜一…