Установка малины Pi 3 в качестве динамика bluetooth

Я ищу способ настроить Raspberry Pi 3 в качестве динамика bluetooth, используя Raspbian Jessie. То, что я подразумеваю под как bluetooth speaker , использует его для приема аудиопотока через Bluetooth с использованием A2DP и ​​воспроизведения его через динамики, подключенные к Малиновой Pi через аудиоразъем, порт HDMI или USB-аудио адаптер.

Различные учебники доступны в Интернете, но довольно устарели, и большинство из них больше не работают.

26 голосов | спросил gtatr 21 Maypm16 2016, 20:13:29

4 ответа


20

Я был в этом проекте после того, как (чтобы помочь моему другу сделать свой документ для окончания) и найти онлайн-проект, который делает только отлично (хотя обработка pi аудио довольно отстает от pi, и падение напряжения заставляет его замерзать как единственный способ перезагрузить его - отсоединить кабель питания).

Это шаг, над которым я работал, и он работает на малине 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. Измените конфигурацию и примените ее

Сначала добавьте имя пользователя pi в группу pulseaudio с помощью

sudo usermod -a -G lp pi

создайте новую конфигурацию в /etc/bluetooth/audio.conf с помощью текстового редактора и добавьте следующую строку

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

отредактируйте файл /etc/bluetooth/main.conf, используя предпочтительный текстовый редактор (я использую nano).

Установите класс Bluetooth, измените следующую строку:

 Class = 0x00041C

0x000041C означает, что протокол rpi поддерживает протокол A2DP.

изменить /etc/pulse/daemon.conf добавьте /измените (не забудьте полностью проверить код перед их добавлением) и измените

resample-method = trivial

вы можете использовать любой метод, который вам нравится, я лично использую speex-float-3 для справки, вы можете увидеть это ссылка

запустить pulseaudio с помощью:

pulseaudio -D

мы собираемся использовать скрипт ragusa87 для автоматизации источника bluetooth для аудиозахвата. Сначала добавьте новую конфигурацию в 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

и добавьте это в файл bluetooth (кредиты 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 amixer cset numid = 3 n

где n может быть: 0 = авто 1 = гнездо 2 = hdmi

3. Пара и подключение аудио

перейдите к терминалу и введите bluetoothctl. Сначала активируйте bluetooth с помощью power on, а затем agent on, установите агент по умолчанию, который вы редактировали ранее, с помощью default-agent), а затем установить режим обнаружения и парный режим с помощью discoverable on; pairable on. Вы должны увидеть bluetooth raspberrypi на своем телефоне или ноутбуке, и вы можете связать его по телефону, щелкнув по нему и коснитесь пары. На терминале вы вводите y. Вернемся к терминалу, вы подключаетесь к телефону по типу connect xx:xx:xx:xx:xx:xx где xx:xx:xx:xx:xx:x x - это адрес mac bluetooth для телефона. и не забудьте доверять trust xx:xx:xx:xx:xx:xx where xx:xx:xx:xx:xx:xx - это ваш телефон bluetooth mac address И у вас есть усилитель bluetooth (или что бы там ни было), используя малину.

4. Вывод

после попытки и экспериментирования я узнал, что качество звука низкое, и я скорее не использую его, так как малина будет заморожена, если вы используете ее, когда песня транслируется в малину. Я советую использовать проект динамиков UPNP, используя gmediarenderer. Звук превосходный, нет звука задержки и разброса, и он может воспроизводить аудиофайл без потерь (flac, wav, dll). Это подробная информация о том, как , чтобы настроить его

ссылка: учебное пособие по работе ; скрипт ragusa ; связанная работа ;

ответил xdhe 29 Mayam16 2016, 09:25:19
7

Вот альтернативное решение, которое не полагается на PulseAudio: https://github.com/lukasjapan/bt-speaker

Установите на raspbian с правами root:

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

Он запустит демон динамиков bluetooth, который автоматически принимает один клиент для A2DP /AVRCP и напрямую передает аудиопоток в ALSA.

ответил Lukas 15 MaramWed, 15 Mar 2017 03:55:53 +03002017-03-15T03:55:53+03:0003 2017, 03:55:53
2

Я написал краткие инструкции для малины Pi 3 в моем блоге . Большинство инструкций онлайн для более старых версий Debian /Xbian. Вот инструкции, которые я тестировал и работаю над Raspberry Pi 3 с Xbian.

  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 означает, что устройство настроено для Car Audio. См. эту ссылку , чтобы узнать больше о параметрах класса Bluetooth.

  1. Чтобы подключиться к устройству, нам нужно будет использовать инструмент «bluetoothctl».

    sudo bluetoothctl
    
  2. Установите агент в KeyboardOnly и сделайте его по умолчанию. Это нужно делать только один раз. Внутри bluetoothctl выполните следующие команды:

    agent KeyboardOnly
    default-agent
    
  3. Включите bluetooth на свой телефон /планшет и убедитесь, что оно доступно для поиска. Выполните следующие команды внутри bluetoothctl:

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

    xx: xx: xx: .. является MAC-адресом вашего телефона /устройства. После запуска â € "scan onâ € ™, подождите минуту, пока ваше устройство появится вместе с его MAC-адресом. После запуска «xx: xx: xx: ..» проверьте ваше устройство и примите входящее соединение. Сделайте то же самое на терминале, набрав yes.

  4. Теперь подключитесь к малине Pi с вашего телефона, и он должен подключиться как аудиоустройство. Все аудиосигналы, воспроизводимые через устройство, теперь должны выводиться с использованием HDMI или Аналогового выхода Raspberry Pi в зависимости от конфигурации вашего устройства.

  5. Если соединение не удается, повторите попытку, иногда это занимает 2 попытки.

ответил Abdul Mueid 22 J0000006Europe/Moscow 2016, 12:26:49
0

Прежде чем начать с этого маршрута, рассмотрели ли вы плохое качество выходного аудиоразъема RPi 3,5 мм?

Звуковой выход малины Pi

Возможно, поэтому вы не можете найти обновленный учебник.

Справедливости ради, другая причина может заключаться в том, что достойная пара динамиков не менее дорогая, чем приличный 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

ответил KDM 22 Mayam16 2016, 11:45:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132