Raspberry Pi 3をBluetoothスピーカーとしてセットアップする


36

Raspbian Jessieを使用して、Raspberry Pi 3をBluetoothスピーカーとして構成する方法を探しています。私は何を意味でのBluetoothスピーカーとしては、 Bluetoothを使用してA2DP経由でオーディオストリームを受信し、オーディオジャック、HDMIポート、またはUSBオーディオアダプタを介してラズベリーPiに接続されたスピーカーを経由して、それを再生するためにそれを使用しています。

さまざまなチュートリアルがオンラインで利用できますが、かなり時代遅れであり、それらのほとんどはもう機能しません。


「Bluetoothスピーカーとして」とはどういう意味か
わかりません

1
編集済み。希望は今明確です
-gtatr

私にとって完全に明確な、私は本当の答えを読むことに興味があります。
Burt_Harris

投票されたソリューションは、私がやめたのと同様のルートです。ただし、raspbian Jessie Liteの新規インストールでこれをセットアップするgithubリポジトリがあります(ピクセルを含むJessieの小さな設定なしで動作するかどうかはわかりません)単にインストール手順に従ってください:github.com/bareinhard/…。既存のソリューションで見られる主な問題は、デフォルトでpulseaudio5を使用していることです。これによりpa6がコンパイルされ、pa5で発生する多くの再生の問題が解消されます。
ブレットラインハルト

回答:


25

私はしばらくしてこのプロジェクトに参加しました(友人が卒業のために論文を書くのを助けるため)、オンラインプロジェクトがうまく機能しているのを見つけました(ただし、piの処理はオーディオをかなり遅らせ、電圧降下が唯一の方法としてフリーズさせます再起動するには、電源ケーブルを抜いてください)。

これは私が取り組んできたステップであり、raspberry 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 bluetoothがA2DPプロトコルをサポートすることを意味します。

変更の/etc/pulse/daemon.conf 追加/変更(追加する前にコードを徹底的にチェックすることを忘れないでください)、および変更

resample-method = trivial

あなたが好きな方法を使用することができます、私はspeex-float-3あなたがこのリンクを見ることができる参考のために個人的に使用しています

pulseaudioサービスを開始します:

pulseaudio -D

ragusa87スクリプトを使用して、bluetoothソースをオーディオシンクに自動化します。まず/etc/udev/rules.d/99-input.rules、ファイルを編集してudev init.dに新しい構成を追加し、これをファイルに追加してください

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

mkdirを使用してフォルダーudevを追加します/usr/lib

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ミキサーcset numid = 3 n

nは次のようになります。0=自動1 =ジャック2 = hdmi

3.オーディオのペアリングと接続

ターミナルに移動してを入力しbluetoothctlます。最初にbluetoothを有効にしpower onてからagent on、前に編集していたデフォルトエージェントをで設定し、次にでdefault-agent検出可能モードとペアモードをオンに設定しますdiscoverable on; pairable on。お使いの携帯電話またはラップトップにraspberrypi bluetoothが表示され、それをクリックしてペアリングをタッチすることで携帯電話でペアリングできます。端末でyと入力します。端末に戻って、タイプ別connect xx:xx:xx:xx:xx:xxに電話に接続しxx:xx:xx:xx:xx:xます。xは電話のBluetooth MACアドレスです。そして、trust xx:xx:xx:xx:xx:xx where xx:xx:xx:xx:xx:xxあなたの携帯電話のBluetooth MACアドレスであり、ラズベリーを使用してBluetoothアンプ(または名前は何でも)を持っていることを信頼することを忘れないでください。

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:xxIを得るFailed to connect: org.bluez.Error.Failed自分の携帯電話やノートパソコンのいずれかを使用して
gtatr

使用しているOSは何ですか?Raspberry pi 3オンボードbluetoothをサポートする唯一のOSは、raspbian JessieとUbuntu Mate> 16.04です。Ubuntu Mateにはbluetooth a2dpがすでに存在するため、Bluetooth Managerで確認できます。
-xdhe

