Saya telah berada di proyek ini setelah beberapa saat (untuk membantu teman saya mengerjakan makalah mereka untuk lulus) dan menemukan proyek online baik-baik saja (walaupun pi memproses audionya cukup tertinggal pi, dan penurunan tegangan membuatnya macet sebagai satu-satunya cara untuk membuatnya reboot berarti mencabut kabel daya).
Ini adalah langkah yang telah saya kerjakan dan ini bekerja pada raspberry pi 3.
1. Unduh paket yang diperlukan
Proyek ini bergantung pada pulseaudio, jadi ambil dan instal dengan mengetik:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
saya lebih suka memperbarui firmware raspberry terlebih dahulu sebelum menginstalnya karena saya punya masalah dengan rpi-bluetooth
paket jadi saya lakukan:
sudo rpi-update
dan membuatnya menginstal dan maju ke langkah selanjutnya.
2. Edit Konfigurasi dan terapkan
Pertama tambahkan pi username ke grup pulseaudio dengan
sudo usermod -a -G lp pi
buat config baru di bawah /etc/bluetooth/audio.conf menggunakan editor teks dan tambahkan baris berikut
[General]:
Enable=Source,Sink,Media,Socket
edit file /etc/bluetooth/main.conf
menggunakan editor teks pilihan Anda (Saya menggunakan nano).
Setel Kelas Bluetooth, Ubah baris berikut ke:
Class = 0x00041C
0x000041C
berarti rpi bluetooth mendukung protokol A2DP.
ubah /etc/pulse/daemon.conf
tambah / modifikasi (jangan lupa untuk memeriksa kode secara menyeluruh sebelum menambahkannya), dan ubah
resample-method = trivial
Anda dapat menggunakan metode apa pun yang Anda suka, saya pribadi menggunakan speex-float-3
untuk referensi Anda dapat melihat tautan ini
mulai layanan pulseaudio dengan:
pulseaudio -D
kita akan menggunakan skrip ragusa87 untuk mengotomatisasi sumber bluetooth ke wastafel audio. Pertama tolong tambahkan konfigurasi baru ke udev init.d dengan mengedit file /etc/udev/rules.d/99-input.rules
dan menambahkan ini ke file
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
tambahkan folder udev
ke /usr/lib
dengan menggunakan mkdir
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
dan tambahkan ini ke file bluetooth (kredit 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
TOLONG Catat bahwa AUDIOSINK Anda mungkin berbeda dengan milik saya, periksa sebelum menggunakannya pactl list short sinks
buat skrip dapat dieksekusi dengan memasukkan kode ini
chmod 777 bluetooth
pasang headset untuk menguji apakah jack audio berfungsi dan uji dengan
aplay /usr/share/sounds/alsa/Front_Center.wav
atau Anda dapat mengatur perutean audio default dengan
sudo amixer cset numid = 3 n
di mana n bisa menjadi: 0 = otomatis 1 = jack 2 = HDMI
3. Pasangkan dan Hubungkan audio
pergi ke terminal dan ketik bluetoothctl
. Pertama-tama aktifkan bluetooth dengan power on
dan agent on
, setel agen default yang telah Anda edit sebelumnya default-agent
, dan kemudian setel mode yang dapat ditemukan dan mode pasangan discoverable on; pairable on
. Anda akan melihat raspberrypi bluetooth di ponsel atau laptop Anda dan Anda dapat memasangkannya di telepon dengan mengklik dan menyentuh pasangan. Di terminal Anda mengetik y. Kembali ke terminal, Anda terhubung ke telepon berdasarkan jenis x di connect xx:xx:xx:xx:xx:xx
mana xx:xx:xx:xx:xx:x
Anda adalah alamat mac bluetooth ponsel. dan jangan lupa percaya dengan trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
alamat mac bluetooth ponsel Anda. Dan voila Anda memiliki amplifier Bluetooth (atau apa pun namanya) dengan menggunakan raspberry.
4. Kesimpulan
setelah mencoba dan bereksperimen, saya menemukan kualitas audio rendah dan saya lebih suka tidak menggunakannya karena raspberry akan macet jika Anda menggunakannya dengan lagu yang sedang streaming ke raspberry. Saya menyarankan untuk menggunakan proyek speaker UPNP dengan menggunakan gmediarenderer. Audio yang luar biasa dan tidak ada penundaan dan menyebarkan suara dan dapat memutar file audio lossless (flac, wav, dll). Ini adalah detail cara mengaturnya
referensi:
tutorial jobpassion ;
naskah ragusa ;
pekerjaan terkait ;