블루투스 스피커로 Raspberry Pi 3 설정


36

Raspbian Jessie를 사용하여 Raspberry Pi 3을 블루투스 스피커로 구성하는 방법을 찾고 있습니다. 내가 의미하는 블루투스 스피커로하는 블루투스 사용 A2DP를 통해 오디오 스트림을 수신하고, 오디오 잭, HDMI 포트 또는 USB 오디오 어댑터를 통해 라즈베리 파이에 연결된 스피커를 통해 재생할 사용할 수 있습니다.

다른 자습서는 온라인에서 사용할 수 있지만 상당히 구식이며 대부분 더 이상 작동하지 않습니다.


"블루투스 스피커로"가 무슨 뜻인지 불분명합니다.
Milliways

1
편집했습니다. 희망은 지금 분명하다
gtatr

나에게 완전히 명확하게, 나는 실제 답변을 읽는 데 관심이 있습니다.
Burt_Harris

투표 솔루션은 내가 끝낸 비슷한 경로입니다. 그러나, 나는 github repo를 가지고 있습니다. 이것은 raspbian Jessie Lite의 새로운 설치에서 당신을 위해 설정할 것입니다 (Jessie가 픽셀로 약간 구성없이 작동하는지 확실하지 않은 경우) 단순히 여기의 설치 지침을 따르십시오 : github.com/bareinhard/… . 기존 솔루션에서 볼 수있는 주요 문제는 기본적으로 pulseaudio5를 사용한다는 것입니다. 이것은 pa6을 컴파일하고 pa5가 경험하는 많은 재생 문제를 제거합니다.
Brett Reinhard

답변:


25

나는이 프로젝트를 잠시 후에 (친구가 졸업을 위해 서류를 작성하도록 도와주었습니다) 온라인 프로젝트를 잘 수행합니다 (파이 처리 오디오가 pi를 상당히 지연 시키지만 전압 강하가 유일한 방법으로 멈추게하지만) 재부팅하려면 전원 케이블을 분리하십시오).

이것은 내가 작업 한 단계이며 라스베리 파이 3에서 작동합니다.

1. 필요한 패키지를 다운로드

이 프로젝트는 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

설치하고 다음 단계로 진행하십시오.

2. 구성 편집 및 적용

먼저 다음과 같이 그룹에 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/libMKDIR을 사용하여

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

3. 오디오 페어링 및 연결

터미널로 이동하여을 입력하십시오 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:xx는 전화 블루투스 MAC 주소는 당신입니다. 그리고 trust xx:xx:xx:xx:xx:xx where xx:xx:xx:xx:xx:xx당신의 전화 블루투스 맥 주소 를 신뢰하는 것을 잊지 마십시오. 그리고 당신은 라즈베리를 사용하여 블루투스 앰프 (또는 이름이 무엇이든)가 있습니다.

4. 결론

시도하고 실험 한 후, 오디오 품질이 낮다는 것을 알았습니다. 라즈베리로 스트리밍되는 노래와 함께 사용하면 라즈베리가 얼어 붙기 때문에 오히려 그것을 사용하지 않습니다. 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.
gtatr

또한,와 bluetoothctl내가 할 때 connect xx:xx:xx:xx:xx:xx내가 얻을 Failed to connect: org.bluez.Error.Failed중 내 휴대 전화 나 노트북 사용
gtatr을

어떤 운영 체제를 사용하고 있습니까? 라즈베리 파이 3 온보드 블루투스를 지원하는 유일한 OS는 라즈 비안 Jessie와 Ubuntu Mate> 16.04입니다. Ubuntu Mate Bluetooth에는 a2dp가 이미 있으므로 Bluetooth 관리자에서 확인할 수 있습니다.
xdhe

이미 온라인 자습서를 시도하고 엉망인 경우 패키지 구성을 다시 설치하고 제거하는 것이 가장 좋습니다. 수동으로 'rpi-bluetooth'패키지를 설치하여 Bluetooth 패키지를 엉망으로 만들었는데 Bluetooth가 작동하지 않습니다. 그래서 나는 라즈 비안 이미지를 다시 플래시했으며 소리가 즐거운 IMO는 아니지만 잘 작동합니다.
xdhe

새로 설치된 라즈 비안 Jessie를 사용하고 있으며 단계별로 지침을 따르고 있었으며, 새로 설치된 OS에서 누락 된 단계가있을 수 있습니다. 우분투는 시도 메이트 줄 수도
gtatr

16

PulseAudio를 사용하지 않는 대체 솔루션은 다음과 같습니다. https://github.com/lukasjapan/bt-speaker

다음을 사용하여 루트로 raspbian에 설치하십시오.

curl -s https://raw.githubusercontent.com/lukasjapan/bt-speaker/master/install.sh | bash

A2DP / AVRCP 용 단일 클라이언트를 자동으로 수락하고 오디오 스트림을 ALSA로 직접 파이프하는 블루투스 스피커 데몬을 시작합니다.


보안 알림 : 본인이 직접 스크립트를 작성하여 안전하다는 것을 확신 할 수 있지만 내용을 직접 확인하십시오
Lukas

좋은! 나는 다음 날에 이것을 시험하려고 노력할 것이다
gtatr

1
나는 당신의 해결책을 시험해 보았지만 효과가 있었지만 오디오는 매초마다 멈추었습니다. 왜 이런 일이 발생합니까?
wolfram77.

