ubuntu上使用SDL2库同步播放蓝牙接收到的pcm音频数据

工程文件我已经上传到github上:https://github.com/rickie-mi/Bluetooth_Audio_real-time_Play (如果有疑问的话欢迎私信和我交流)

前段时间项目要求做蓝牙,便买来一块蓝牙开发板自己试试。蓝牙芯片是8311,串口选的是ft232(试过CH340串口发现不行,手机上根本搜索不到该蓝牙芯片)。在ubuntu系统上跑蓝牙协议栈,通过串口获得蓝牙芯片传输来的数据。

在使用A2DP协议时,手机端作为播放源,蓝牙芯片作为音乐接收端。当手机上播放音乐时,蓝牙芯片接收到音频数据并解析后通过串口传到PC上,最终将音频数据以wav格式保存在项目的工程文件夹下。这部分代码是原先蓝牙协议栈开源代码。

为了尝试手机一边放音乐,在蓝牙芯片接收到音频后能够同步在Linux上直接播放,而不是保存在本地,安装了SDL2库,安装过程详见我的上一篇博客

修改Makefile

安装完成后需要在原先工程文件中添加相关内容,确保能够在编译链接时找到相关文件。
首先新建sdl-include和lib两个文件夹用于存放头文件和库。将SDL2安装目录下的_install文件夹中的include和lib两个文件夹内容直接拷贝过去。接着在项目工程的Makefile中添加如下内容

#include sdl
CFLAGS += -I${BTSTACK_ROOT}/sdl-include/sdl/

LKFLAGS += -lSDL2
LKFLAGS += -L${BTSTACK_ROOT}/lib

并修改a2dp_sink_demo的编译参数

a2dp_sink_demo: ${CORE_OBJ} ${COMMON_OBJ} ${CLASSIC_OBJ} ${SDP_CLIENT} ${SBC_DECODER_OBJ} ${AVDTP_OBJ} avrcp.o avrcp_controller.o avrcp_target.o btstack_resample.o a2dp_sink_demo.c
	${CC} $^ ${CFLAGS}  ${LKFLAGS}  ${LDFLAGS}  -o $@

这样程序在编译时便可以调用到SDL2头文件。同时由于SDL2的库已经被加载到了系统环境变量中,所以-lsdl2便可以在程序链接时被发现。

实时播放音频数据相关代码

SDL进行初始化,设置音频设备的接口、通道数等。设置回调函数file_audio

int SDL_config()
{
   
    //Init
    if(SDL_Init(SDL_INIT_AUDIO 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值