すでにオンラインチュートリアルを試してみて混乱している場合は、パッケージの構成を再インストールして削除するのが最善だと思います。「rpi-bluetooth」パッケージを手動でインストールしてBluetoothパッケージをいじくりましたが、Bluetoothが機能しません。だから私はラズビアの画像を再フラッシュしましたが、音は心地よいIMOではありませんが、うまく動作します。
-xdhe

私は新しくインストールしたラズビアのジェシーを使用していますが、あなたの指示に従ってステップを追っていました。おそらく、新しくインストールしたOSからの欠落したステップがあります。Ubuntu Mateを試してみるかもしれません
-gtatr

16

PulseAudioに依存しない代替ソリューションを次に示します。https//github.com/lukasjapan/bt-speaker

rootでraspbianにインストールします:

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

A2DP / AVRCPの単一クライアントを自動的に受け入れ、オーディオストリームを直接ALSAにパイプするbluetoothスピーカーデーモンを起動します。


セキュリティに関するリマインダー:スクリプトは自分で作成したので、安全であることを保証できますが、自分で内容を確認してください
ルカス

いいね!私は次の日にこれをテストしようとします
-gtatr

1
私はあなたのソリューションを試していましたが、うまくいきましたが、オーディオが1秒おきにスタックしました。なぜこうなった?
wolfram77

おそらくWifiの問題:github.com/lukasjapan/bt-speaker/issues/4
Lukas

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. 携帯電話/タブレットでBluetoothをオンにし、検出可能であることを確認します。bluetoothctl内で次のコマンドを実行します。

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

    xx:xx:xx:..は、ハンドセット/デバイスのMACアドレスです。「スキャンオン」を実行した後、デバイスがMACアドレスとともに表示されるまで1分間待ちます。「ペアxx:xx:xx:..」を実行した後、デバイスを確認し、着信接続を受け入れます。yesと入力して、ターミナルで同じ操作を行います。

  4. 次に、ハンドセットからRaspberry Piに接続すると、オーディオデバイスとして接続されます。デバイスで再生されるすべてのオーディオは、Piの構成に応じて、Raspberry PiのHDMIまたはアナログ出力を使用して出力されるようになります。

  5. 接続に失敗した場合は、もう一度試してください。2回かかる場合があります。


答えてくれてありがとう。リンクのみの回答は、反対側に何があるのか​​分からないのでお勧めしません。リンクされた記事が変更または消えた場合、この回答も同様です。重要なポイントを要約できますか?
goobering

@goobering:投稿を更新しました。Stackサイトでの書式設定についてはあまり詳しくありませんが、できる限りのことを行いました。時間を割いて私の回答をご覧いただきありがとうございます。良い一日を
過ごす

1
途切れた音声を修正するために何をしましたか?
NoBugs

途切れ途切れです。piをオーバークロックする必要がありますか?
b-ak

1
Abdulの指示は完全に機能しますが、BTスピーカーからのオーディオ出力は非常に途切れます。いずれにしても、これは許容できる音質ではありません。Pulseaudioを介したPIネイティブオーディオは非常に安易です。Bluetoothよりもはるかに優れたソリューションの時間です。
ドン・アレン

0

そのルートから起動する前に、RPi 3.5mmオーディオジャック出力の品質が悪いことで有名なことを考えましたか?

Raspberry Piの音声出力

これが、最新のチュートリアルが見つからない理由かもしれません。

公平を期すために、もう1つの理由は、まともなスピーカーペアがまともな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


私はより良い準備ができて解決策がそこにあるという事実にあなたに同意し、ではないので、高価な、しかし私は、これは大きなプロジェクトの一部になりたい
gtatr

高齢者の指示の理由だけを推測します。ただし、潜在的なソリューションについては、他のメモを参照してください。MPDデーモンを見てください。間違っているかもしれませんが、Btをストリーミングできると思います。もう少し詳細を使用できます。3.5mmオーディオジャックを使用する場合は、おそらく75%で正常に動作しますが、ボリュームコントロールには外部アンプを使用する必要があります。
KDM

ところで私は、オンラインでそのチュートリアルに加え、ほぼすべての他のチュートリアルを試みたが、成功しません
gtatr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.