Raspbian Jessie를 사용하여 Raspberry Pi 3을 블루투스 스피커로 구성하는 방법을 찾고 있습니다. 내가 의미하는 블루투스 스피커로하는 블루투스 사용 A2DP를 통해 오디오 스트림을 수신하고, 오디오 잭, HDMI 포트 또는 USB 오디오 어댑터를 통해 라즈베리 파이에 연결된 스피커를 통해 재생할 사용할 수 있습니다.
다른 자습서는 온라인에서 사용할 수 있지만 상당히 구식이며 대부분 더 이상 작동하지 않습니다.
Raspbian Jessie를 사용하여 Raspberry Pi 3을 블루투스 스피커로 구성하는 방법을 찾고 있습니다. 내가 의미하는 블루투스 스피커로하는 블루투스 사용 A2DP를 통해 오디오 스트림을 수신하고, 오디오 잭, HDMI 포트 또는 USB 오디오 어댑터를 통해 라즈베리 파이에 연결된 스피커를 통해 재생할 사용할 수 있습니다.
다른 자습서는 온라인에서 사용할 수 있지만 상당히 구식이며 대부분 더 이상 작동하지 않습니다.
답변:
나는이 프로젝트를 잠시 후에 (친구가 졸업을 위해 서류를 작성하도록 도와주었습니다) 온라인 프로젝트를 잘 수행합니다 (파이 처리 오디오가 pi를 상당히 지연 시키지만 전압 강하가 유일한 방법으로 멈추게하지만) 재부팅하려면 전원 케이블을 분리하십시오).
이것은 내가 작업 한 단계이며 라스베리 파이 3에서 작동합니다.
이 프로젝트는 pulseaudio에 의존하므로 다음을 입력하여 설치하십시오 :
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
rpi-bluetooth
패키지에 문제가 있기 때문에 먼저 설치하기 전에 먼저 라즈베리의 펌웨어를 업데이트하십시오 .
sudo rpi-update
설치하고 다음 단계로 진행하십시오.
먼저 다음과 같이 그룹에 audio 사용자 이름을 추가합니다.
sudo usermod -a -G lp pi
텍스트 편집기를 사용하여 /etc/bluetooth/audio.conf에서 새 구성을 만들고 다음 줄을 추가하십시오.
[General]:
Enable=Source,Sink,Media,Socket
/etc/bluetooth/main.conf
원하는 텍스트 편집기를 사용하여 파일 을 편집하십시오 (나노를 사용하고 있습니다).
Bluetooth 클래스를 설정하고 다음 줄을 수정하십시오.
Class = 0x00041C
0x000041C
rpi 블루투스가 A2DP 프로토콜을 지원함을 의미합니다.
변경 /etc/pulse/daemon.conf
추가 / (추가하기 전에 철저하게 코드를 확인하는 것을 잊지 마세요), 수정 및 변경
resample-method = trivial
당신은 당신이 좋아하는 방법을 사용할 수 있습니다, 나는 개인적 speex-float-3
으로 참조 를 위해 사용 하면이 링크를 볼 수 있습니다
다음을 사용하여 pulseaudio 서비스를 시작하십시오.
pulseaudio -D
우리는 ragusa87 스크립트를 사용하여 블루투스 소스를 오디오 싱크로 자동화 할 것입니다. 먼저 파일을 편집하여 udev init.d에 새 구성을 /etc/udev/rules.d/99-input.rules
추가하고 파일에 추가하십시오
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
폴더 추가 udev
로 /usr/lib
MKDIR을 사용하여
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
이것을 파일 블루투스에 추가하십시오 (credits 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
AUDIOSINK가 내 것과 다를 수 있으므로 사용 전에 확인하십시오
pactl list short sinks
이 코드를 입력하여 스크립트를 실행 가능하게 만드십시오.
chmod 777 bluetooth
헤드셋을 연결하여 오디오 잭이 작동하는지 테스트하고
aplay /usr/share/sounds/alsa/Front_Center.wav
또는 다음을 사용하여 기본 오디오 라우팅을 설정할 수 있습니다
sudo 믹서 cset numid = 3 n
여기서 n은 다음과 같습니다. 0 = 자동 1 = 잭 2 = hdmi
터미널로 이동하여을 입력하십시오 bluetoothctl
. 먼저로 블루투스를 활성화 power on
한 다음로 agent on
이전에 편집했던 기본 에이전트 default-agent
를 설정 한 다음 검색 가능한 모드 및 페어링 모드를로 설정하십시오 discoverable on; pairable on
. 휴대 전화 나 노트북에 raspberrypi 블루투스가 표시되어야하며 휴대 전화에서 클릭하여 페어링하면 터치 할 수 있습니다. 터미널에서 y를 입력하십시오. 위로 터미널에 다음을 입력하여 전화에 연결하는 connect xx:xx:xx:xx:xx:xx
경우 xx:xx:xx:xx:xx:x
x는 전화 블루투스 MAC 주소는 당신입니다. 그리고 trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
당신의 전화 블루투스 맥 주소 를 신뢰하는 것을 잊지 마십시오. 그리고 당신은 라즈베리를 사용하여 블루투스 앰프 (또는 이름이 무엇이든)가 있습니다.
시도하고 실험 한 후, 오디오 품질이 낮다는 것을 알았습니다. 라즈베리로 스트리밍되는 노래와 함께 사용하면 라즈베리가 얼어 붙기 때문에 오히려 그것을 사용하지 않습니다. gmediarenderer를 사용하여 UPNP 스피커 프로젝트를 사용하는 것이 좋습니다. 오디오는 훌륭하고 지연 및 분산 사운드가 없으며 무손실 오디오 파일 (flac, wav, dll)을 재생할 수 있습니다. 자세한 설정 방법입니다
참조 : jobpassion의 튜토리얼 ; 라구 사의 대본 ; 관련 작업 ;
sudo service pulseaudio restart
, 나는 얻는다Failed to restart pulseaudio.service: Unit pulseaudio.service failed to load: No such file or directory.
bluetoothctl
내가 할 때 connect xx:xx:xx:xx:xx:xx
내가 얻을 Failed to connect: org.bluez.Error.Failed
중 내 휴대 전화 나 노트북 사용
PulseAudio를 사용하지 않는 대체 솔루션은 다음과 같습니다. https://github.com/lukasjapan/bt-speaker
다음을 사용하여 루트로 raspbian에 설치하십시오.
curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash
A2DP / AVRCP 용 단일 클라이언트를 자동으로 수락하고 오디오 스트림을 ALSA로 직접 파이프하는 블루투스 스피커 데몬을 시작합니다.
내 블로그에 Raspberry Pi 3 에 대한 간결한 지침을 작성했습니다 . 대부분의 온라인 지침은 이전 버전의 Debian / Xbian에 대한 것입니다. 다음은 Xbian으로 Raspberry Pi 3을 테스트하고 작업하는 지침입니다.
모든 패키지 설치 / 업데이트로 시작
sudo apt-get update sudo apt-get upgrade sudo apt-get install pulseaudio-module-bluetooth bluez-tools
그룹에 사용자를 추가하십시오. 이건 매우 중요합니다. 다른 배포판을 사용하는 경우 'xbian'을 사용자 이름으로 바꾸십시오.
sudo gpasswd -a xbian pulse sudo gpasswd -a xbian lp sudo gpasswd -a pulse lp sudo gpasswd -a xbian audio sudo gpasswd -a pulse audio
PulseAudio 및 Bluetooth 장치 클래스 설정
sudo sh -c "echo 'extra-arguments = --exit-idle-time=-1 --log-target=syslog' >> /etc/pulse/client.conf" sudo hciconfig hci0 up sudo hciconfig hci0 class 0x200420 sudo reboot
Bluetooth 서비스 / 장치 클래스 0x200420은 장치가 카 오디오 용으로 설정되었음을 의미합니다. 더 많은 Bluetooth 클래스 옵션을 탐색하려면 이 링크 를 참조하십시오 .
장치와 페어링하려면 "bluetoothctl"도구를 사용해야합니다.
sudo bluetoothctl
에이전트를 KeyboardOnly로 설정하고 기본값으로 설정하십시오. 이 작업은 한 번만 수행하면됩니다. bluetoothctl 내부에서 다음 명령을 실행하십시오.
agent KeyboardOnly default-agent
휴대 전화 / 태블릿에서 블루투스를 켜고 검색 가능한지 확인합니다. bluetoothctl 내에서 다음 명령을 실행하십시오.
scan on pair xx:xx:xx:... trust xx:xx:xx:... exit
xx : xx : xx : ..는 핸드셋 / 장치의 MAC 주소입니다. '스캔 (scan on)'을 실행 한 후 장치가 MAC 주소와 함께 표시 될 때까지 잠시 기다립니다. 'pair xx : xx : xx : ..'를 실행 한 후 장치를 확인하고 들어오는 연결을 수락하십시오. yes를 입력하여 터미널에서도 동일하게 수행하십시오.
이제 핸드셋에서 Raspberry Pi에 연결하면 오디오 장치로 연결해야합니다. 장치를 통해 재생되는 모든 오디오는 이제 Pi의 구성에 따라 Raspberry Pi의 HDMI 또는 아날로그 출력을 사용하여 출력됩니다.
연결이 실패하면 다시 시도하십시오. 때로는 두 번의 시도가 필요합니다.
해당 경로를 시작하기 전에 RPi 3.5mm 오디오 잭 출력의 품질이 좋지 않은 것으로 간주 했습니까?
최신 자습서를 찾을 수없는 이유 일 수 있습니다.
공평하게도, 다른 이유는 적절한 스피커 쌍이 적절한 Bluetooth 스피커보다 비싸지 않기 때문일 수 있습니다. USB 사운드 카드에 투자하려는 의도가 아니라면이 경로를 따르지 않을 것입니다 (비싸지 않지만 총 가격이 지금 상승하기 시작 함). 아니면 HDMI 출력을 사용할 계획입니까? 정말 좋습니다.
이건 어때? 모든 구성 요소를 즉시 사용할 수 있어야합니다.
http://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth-A/
이것은 나의 첫 번째 RPi 프로젝트였습니다. 나는 철저하게 보지 못했지만 MPD 구성 요소를 사용하여 Bluetooth를 RPi로 스트리밍 할 수 있다고 생각합니다. 그 연구를하도록 내버려 두겠습니다.