Ahududu Pi 3'ü bluetooth hoparlörü olarak ayarla


36

Raspberry Pi3'ü Raspbian Jessie kullanarak bluetooth hoparlörü olarak yapılandırmanın bir yolunu arıyorum. Bluetooth hoparlörü olarak demek istediğim, A2DP kullanarak bluetooth üzerinden ses akışı almak ve ses jakı, HDMI bağlantı noktası veya USB ses adaptörü aracılığıyla Ahududu Pi'ye bağlı hoparlörler üzerinden oynatmaktır.

Farklı dersler çevrimiçi olarak mevcuttur ancak oldukça eskidir ve çoğu artık çalışmaz.


Ne demek "bluetooth hoparlörü olarak"
derken

1
Düzenlenen. Umut şimdi açıktır
gtatr

Bana göre tamamen açık, gerçek cevapları okumakla ilgileniyorum.
Burt_Harris

Oylanan çözüm, devam etmeyi bıraktığım benzer bir rota. Bununla birlikte, sizin için yeni bir raspbian Jessie Lite kurulumu kuracak bir github repo'm var (Jessie ile piksel için küçük bir yapılandırma olmadan çalışıp çalışmadığından emin değilsiniz), buradaki yükleme yönergelerini izleyin: github.com/bareinhard/… . Mevcut çözümlerde gördüğüm en büyük sorun, varsayılan olarak pulseaudio5 kullanmalarıdır. Bu, pa6'yı derler ve pa5'in yaşadığı birçok oynatma sorunundan kurtulur.
Brett Reinhard

Yanıtlar:


25

