树莓派连接蓝牙音响并播放音频

前提准备

默认已经完成树莓派系统的烧录及更新

打开命令窗执行以下指令安装蓝牙相关包

sudo apt-get install pi-bluetooth bluez bluez-firmware blueman

方式一:通过桌面图形界面连接(播放有坑)

让树莓派先连接显示器,再外接鼠标键盘或者通过VNC之类的软件远程控制树莓派。具体方法网上有很多这里就不细说了。
然后找到蓝牙标识,左键添加设备即可。在这里插入图片描述
之后在旁边的小喇叭处右键,选择蓝牙音响作为播放设备,之后就可以使用蓝牙音响作为输出了
在这里插入图片描述
坑!!!!
我选蓝牙音响做输出时,蓝牙会先断开然后再连上,但是不能作为音频播放设备。
出现上述问题时,直接把蓝牙断开,然后直接选择蓝牙音响作为输出,树莓派会自动连接蓝牙音响,然后把蓝牙音响作为音频设备输出。如下图
在这里插入图片描述
在这里插入图片描述

方式二:通过命令窗连接(有坑)

首先输入以下指令进入蓝牙控制命令

sudo bluetoothctl

然后输入以下指令

power on

再输入

agent on

此时蓝牙已经准备好了,输入以下指令,开始搜索设备

sacn on

找到蓝牙音响对应的地址,类似 A0:9F:B2:C4:99:2C
然后输入以下指令进行连接

pair A0:9F:B2:C4:99:2C
trust A0:9F:B2:C4:99:2C
connect A0:9F:B2:C4:99:2C

连接成功后会显示出蓝牙设备的名称,然后exit退出就行,如下图

[京鱼座蓝牙小蛮腰]# exit

第二次连接

#进入蓝牙指令
sudo bluetoothctl
#查看已连接过的设备
devices
#找到对应的地址然后直接连接
connect A0:9F:B2:C4:99:2C
连接成功后退出即可

坑1:
有时候2次连接会失败,如:Failed to connect: org.bluez.Error.Failed,我找了网上很多解决办法都没解决,最后找到的方法是先播放了一个音频文件,再按二次连接的方法就连上了,不知道是什么奇怪的bug。
具体方法如下:

#include "stdlib.h"
#include <stdio.h>
void main(){
  //xxx是你音频文件的名字
  system("play xxx.mp3");
}

编译一个类似的.c文件,然后每次连接前执行一下就好
如果无法播放,则安装以下2个包即可

sudo apt-get install sox
sudo apt-get install libsox-fmt-all

坑2:蓝牙音响连上后,无法作为音频输出设备
我没找到命令窗下如何把蓝牙音响设为音频输出的指令,所以找了个简单粗暴的办法,把HDMI和AV Jack这两个输出都关了,蓝牙音箱连上就是默认输出设备。

如果您想使用Android的AudioRecorder录制音频,并在蓝牙音箱上播放,请按照以下步骤操作: 1. 配置和准备录音器 创建`AudioRecorder`对象,设置音频源、采样率、声道数、编码格式等参数,并调用`prepare()`方法准备录音器。 2. 启动录音 调用`start()`方法开始录音。录音期间,将蓝牙音箱连接到Android设备,并将其设置为音频输出源。 3. 播放录制的音频 录音完成后,您可以使用`MediaPlayer`对象加载和播放录制的音频文件。在播放期间,音频将通过蓝牙音箱进行输出。 下面是一个简单的示例代码: ``` private AudioRecorder audioRecorder; private MediaPlayer mediaPlayer; private void startRecordingAndPlayback() { audioRecorder = new AudioRecorder(); audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); audioRecorder.setAudioSamplingRate(44100); audioRecorder.setAudioChannels(2); audioRecorder.setOutputFile(getFilePath()); // 设置音频文件保存路径 try { audioRecorder.prepare(); audioRecorder.start(); } catch (Exception e) { e.printStackTrace(); } mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(getFilePath()); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepare(); mediaPlayer.start(); } private void stopRecordingAndPlayback() { if (mediaPlayer != null) { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } if (audioRecorder != null) { audioRecorder.stop(); audioRecorder.release(); audioRecorder = null; } } ``` 请注意,这只是一个基本示例。您可能需要根据自己的需求进行更改和优化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值