Tôi đã tham gia dự án này sau một thời gian (để giúp bạn tôi làm bài tốt nghiệp) và thấy dự án trực tuyến hoạt động tốt (mặc dù pi xử lý âm thanh khá chậm pi, và sụt áp làm cho nó đóng băng như là cách duy nhất để làm cho nó khởi động lại là rút cáp nguồn).
Đây là bước mà tôi đã làm việc và nó hoạt động trên raspberry pi 3.
1. Tải về gói yêu cầu
Dự án này phụ thuộc vào pulseaudio vì vậy hãy lấy nó và cài đặt bằng cách gõ:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
Tôi thay vì cập nhật firmware của mâm xôi trước khi cài đặt chúng vì tôi gặp vấn đề với rpi-bluetooth
gói nên tôi làm:
sudo rpi-update
và làm cho nó cài đặt và tiến tới bước tiếp theo.
2. Chỉnh sửa cấu hình và áp dụng nó
Đầu tiên thêm tên người dùng pi vào nhóm pulseaudio với
sudo usermod -a -G lp pi
tạo cấu hình mới trong /etc/bluetooth/audio.conf bằng trình soạn thảo văn bản và thêm dòng sau
[General]:
Enable=Source,Sink,Media,Socket
chỉnh sửa tệp /etc/bluetooth/main.conf
bằng trình soạn thảo văn bản ưa thích của bạn (Tôi đang sử dụng nano).
Đặt Lớp Bluetooth, Sửa đổi dòng sau thành:
Class = 0x00041C
0x000041C
có nghĩa là bluetooth rpi hỗ trợ giao thức A2DP.
thay đổi /etc/pulse/daemon.conf
thêm / sửa đổi (đừng quên kiểm tra kỹ mã trước khi thêm chúng) và thay đổi
resample-method = trivial
bạn có thể sử dụng bất kỳ phương pháp nào bạn thích, cá nhân tôi sử dụng speex-float-3
để tham khảo bạn có thể thấy liên kết này
bắt đầu dịch vụ pulseaudio với:
pulseaudio -D
chúng tôi sẽ sử dụng tập lệnh ragusa87 để tự động hóa nguồn bluetooth sang âm thanh chìm. Trước tiên, vui lòng thêm cấu hình mới vào udev init.d bằng cách chỉnh sửa tệp /etc/udev/rules.d/99-input.rules
và thêm tệp này vào tệp
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
thêm thư mục udev
vào /usr/lib
bằng cách sử dụng mkdir
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
và thêm phần này vào tập tin bluetooth (tín dụng ragusa87)
#!/bin/bash
# This script is called by udev when you link a bluetooth device with your computer
# It's called to add or remove the device from pulseaudio
#
#
# Output to this file
LOGFILE="/var/log/bluetooth_dev"
# Name of the local sink in this computer
# You can get it by calling : pactl list short sinks
# AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo"
AUDIOSINK="alsa_output.0.analog-stereo.monitor"
# User used to execute pulseaudio, an active session must be open to avoid errors
USER="pi"
# Audio Output for raspberry-pi
# 0=auto, 1=headphones, 2=hdmi.
AUDIO_OUTPUT=1
# If on, this computer is not discovearable when an audio device is connected
# 0=off, 1=on
ENABLE_BT_DISCOVER=1
echo "For output see $LOGFILE"
## This function add the pulseaudio loopback interface from source to sink
## The source is set by the bluetooth mac address using XX_XX_XX_XX_XX_XX format.
## param: XX_XX_XX_XX_XX_XX
## return 0 on success
add_from_mac(){
if [ -z "$1" ] # zero params
then
echo "Mac not found" >> $LOGFILE
else
mac=$1 # Mac is parameter-1
# Setting source name
bluez_dev=bluez_source.$mac
echo "bluez source: $mac" >> $LOGFILE
# This script is called early, we just wait to be sure that pulseaudio discovered the device
sleep 1
# Very that the source is present
CONFIRM=`sudo -u pi pactl list short | grep $bluez_dev`
if [ ! -z "$CONFIRM" ]
then
echo "Adding the loopback interface: $bluez_dev" >> $LOGFILE
echo "sudo -u $USER pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0" >> $LOGFILE
# This command route audio from bluetooth source to the local sink..
# it's the main goal of this script
sudo -u $USER pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0 >> $LOGFILE
return $?
else
echo "Unable to find a bluetooth device compatible with pulsaudio using the following device: $bluez_dev" >> $LOGFILE
return -1
fi
fi
}
## This function set volume to maximum and choose the right output
## return 0 on success
volume_max(){
# Set the audio OUTPUT on raspberry pi
# amixer cset numid=3 <n>
# where n is 0=auto, 1=headphones, 2=hdmi.
amixer cset numid=3 $AUDIO_OUTPUT >> $LOGFILE
# Set volume level to 100 percent
amixer set Master 100% >> $LOGFILE
pacmd set-sink-volume 0 65537 >> $LOGFILE
return $?
}
## This function will detect the bluetooth mac address from input device and configure it.
## Lots of devices are seen as input devices. But Mac OS X is not detected as input
## return 0 on success
detect_mac_from_input(){
ERRORCODE=-1
echo "Detecting mac from input devices" >> $LOGFILE
for dev in $(find /sys/devices/virtual/input/ -name input*)
do
if [ -f "$dev/name" ]
then
mac=$(cat "$dev/name" | sed 's/:/_/g')
add_from_mac $mac
# Endfor if the command is successfull
ERRORCODE=$?
if [ $ERRORCODE -eq 0]; then
return 0
fi
fi
done
# Error
return $ERRORCODE
}
## This function will detect the bt mac address from dev-path and configure it.
## Devpath is set by udev on device link
## return 0 on success
detect_mac_from_devpath(){
ERRORCODE=-1
if [ ! -z "$DEVPATH" ]; then
echo "Detecting mac from DEVPATH" >> $LOGFILE
for dev in $(find /sys$DEVPATH -name address)
do
mac=$(cat "$dev" | sed 's/:/_/g')
add_from_mac $mac
# Endfor if the command is successfull
ERRORCODE=$?
if [ $ERRORCODE -eq 0]; then
return 0
fi
done
return $ERRORCODE;
else
echo "DEVPATH not set, wrong bluetooth device? " >> $LOGFILE
return -2
fi
return $ERRORCODE
}
## Detecting if an action is set
if [ -z "$ACTION" ]; then
echo "The script must be called from udev." >> $LOGFILE
exit -1;
fi
## Getting the action
ACTION=$(expr "$ACTION" : "\([a-zA-Z]\+\).*")
# Switch case
case "$ACTION" in
"add")
# Turn off bluetooth discovery before connecting existing BT device to audio
if [ $ENABLE_BT_DISCOVER -eq 1]; then
echo "Stet computer as hidden" >> $LOGFILE
hciconfig hci0 noscan
fi
# Turn volume to max
volume_max
# Detect BT Mac Address from input devices
detect_mac_from_input
OK=$?
# Detect BT Mac address from device path on a bluetooth event
if [ $OK != 0 ]; then
if [ "$SUBSYSTEM" == "bluetooth" ]; then
detect_mac_from_devpath
OK=$?
fi
fi
# Check if the add was successfull, otherwise display all available sources
if [ $OK != 0 ]; then
echo "Your bluetooth device is not detected !" >> $LOGFILE
echo "Available sources are:" >> $LOGFILE
sudo -u $USER pactl list short sources >> $LOGFILE
else
echo "Device successfully added " >> $LOGFILE
fi
;;
"remove")
# Turn on bluetooth discovery if device disconnects
if [ $ENABLE_BT_DISCOVER -eq 1]; then
echo "Set computer as visible" >> $LOGFILE
sudo hciconfig hci0 piscan
fi
echo "Removed" >> $LOGFILE
;;
#
*)
echo "Unsuported action $action" >> $LOGFILE
;;
esac
echo "--" >> $LOGFILE
XIN LƯU Ý rằng AUDIOSINK của bạn có thể khác với tôi, hãy kiểm tra nó trước khi sử dụng pactl list short sinks
làm cho tập lệnh thực thi bằng cách nhập mã này
chmod 777 bluetooth
cắm tai nghe để kiểm tra xem giắc âm thanh có hoạt động không và kiểm tra
aplay /usr/share/sounds/alsa/Front_Center.wav
hoặc bạn có thể đặt định tuyến âm thanh mặc định với
sudo amixer cset numid = 3 n
Trong đó n có thể là: 0 = auto 1 = jack 2 = hdmi
3. Ghép nối và kết nối âm thanh
đi đến thiết bị đầu cuối và loại bluetoothctl
. Trước tiên, hãy kích hoạt bluetooth power on
và sau đó agent on
, đặt tác nhân mặc định mà bạn đã chỉnh sửa trước default-agent
đó và sau đó đặt chế độ có thể khám phá và chế độ ghép nối với discoverable on; pairable on
. Bạn sẽ thấy bluetooth raspberrypi trên điện thoại hoặc máy tính xách tay của bạn và bạn có thể ghép nối nó trên điện thoại bằng cách nhấp vào nó và chạm vào cặp. Trên thiết bị đầu cuối bạn gõ y. Về nhà ga, bạn kết nối với điện thoại bằng cách loại connect xx:xx:xx:xx:xx:xx
nơi xx:xx:xx:xx:xx:x
x là bạn điện thoại địa chỉ bluetooth mac. và đừng quên tin tưởng vào trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
địa chỉ bluetooth mac của điện thoại Và voila bạn có bộ khuếch đại bluetooth (hoặc bất kể tên đó là gì) bằng cách sử dụng mâm xôi.
4. Kết luận
Sau khi thử và thử nghiệm, tôi phát hiện ra chất lượng âm thanh thấp và tôi không sử dụng nó vì mâm xôi sẽ bị đóng băng nếu bạn sử dụng nó với bài hát đang phát trực tiếp đến mâm xôi. Tôi khuyên bạn nên sử dụng dự án loa UPNP bằng cách sử dụng gmediarenderer. Âm thanh là tuyệt vời và không có độ trễ và âm thanh phân tán và nó có thể phát tệp âm thanh lossless (flac, wav, dll). Đây là chi tiết làm thế nào để thiết lập nó
tài liệu tham khảo:
hướng dẫn công việc ;
kịch bản của ragusa ;
công việc liên quan ;