대부분의 경우 와이파이 문제 : github.com/lukasjapan/bt-speaker/issues/4
루카스

3

내 블로그에 Raspberry Pi 3 대한 간결한 지침을 작성했습니다 . 대부분의 온라인 지침은 이전 버전의 Debian / Xbian에 대한 것입니다. 다음은 Xbian으로 Raspberry Pi 3을 테스트하고 작업하는 지침입니다.

  1. 모든 패키지 설치 / 업데이트로 시작

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install pulseaudio-module-bluetooth bluez-tools
    
  2. 그룹에 사용자를 추가하십시오. 이건 매우 중요합니다. 다른 배포판을 사용하는 경우 '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
    
  3. 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 클래스 옵션을 탐색하려면 이 링크 를 참조하십시오 .

  1. 장치와 페어링하려면 "bluetoothctl"도구를 사용해야합니다.

    sudo bluetoothctl
    
  2. 에이전트를 KeyboardOnly로 설정하고 기본값으로 설정하십시오. 이 작업은 한 번만 수행하면됩니다. bluetoothctl 내부에서 다음 명령을 실행하십시오.

    agent KeyboardOnly
    default-agent
    
  3. 휴대 전화 / 태블릿에서 블루투스를 켜고 검색 가능한지 확인합니다. bluetoothctl 내에서 다음 명령을 실행하십시오.

    scan on
    pair xx:xx:xx:...
    trust xx:xx:xx:...
    exit
    

    xx : xx : xx : ..는 핸드셋 / 장치의 MAC 주소입니다. '스캔 (scan on)'을 실행 한 후 장치가 MAC 주소와 함께 표시 될 때까지 잠시 기다립니다. 'pair xx : xx : xx : ..'를 실행 한 후 장치를 확인하고 들어오는 연결을 수락하십시오. yes를 입력하여 터미널에서도 동일하게 수행하십시오.

  4. 이제 핸드셋에서 Raspberry Pi에 연결하면 오디오 장치로 연결해야합니다. 장치를 통해 재생되는 모든 오디오는 이제 Pi의 구성에 따라 Raspberry Pi의 HDMI 또는 아날로그 출력을 사용하여 출력됩니다.

  5. 연결이 실패하면 다시 시도하십시오. 때로는 두 번의 시도가 필요합니다.


답변 해 주셔서 감사합니다. 링크 전용 답변은 반대편에 무엇이 있는지 알려주지 않으므로 권장하지 않습니다 . 링크 된 기사가 변경되거나 사라지면이 답변도 마찬가지입니다. 중요한 요점을 요약 할 수 있습니까?
goobering

@goobering : 게시물이 업데이트되었습니다. 스택 사이트의 서식에 익숙하지 않지만 최선을 다해 형식을 지정했습니다. 시간을내어 답변을 검토해 주셔서 감사합니다. 좋은 하루 되세요
Abdul Mueid

1
고르지 못한 오디오를 수정하기 위해 무엇을 했습니까?
NoBugs

매우 고르지 않습니다. 파이를 오버 클럭해야합니까?
b-ak

1
Abdul의 지침은 완벽하게 작동하지만 BT 스피커를 통한 오디오 출력은 매우 고르지 않습니다. 어떤 경우에도 오디오 품질이 만족스럽지 않습니다. Pulseaudio를 통한 PI 네이티브 오디오는 매우 엉성합니다. 블루투스보다 훨씬 더 나은 솔루션을위한 시간입니다.
Don Allen

0

해당 경로를 시작하기 전에 RPi 3.5mm 오디오 잭 출력의 품질이 좋지 않은 것으로 간주 했습니까?

라즈베리 파이의 사운드 출력

최신 자습서를 찾을 수없는 이유 일 수 있습니다.

공평하게도, 다른 이유는 적절한 스피커 쌍이 적절한 Bluetooth 스피커보다 비싸지 않기 때문일 수 있습니다. USB 사운드 카드에 투자하려는 의도가 아니라면이 경로를 따르지 않을 것입니다 (비싸지 않지만 총 가격이 지금 상승하기 시작 함). 아니면 HDMI 출력을 사용할 계획입니까? 정말 좋습니다.

이건 어때? 모든 구성 요소를 즉시 사용할 수 있어야합니다.

http://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth-A/

이것은 나의 첫 번째 RPi 프로젝트였습니다. 나는 철저하게 보지 못했지만 MPD 구성 요소를 사용하여 Bluetooth를 RPi로 스트리밍 할 수 있다고 생각합니다. 그 연구를하도록 내버려 두겠습니다.

http://www.bobrathbone.com/raspberrypi_radio.htm


나는 거기에 더 나은 준비된 솔루션이 있고 너무 비싸지 않다는 사실에 동의합니다. 그러나 이것이 더 큰 프로젝트의 일부가
되기를 바랍니다.

나는 노인 지시의 이유에 대해서만 추측합니다. 그러나 잠재적 솔루션에 대한 다른 참고 사항을 참조하십시오. MPD 데몬을보십시오. 틀릴 수도 있지만 Bt를 스트리밍 할 수 있다고 생각합니다. 좀 더 자세하게 사용할 수 있습니다. 3.5mm 오디오 잭을 사용하려는 경우 아마 75 %에서 잘 작동하지만 볼륨 제어를 위해 외부 앰프를 사용해야합니다.
KDM

btw 나는 그 튜토리얼과 거의 모든 다른 튜토리얼을 시도했지만 성공하지 못했습니다
gtatr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.