私はしばらくしてこのプロジェクトに参加しました(友人が卒業のために論文を書くのを助けるため)、オンラインプロジェクトがうまく機能しているのを見つけました(ただし、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のチュートリアル。
ラグサのスクリプト ;
関連作業 ;