基于树莓派的手机音频播放功能实现

版权声明:如需转载请注明出处 https://blog.csdn.net/zhonglunshun/article/details/82013705

使用手机控制树莓派播放音频,有几种方式,我这里介绍两种,一种是传统的蓝牙传输方式,一种是airplay方式(苹果专属)

首先讲一下AirPlay方式:

连接wifi

首先使用ssh登录到树莓派
然后在配合文件中添加需要连接到的wifi名字:

vim /etc/wpa_supplicant/wpa_supplicant.conf
添加一个wifi:

network={
     ssid="guess"
     psk="bugaosuni"
     key_mgmt=WPA-PSK
 }

更新源

vim /etc/apt/sources.list

在里面替换源:
deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib

执行更新

udo apt-get update && apt-get upgrade -y

安装Airplay服务

以下的整个安装都是基于一个开源项目进行的,这是项目主页(https://github.com/juhovh/shairplay)。

安装依赖环境

sudo apt-get install autoconf automake libtool
sudo apt-get install libltdl-dev libao-dev libavahi-compat-libdnssd-dev
sudo apt-get install avahi-daemon

从GitHub上获取源码

git clone https://github.com/juhovh/shairplay.git

编译和安装

cd shairplay
./autogen.sh
./configure
make
sudo make install

启动

进入软件的当前目录。执行如下命令即可开启服务

shairplay -a your_AirPlay_Name

此时ios设备或者Mac设备连接在同一个Wifi下,便可看到支持AirPlay的设备,名称就是your_AirPlay_Name。点击连接后,苹果设备的音频信号就通过Wifi传输到树莓派的3.5mm音频口。这里可以接入音响的信号输入口。

完善

为了使树莓派每次上电后可以自动开启AirPlay服务。需要配置自启动,另外消除噪声。

创建启动脚本文件

cd /etc/init.d/
touch shairplay
nano shairplay

在其中复制一下内容:

#!/bin/bash
#
# This starts and stops shairplay
#
### BEGIN INIT INFO
# Provides: shairplay
# Required-Start: $network
# Required-Stop:
# Short-Description: Free portable AirPlay server implementation similar to ShairPort.
# Description: Free portable AirPlay server implementation similar to ShairPort.
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO


# Source function library.
. /lib/lsb/init-functions

DAEMON="/usr/local/bin/shairplay"
DAEMON_ARGS="-a your_AirPlay_Name"
AIRPORT_KEY_DIR="/usr/local/share/shairplay"

[ -x $binary ] || exit 0

RETVAL=0

start() {
 echo -n "Starting shairplay: "
 start-stop-daemon --start --quiet --chdir $AIRPORT_KEY_DIR \
 --exec "$DAEMON" -b --oknodo -- $DAEMON_ARGS
 log_end_msg $?
}

stop() {
 echo -n "Shutting down shairplay: "
 start-stop-daemon --stop --quiet --exec "$DAEMON" \
 --retry 1 --oknodo
 log_end_msg $?
}

restart() {
 stop
 sleep 1
 start
}

case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 status)
 status shairplay
 ;;
 restart)
 restart
 ;;
 *)
 echo "Usage: $0 {start|stop|status|restart}"
 ;;
esac
exit 0

加入执行权限

依次执行如下命令。赋予脚本执行权限,并且更新配置信息。

chmod +x /etc/init.d/shairplay
update-rc.d shairplay defaults

执行如下命令,切换到用户shairplay上一级目录
依次执行如下命令,拷贝airport.key

mkdir /usr/local/share/shairplay
cp shairplay/airport.key /usr/local/share/shairplay

输入一下命令,在etc/rc.local中添加内容

扫描二维码关注公众号,回复: 3222292 查看本文章
 vim /etc/rc.local

内容如下(在exit0之前)

# Don't run multiple instances - start just one screen, named "shairplay":
[[ $(screen -list | grep shairplay) == '' ]] &&
 screen -dmS shairplay sh
# Keep shairplay perpetually running. When it crashes, we can just SIGKILL it, and it comes back:
[[ $(ps aux | grep -v grep | grep pts | grep '/usr/bin/shairplay') == '' ]] &&
 screen -S shairplay -p 0 -X stuff "while true; do /usr/bin/shairplay --apname=Airamaplay --ao_devicename=default; sleep 2s; done
"

之后通过重启树莓派,就直接可以在苹果设备中选择AirPlay服务了。

消除噪音

如果音响输出有噪声,可以尝试树莓派Audio的pwm模式。
执行如下命令

vim /boot/config.txt

在最后增加如下配置参数

dtparam=audio=on
audio_pwm_mode=2

保存退出;

切换声卡

如果你用的不是树莓派的板载声卡而是外接的usb声卡,那么你需要配置一下才能实现音乐播放,否则播放的时候是没有声音的或者没有声音从声卡传出来;

树莓派使用的是alsa的音频架构, alsa的配置文件是alsa.conf,它位于/usr/share/alsa目录下,通常还有/usr/share/alsa/card和/usr/shara/alsa/pcm两个子目录用来设置card相关的参数、别名以及一些PCM默认设置。一般不修改里面的内容。
alsa.conf 引用了/etc/asound.conf 和 ~/.asoundrc两个文件,这两个文件可以配置默认声卡和指定音频输入和输出声卡。

通过修改/etc/asound.conf的内容,可以修改默认的声卡信息,也可以指定特定的MIC和Speack。

defaults.pcm.card 1  
defaults.pcm.device 0//一定要设置device号码  
defaults.ctl.card 1  
pcm.!default {
    type asym
    playback.pcm {
        type plug
        slave.pcm "hw:0,0"
    }
    capture.pcm {
        type plug
        slave.pcm "hw:1,0"
}

猜你喜欢

转载自blog.csdn.net/zhonglunshun/article/details/82013705