Bir süre sonra bu projedeyim (arkadaşımın mezuniyet için kağıtlarını yapmasına yardım etmek için) ve çevrimiçi projeyi gayet iyi buluyorum (pi ses işleyen pi pi'yi geciktirse de, voltaj düşüşü tek yol olarak dondu) yeniden başlatmak için güç kablosunun çıkarılması gerekir).

Üzerinde çalıştığım adım bu ve ahududu pi 3 üzerinde çalışıyor.

1. Gerekli paketi indirin

Bu proje pulseaudio'ya bağlıdır, bu yüzden onu alın ve yazarak yükleyin:

sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev

rpi-bluetoothpaketi yüklemeden önce ahududu yazılımını güncellemeden önce bunları yüklemeyi tercih ederim :

sudo rpi-update

ve kurulumunu yapın ve bir sonraki adıma geçin.

2. Yapılandırmayı düzenleyin ve uygulayın

İlk önce pulseaudio grubuna pi kullanıcı adı ekleyin.

sudo usermod -a -G lp pi

metin editörü kullanarak /etc/bluetooth/audio.conf altında yeni config oluşturun ve aşağıdaki satırı ekleyin

[General]:
Enable=Source,Sink,Media,Socket

/etc/bluetooth/main.conftercih ettiğiniz metin editörünü kullanarak dosyayı düzenleyin (nano kullanıyorum).

Bluetooth Sınıfını Ayarla, Aşağıdaki satırı aşağıdaki şekilde değiştirin:

 Class = 0x00041C

0x000041C rpi bluetooth'un A2DP protokolünü desteklediği anlamına gelir.

değişim /etc/pulse/daemon.conf ekle / (eklemeden önce iyice kodunu kontrol etmeyi unutmayın) değiştirin ve değişim

resample-method = trivial

İstediğiniz herhangi bir yöntemi kullanarak, şahsen speex-float-3referans olarak kullanarak bu bağlantıyı görebilirsiniz.

pulseaudio hizmetini aşağıdakilerle başlat:

pulseaudio -D

ragusa87 betiğini ses kaynağına bluetooth kaynağını otomatikleştirmek için kullanacağız. Öncelikle udev init.d'ye dosyayı düzenleyerek yeni yapılandırma ekleyin ve bunu dosyaya /etc/udev/rules.d/99-input.rulesekleyin.

SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"

Klasör eklemek udeviçin /usr/libmkdir kullanarak

sudo mkdir /usr/lib/udev && cd /usr/lib/udev

ve bunu bluetooth dosyasına ekleyin (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

LÜTFEN AUDIOSINK'iniz benimkinden farklı olabilir, kullanmadan önce kontrol edin. pactl list short sinks

Bu kodu girerek betiği çalıştırılabilir yap

chmod 777 bluetooth 

ses jakının çalışıp çalışmadığını test etmek için kulaklığı takın

 aplay /usr/share/sounds/alsa/Front_Center.wav

veya varsayılan ses yönlendirmesini

sudo amixer cset numid = 3 n

n olabilir: 0 = otomatik 1 = kriko 2 = hdmi

3. Sesi Eşleştir ve Bağla

terminale gidin ve yazın bluetoothctl. Önce power onve ile bluetooth özelliğini etkinleştirin agent on, ardından önceden düzenlemekte olduğunuz varsayılan ajanı default-agentayarlayın ve sonra keşfedilebilir modu ve eşleme modunu açık olarak ayarlayın discoverable on; pairable on. Telefonunuzda veya dizüstü bilgisayarınızda raspberrypi bluetooth'u görmelisiniz ve tıklatarak telefonda eşleşebilir ve çift dokunabilirsiniz. Terminalde y yazın. Geri terminali için, türe göre telefona bağlamak connect xx:xx:xx:xx:xx:xxnerede xx:xx:xx:xx:xx:xx telefonu bluetooth mac adresi sensin. ve güvenmeyi unutmayın unutma trust xx:xx:xx:xx:xx:xx where xx:xx:xx:xx:xx:xxtelefonunuz bluetooth mac adresi Ve voila ahududu kullanarak (veya ismi ne olursa olsun) bluetooth amplifikatörünüz var.

4. Sonuç

Denemeden ve denemeden sonra, ses kalitesinin düşük olduğunu öğrendim ve ahududuya akan şarkı ile birlikte kullanıyorsanız, ahududu donacak gibi kullanmamayı tercih ederim. UPNP konuşmacı projesini arabulucu kullanarak kullanmanızı öneririm. Ses süper ve gecikme ve saçılma sesi yok ve kayıpsız ses dosyası (flac, wav, dll) çalabilir. Bu nasıl ayrıntılı olarak kurulum için o

referans: jobpassion'ın öğreticisi ; Ragusa'nın senaryosu ; ilgili iş ;


Ben yürütmek mümkün değilim sudo service pulseaudio restart, ben alıyorumFailed to restart pulseaudio.service: Unit pulseaudio.service failed to load: No such file or directory.
gtatr

Üstelik ile bluetoothctlben ne zaman connect xx:xx:xx:xx:xx:xxben olsun Failed to connect: org.bluez.Error.Failedya benim telefon veya dizüstü kullanarak
gtatr

Hangi işletim sistemini kullanıyorsunuz? Ahududu pi 3 onboard bluetooth özelliğini destekleyen tek işletim sistemi raspbian Jessie ve Ubuntu Mate> 16.04. Ubuntu Mate bluetooth a2dp zaten mevcut, bu yüzden Bluetooth Yöneticisi'nde kontrol edebilirsiniz.
04’te

Herhangi bir çevrimiçi öğretici ve karmaşa denediyseniz, paketlerin yapılandırmasını yeniden kurup temizlemenin daha iyi olacağını düşünüyorum. El ile 'rpi-bluetooth' paketini kurarak Bluetooth paketleri ile uğraşıyorum ve Bluetooth çalışmıyor. Böylece raspbian imajını yeniden yansıttım ve ses hoş IMO olmasa da gayet iyi çalışıyor.
16’da

Yeni kurulan bir raspbian Jessie kullanıyorum ve talimatlarınızı adım adım izliyordum, belki de yeni kurulmuş bir işletim sisteminden gelen eksik bir adım olabilir. Ubuntu Mate'i bir deneyebilirim
gtatr

16

İşte PulseAudio'ya dayanmayan alternatif bir çözüm: https://github.com/lukasjapan/bt-speaker

Raspbian'a root olarak:

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

A2DP / AVRCP için tek bir istemciyi otomatik olarak kabul eden ve ses akışını doğrudan ALSA'ya yönlendiren bir bluetooth hoparlör arka plan programı başlatır.


Güvenlik hatırlatıcısı: Senaryoyu kendim yazdım, böylece güvenli olduğundan emin olabilirim ama lütfen içeriği kendin doğrula
Lukas

Güzel! Bunu önümüzdeki günlerde test etmeye çalışacağım
gtatr 16:17

1
çözümünüzü deniyordum ve işe yaradı ama ses her saniye sıkışmıştı. bu neden oluyor?
wolfram77

Wifi sorunu büyük olasılıkla: github.com/lukasjapan/bt-speaker/issues/4
Lukas

3

Bloguma Raspberry Pi 3 için kesin talimatlar yazdım . Çevrimiçi talimatların çoğu, Debian / Xbian’ın eski sürümleri içindir. İşte Xbian ile Raspberry Pi 3 üzerinde test ettiğim ve çalıştığım talimatlar.

  1. Tüm paketleri kurarak / güncelleyerek başlayın.

    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get install pulseaudio-module-bluetooth bluez-tools
    
  2. Kullanıcıları gruplara ekleyin. Bu çok önemli. Başka bir dağıtım kullanıyorsanız, 'xbian'ı kullanıcı adınızla değiştirin.

    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 ve Bluetooth Aygıt Sınıfını Ayarla

    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 hizmeti / cihaz sınıfı 0x200420, cihazın Car Audio için ayarlandığı anlamına gelir. Daha fazla Bluetooth Sınıfı seçeneği keşfetmek için bu bağlantıya bakın .

  1. Bir cihazla eşleştirmek için “bluetoothctl” aracını kullanmamız gerekecek.

    sudo bluetoothctl
    
  2. Aracıyı KeyboardOnly olarak ayarlayın ve varsayılan yapın. Bunun sadece bir kez yapılması gerekiyor. Bluetoothctl içinde, aşağıdaki komutları çalıştırın:

    agent KeyboardOnly
    default-agent
    
  3. Telefonunuzda / tabletinizde bluetooth özelliğini açın ve bulunabilir olduğundan emin olun. Bluetoothctl içinde aşağıdaki komutları çalıştırın:

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

    xx: xx: xx: .. el cihazınızın / cihazınızın MAC adresidir. 'Taramayı başlat' komutunu çalıştırdıktan sonra, cihazınızın MAC adresi ile birlikte görünmesini bekleyin. 'Xx: xx: xx: ..' çiftini çalıştırdıktan sonra cihazınızı kontrol edin ve gelen bağlantıyı kabul edin. Terminalde evet yazarak da aynısını yapın.

  4. Şimdi ahududu Pi'ye ahizeden bağlanın ve bir ses aygıtı olarak bağlanmalıdır. Cihaz üzerinden çalınan tüm sesler şimdi Pi'nizin yapılandırmasına bağlı olarak Raspberry Pi'nin HDMI veya Analog çıkışı kullanılarak çıkarılmalıdır.

  5. Bağlantı koparsa, tekrar deneyin, bazen 2 deneme yapar.


cevaplamak için zaman ayırdığınız için teşekkür ederiz. Sadece bağlantı cevapları , diğer uçta ne olduğunu söylemediği için önerilmemektedir - eğer bağlantılı makale değişirse veya kaybolursa, bu cevap da verir. Önemli noktaları özetler misiniz?
Goober

@ goobering: Yayın güncellendi. Stack sitelerinde biçimlendirmeye pek aşina değilim ama elimden gelenin en iyisini yaptım. Cevabımı gözden geçirmek için zaman ayırdığınız için teşekkür ederiz. İyi günler
Abdul Mueid

1
Dalgalı sesi düzeltmek için ne yaptın?
NoBugs,

Süper dalgalı. Pi'yi overclock etmek zorunda mıyız?
b-ak

1
Abdul'in talimatları mükemmel çalışıyor, ancak BT hoparlörü üzerinden ses çıkışı çok dalgalı. Bu hiçbir durumda kabul edilebilir ses kalitesi değildir. Pulseaudio aracılığıyla PI yerli ses çok berbat. Bluetooth'dan çok daha iyi bir çözüm zamanı.
Don Allen

0

Bu rotadan inmeden önce, RPi 3.5mm ses jakı çıkışının kötü kalitesinin düşük olduğunu düşündünüz mü?

Ahududu Pi'nin ses çıkışı

Güncel bir eğitim bulamıyor olmanızın nedeni bu olabilir.

Adil olmak gerekirse, diğer neden, iyi bir hoparlör çiftinin, iyi bir Bluetooth hoparlörden daha ucuz olmaması olabilir. Amacınız bir USB ses kartına yatırım yapmak olmadığı sürece (pahalı değil ama toplam fiyatınız şimdi artmaya başlıyorsa) bu rotadan aşağıya düşmem. Ya da belki HDMI çıkışını kullanmayı düşünüyorsunuz? Gerçekten çok iyi.

Buna ne dersin? Tüm bileşenler hazır olmalıdır.

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

Bu benim ilk RPI projemdi. Çok iyi bakmadım, ancak MPD bileşeninin Bluetooth'u RPi'ye aktarmak için kullanılabileceğine inanıyorum. Seni bu araştırmayı yapmana bırakacağım.

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


Orada daha iyi hazır çözümler olduğu ve çok pahalı olmadığı konusunda size katılıyorum, ancak bunun daha büyük bir projenin parçası olmasını istiyorum
gtatr

Sadece yaşlı talimatların nedenleri üzerine spekülasyon yapıyorum. Potansiyel çözümler hakkında, ancak diğer notlara bakınız. MPD daemonuna bakın. Yanılıyor olabilirim, ama bt. Biraz daha detay kullanabilirdi. 3.5mm ses jakını kullanacaksanız, muhtemelen% 75 oranında iyi çalışacaktır, ancak ses kontrolü için harici bir amplifikatöre güvenmeniz gerekir.
KDM,

btw Ben bu öğretici, artı çevrimiçi hemen hemen başka herhangi bir öğretici ama başarı ile
çalıştım
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.