บลูทู ธ บลูส์ Redux
หมายเหตุ: คำถามทั้งหมดที่นี่เกี่ยวข้องกับ Raspberry Pi OS เวอร์ชัน Lite
ฉันถามคำถามที่คล้ายกันที่นี่โดยไม่ได้รับคำตอบ สิบแปดเดือนผ่านไปมีข้อมูลใหม่เกิดขึ้นและฉันมีฮาร์ดแวร์และซอฟต์แวร์ Raspberry Pi เวอร์ชันใหม่กว่า น่าเสียดายที่ผลลัพธ์เหมือนกันมาก แต่หวังว่าจะเป็นนิรันดร์
วัตถุประสงค์ของฉันดูเหมือนง่าย: เล่นไฟล์เพลงบน RPi ของฉันโดยใช้ CLI และฟังเพลงนั้นผ่านลำโพงบลูทู ธ อยู่ในความสนใจของการรักษาคำถามนี้เป็นช่วงสั้น ๆ ที่เป็นไปได้คำถามของฉันจะมุ่งเน้นไปที่การเดินทางไปยังฐานแรก ; เช่นวิธีสร้างการเชื่อมต่อที่มั่นคงระหว่าง RPi และลำโพง BT
อาจไม่เป็นปัญหาสำหรับคำถามของฉัน แต่บนแพลตฟอร์ม Linux อื่น (Ubuntu 20.04) ฉันใช้เวลาประมาณ 3-4 นาทีในการเรียงลำดับทั้งหมดออกจาก CLI: ค้นหาลำโพงจับคู่เชื่อมต่อและเล่นเพลง นั่นอาจเป็นการเปรียบเทียบแอปเปิ้ลกับส้ม แต่มันก็คุ้มค่าที่จะกล่าวถึงที่นี่
สรุประบบของฉัน:
ฮาร์ดแวร์: BCM2711 การ
แก้ไข: b03111
เฟิร์มแวร์: 15 มิถุนายน 2020 14:36:19 (ดูรายละเอียดเพิ่มเติมด้านล่าง) รุ่น: Raspberry Pi 4 Model B Rev 1.1
Distro: Raspberry Pi OS Lite
pi@raspberrypi4b:~ $ uname -a
Linux raspberrypi4b 5.4.51-v7l+ #1333 SMP Mon Aug 10 16:51:40 BST 2020 armv7l GNU/Linux
...
pi@raspberrypi4b:~ $ vcgencmd bootloader_version
Jun 15 2020 14:36:19
version c302dea096cc79f102cec12aeeb51abf392bd781 (release)
timestamp 1592228179
...
pi@raspberrypi4b:~ $ dpkg -l | grep blue
ii bluez 5.50-1.2~deb10u1+rpt2 armhf Bluetooth tools and daemons
ii bluez-firmware 1.2-4+rpt5 all Firmware for Bluetooth devices
ii pi-bluetooth 0.1.15 all Raspberry Pi 3 bluetooth
ฉันคิดว่านี่เป็นเครื่องมือทั้งหมดที่ RPi จำเป็นในการสร้างการเชื่อมต่อกับลำโพง แต่บางทีนี่อาจเป็นข้อผิดพลาดแรกของฉัน? ใครสามารถยืนยันเรื่องนี้?
ความพยายามในการเชื่อมต่อ:
นี่คือสิ่งที่ฉันได้ลองและมีคำถาม:
hcitool การค้นพบ:
$ hcitool scan
Scanning ...
B8:F6:53:12:13:F1 JBL Flip 5
โปรดทราบว่าหลังจากเปิดลำโพง BT ขึ้นและกดปุ่ม BT บนลำโพงฉันรอหลายวินาทีก่อนที่จะเริ่มการสแกน การสแกนจะต้องทำซ้ำ ~ 10 ครั้งก่อนที่ลำโพง BT JBL Flip 5จะถูกค้นพบ
bluetoothctl การจับคู่และการเชื่อมต่อ:
pi@raspberrypi4b:~ $ bluetoothctl
[bluetooth]# agent on
Agent registration enabled
[bluetooth]# scan on
No default controller available
[bluetooth]#
โปรดทราบว่าbluetoothctlดูเหมือนจะไม่ทราบถึงคอนโทรลเลอร์เริ่มต้นของตัวเอง บางส่วนของการอ้างอิง (ดูด้านล่าง) bluetoothctlแสดงตัวควบคุมเริ่มต้นการตอบสนองในทันทีหลังจากที่เข้ามา อ้างอิงอื่น ๆ ระบุว่าbluetoothctlจะต้องทำงาน w sudo/ ไม่ชัดเจนว่าเหตุใดจึงจำเป็น แต่จะสร้างความแตกต่าง:
$ sudo bluetoothctl
Agent registered
[bluetooth]# devices
[bluetooth]# list
Controller DC:A6:32:02:F0:97 raspberrypi4b [default]
...
$ bluetoothctl show
Controller DC:A6:32:02:F0:97 (public)
Name: raspberrypi4b
Alias: raspberrypi4b
Class: 0x00000000
Powered: yes
Discoverable: no
Pairable: yes
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
Modalias: usb:v1D6Bp0246d0532
Discovering: no
...
[bluetooth]# scan on
Discovery started
... some time after pressing the BT button on the speaker:
[NEW] Device B8:F6:53:12:13:F1 JBL Flip 5
[bluetooth]# scan off
Discovery stopped
...
[bluetooth]# info B8:F6:53:12:13:F1
Device B8:F6:53:12:13:F1 (public)
Name: JBL Flip 5
Alias: JBL Flip 5
Class: 0x00240414
Icon: audio-card
Paired: no
Trusted: no
Blocked: no
Connected: no
LegacyPairing: no
UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb)
UUID: Headset (00001108-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
[bluetooth]# pair B8:F6:53:12:13:F1
Attempting to pair with B8:F6:53:12:13:F1
[CHG] Device B8:F6:53:12:13:F1 Connected: yes
[CHG] Device B8:F6:53:12:13:F1 UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device B8:F6:53:12:13:F1 UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device B8:F6:53:12:13:F1 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device B8:F6:53:12:13:F1 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device B8:F6:53:12:13:F1 ServicesResolved: yes
[CHG] Device B8:F6:53:12:13:F1 Paired: yes
Pairing successful
แต่หลังจากนั้นทันที :
[CHG] Device B8:F6:53:12:13:F1 ServicesResolved: no
[CHG] Device B8:F6:53:12:13:F1 Connected: no
[bluetooth]# connect B8:F6:53:12:13:F1
Attempting to connect to B8:F6:53:12:13:F1
Failed to connect: org.bluez.Error.Failed
ความพยายามซ้ำ ๆ ในการกู้คืนการเชื่อมต่อล้มเหลวตามด้านบน รูปแบบของการจับคู่และการเชื่อมต่อที่ประสบความสำเร็จตามมาด้วย[CHG]ถึงno/ ล้มเหลวในทันทีได้เกิดขึ้นซ้ำหลายครั้ง
คำถาม:
1. เหตุใดฉันจึงไม่สามารถรักษาการเชื่อมต่อ BT ที่เสถียรระหว่าง RPi และลำโพงได้
2. เหตุใดจึงbluetoothctlต้องใช้สิทธิ์ root เพื่อเริ่มต้นอย่างถูกต้อง - ส่วนนี้เป็นปัญหาหรือไม่?
งานวิจัยของฉัน:
คำถาม & คำตอบนี้ดูคล้ายกันมากแม้ว่าฉันจะไม่จำเป็นต้องทำให้เป็นอัตโนมัติก็ตาม
มีการตรวจสอบคำถามและคำตอบและบทช่วยสอนอื่น ๆ อีกมากมาย1 , 2 , 3 , 4 , 5 , 6 , 7
ทำให้ฉันประทับใจว่า AFAICT ไม่มี "ข้อมูลอ้างอิง" สองรายการในคอลเล็กชันนี้มีอะไรที่เหมือนกัน!
คำตอบ
นี่ไม่ใช่คำตอบ - มันเป็นลำดับของรายการบันทึกประจำวันหรือแค่บล็อกท่องเที่ยวก็ได้หากคุณต้องการ!
สิ่งนี้ไม่เป็นไปตามมาตรฐาน SE สำหรับคำตอบ อย่างไรก็ตามวัตถุประสงค์ที่ระบุไว้ในคำถามข้างต้นได้รับการปฏิบัติตามขั้นตอนด้านล่าง ฉันโพสต์ข้อความนี้เป็น"คำตอบต้นแบบ"ซึ่งฉันจะกำหนดเป็นที่เก็บข้อมูลที่เป็นประโยชน์และตรงกับคำตอบ SE ที่เหมาะสม เมื่อโพสต์คำตอบ SE ที่ถูกต้องแล้วเนื้อหานี้จะถูกย้ายไปที่หน้า GitHub ของฉัน ICYI มีการโพสต์รายละเอียดเพิ่มเติมในเซสชันการแชทระหว่างฉันกับ @ukBaz - ใครควรได้รับเครดิตสำหรับผลลัพธ์ที่เป็นบวก
0. Bluetooth ถูกทำให้พิการในระบบปฏิบัติการ Raspbian / RPi เวอร์ชันLiteหรือไม่?
@ukBaz นำเรื่องนี้มาอภิปรายและตอนนี้ด้วยประโยชน์ของการมองย้อนกลับไปดูเหมือนชัดเจนว่าเขาถูกต้อง นอกเหนือจากแนวทางที่ระบุไว้ด้านล่างแล้วยังมีการโพสต์ "โซลูชัน" อื่น ๆ ที่ต้องติดตั้งpulseaudio-module-bluetoothแพ็กเกจ ก่อนหน้านี้ฉันนึกไม่ออกว่าทำไมแพ็คเกจที่มีขนาด 670 MB ซึ่งมีการอ้างอิง ~ 100 รวมถึงXไลบรารีหลายแห่งจึงจำเป็นต้องเล่นไฟล์เพลงผ่านลิงค์ BT แต่ดูเหมือนว่าRPi OS Liteจะต้องมี PulseAudio เพื่อเปิดใช้งานเพลงผ่านบลูทู ธ ! มีการกล่าวว่าแพ็คเกจ ALSA เป็นอีกทางเลือกหนึ่งของ PulseAudio แต่ยังไม่ได้แสดงให้เห็น ในที่สุดก็เป็นที่น่าผิดหวังว่าขีด จำกัด ของการทำงานของRPI OS Lite distro จะไม่ครอบคลุมในเอกสารอย่างเป็นทางการ ยินดีต้อนรับการวิเคราะห์และความคิดเห็น
1. rootต้องใช้สิทธิ์ในการเริ่มต้นbluetoothctlหรือไม่? (คำตอบบางส่วน)
ด้วยเหตุผลที่ไม่ชัดเจนในปัจจุบันสิทธิ์piของผู้ใช้จะแตกต่างกันไปในการติดตั้งRaspbian Desktop กับการติดตั้งRaspbian Lite ! ตัวอย่างเช่นผู้ใช้ในระบบเดสก์ท็ RPI สามารถที่จะเริ่มต้นและควบคุมการควบคุมบลูทู ธ เริ่มต้นใช้, แต่ไม่ได้อยู่ในระบบ Lite RPIpibluetoothctl
ในการแก้ปัญหาบางโพสต์ออนไลน์แนะนำให้เริ่มต้นbluetoothctlด้วยsudo(aka rootสิทธิ์) นั่นอาจจะเป็นวิธีหนึ่งที่จะทำ แต่โพสต์อื่น ๆ ที่แสดงให้เห็นว่าผู้ใช้piจะเพิ่มในกลุ่มเสริมbluetoothชื่อ
คุณสามารถตรวจสอบสิ่งนี้ได้:
1.1 บน Raspbian Desktop โดยใช้ CLI:
pi@raspberrypi4b:~ $ bluetoothctl
Agent registered
[bluetooth]# list
Controller DC:A6:32:01:02:03 raspberrypi4b [default]
คอนโทรลเลอร์ทำงานอยู่และตอบสนอง
1.2 บน Raspbian Lite โดยใช้ CLI:
pi@raspberrypi4b:~ $ bluetoothctl
[bluetooth]# list
No default controller available
คอนโทรลเลอร์ไม่ตอบสนอง
1.3 ความละเอียด:
เพิ่มผู้ใช้piในกลุ่มbluetooth:
pi@raspberrypi4b:~ $ sudo usermod -G bluetooth -a pi
ต่อไปนี้rebootผู้ใช้piควรค้นหาbluetoothctlและตัวควบคุมตอบสนองโดยไม่ต้องพึ่งพาการsudoยกระดับสิทธิ์ ยินดีต้อนรับการวิเคราะห์และความคิดเห็น
2. ข้อผิดพลาด: Failed to connect: org.bluez.Error.Failed(คำตอบบางส่วน)
ข้อผิดพลาดนี้แสดงในbluetoothctlกล่องโต้ตอบ ข้อผิดพลาดนี้ได้รับการแก้ไขแล้ว แต่จะกลับมาเยี่ยมชมอีกครั้งในอนาคต และปัจจุบันเป็นยกเลิกการแก้ไข ข้อผิดพลาดจะแสดงขึ้นหลังจาก BT Speaker อยู่trustedและpairedพร้อมกับคอนโทรลเลอร์ (ดูลำดับคำสั่งในคำถามด้านบน) เป็นข้อความแสดงข้อผิดพลาดที่ไม่มีความหมายเนื่องจากไม่มีเบาะแสสำหรับการแก้ไขปัญหา
จากข้อเสนอแนะที่เป็นประโยชน์อื่น ๆ จาก @ukBaz btmonยูทิลิตี้นี้ได้รับการเกณฑ์เพื่อให้ได้เบาะแสที่เป็นประโยชน์สำหรับความล้มเหลวของ RPi ในการเชื่อมต่อกับลำโพง Bluetooth:
$ sudo btmon -t
Bluetooth monitor ver 5.50
= Note: Linux version 5.4.51-v7l+ (armv7l)
...
= bluetoothd: a2dp-sink profile connect failed for B8:F6:53:12:13:F1: Protocol not available
btmonดูเหมือนจะเป็นเครื่องมือที่มีประโยชน์ เอกสารของระบบมีความเรียบง่าย แต่โครงการ Ubuntu มีวิกิพีเดียที่ดีซึ่งเป็นประโยชน์btmon
2.1 a2dp-sink profile connect failed Protocol not available
การใช้ข้อผิดพลาดนี้เป็นข้อความค้นหาแนะนำว่าโซลูชันนี้เกี่ยวข้องกับการติดตั้งซอฟต์แวร์เพิ่มเติม ( REF 1 , REF2 ) pulseaudio-module-bluetoothชื่อของซอฟต์แวร์ที่ได้คือ
แหล่งข้อมูลอื่นREF 3แนะนำว่า BlueAlsa เป็นทางเลือกที่ดีกว่าสำหรับ PulseAudio ดูเหมือนว่า PulseAudio อาจถูกใช้กันอย่างแพร่หลายดังนั้นเราจะใช้มันสำหรับบัตรนี้
2.2 ติดตั้ง pulseaudio-module-bluetooth
ตามข้อบังคับsudo apt update && sudo apt upgrade -yความน่าเชื่อถือaptถูกตั้งค่าเป็นการติดตั้งแพ็คเกจนี้:
pi@raspberrypi4b:~ $ sudo apt install pulseaudio-module-bluetooth
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
dbus-user-session fontconfig libaom0 libasound2-plugins libasyncns0 libavcodec58 libavresample4 libavutil56 libcairo2 libcodec2-0.8.1 libcroco3
...
0 upgraded, 102 newly installed, 0 to remove and 0 not upgraded.
Need to get 46.7 MB of archives.
After this operation, 670 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
น่าจะเป็นความคิดที่ดีในrebootตอนนี้
ดูเหมือนว่าจะมีเนื้อที่ดิสก์จำนวนมาก (670MB) เพื่อสตรีมไฟล์เพลงผ่านลิงก์บลูทู ธ จากการเปรียบเทียบdf -Hกล่าวว่าการติดตั้งRaspberry Pi OS (32 บิต) Lite ทั้งหมดใช้พื้นที่น้อยกว่า 1,500 MB เล็กน้อย ที่ค่อนข้างมากของสิ่งที่และรวมถึงการอ้างอิงจำนวนมากในXlibs หน้าต่าง - ยูทิลิตี้ที่มีในLiteระบบก็ไม่มีความชัดเจน อย่างไรก็ตามเราจะดำเนินการตามpulseaudio-module-bluetoothแนวทางนี้ในตอนนี้ แต่กลับมาทบทวนอีกครั้งเพื่อหาแนวทางแก้ไขปัญหา
โครงการ Debian มีหน้าภาพรวมpulseaudio-module-bluetoothที่อ่านง่าย
2.3 เริ่มpulseaudioเซิร์ฟเวอร์
หากยังไม่ชัดเจนpulseaudio-module-bluetoothเป็นโมดูลใน "ตระกูล" ของ PulseAudio ในความเป็นจริงการติดตั้งpulseaudio-module-bluetoothยังติดตั้งpulseaudioเป็น "การพึ่งพา"
สำหรับผู้ที่สนใจเอกสาร'PulseAudio ใต้ฝากระโปรง'มี "ข้อมูลเบื้องต้น" ที่ค่อนข้างครอบคลุมสำหรับ PulseAudio (TL; DR) ภาพรวม Debian ใน PulseAudioสั้นและไปยังจุด PulseAudio ยังมีหน้า Wikipedia ที่น่าอ่าน เกร็ดเล็กน้อยที่มีประโยชน์จาก Wikipedia คือผู้เขียน PulseAudio ( Lennart Poettering ) เป็นผู้เขียนsystemdและavahi: 0
ในระดับธรรมดามากขึ้นนอกจากนี้ยังเป็นที่น่าสังเกตว่าภาพรวม Debian บน PulseAudio ชี้ให้เห็นว่า PulseAudio ได้รับการเปลี่ยนแปลงที่สำคัญตั้งแต่jessieนั้นมา การเปลี่ยนแปลงเป็นสิ่งที่ดี
ดูเหมือนว่าpulseaudioเซิร์ฟเวอร์จะเริ่มต้นโดยsystemdการแจกแจงเหล่านั้นที่รวมอยู่ด้วย แต่นั่นไม่ใช่กรณีRPiOS Liteดังนั้นเราจะดำเนินการด้วยตนเอง:
pi@raspberrypi4b:~ $ pulseaudio --start
2.4 ทดสอบ RPi - การเชื่อมต่อบลูทู ธ
ก่อนที่จะพยายามเชื่อมต่อให้เริ่มbluetoothctlดูว่าคอนโทรลเลอร์มีความสามารถเพิ่มเติมที่อาจทำให้เกิดผลลัพธ์ที่แตกต่างกันหรือไม่:
pi@raspberrypi4b:~ pi@raspberrypi4b:~ $ bluetoothctl
Agent registered
[bluetooth]# list
Controller DC:A6:32:02:F0:97 raspberrypi4b [default]
[bluetooth]# show
Controller DC:A6:32:02:F0:97 (public)
Name: raspberrypi4b
Alias: raspberrypi4b
Class: 0x000c0000
Powered: yes
Discoverable: no
Pairable: yes
UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: Headset (00001108-0000-1000-8000-00805f9b34fb)
Modalias: usb:v1D6Bp0246d0532
Discovering: no
...
[bluetooth]# devices
Device B8:F6:53:12:13:F1 JBL Flip 5
...
[bluetooth]# info B8:F6:53:12:13:F1
Device B8:F6:53:12:13:F1 (public)
Name: JBL Flip 5
Alias: JBL Flip 5
Class: 0x00240414
Icon: audio-card
Paired: yes
Trusted: yes
Blocked: no
Connected: no
LegacyPairing: no
UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
ManufacturerData Key: 0x0057
ManufacturerData Value:
31 1f 01 18 8d 00 1.....
ServiceData Key: 0000fddf-0000-1000-8000-00805f9b34fb
สิ่งนี้ดูมีแนวโน้ม - Controller (RPi) มีAudio Sourceและความสามารถอื่น ๆ อีกสองสามอย่างที่อาจเป็นประโยชน์ ลำโพง BT ยังคงอยู่pairedและtrusted. มาเปิดลำโพงและลองเชื่อมต่อ:
ที่น่าสนใจทันทีที่กดปุ่มเปิด / ปิดบนลำโพงJBL Flip 5มันจะเชื่อมต่อโดยไม่ต้องร้องขอ (นี่trustหรือคืออะไร :)
[CHG] Device B8:F6:53:12:13:F1 Connected: yes
[JBL Flip 5]# info B8:F6:53:12:13:F1
Device B8:F6:53:12:13:F1 (public)
Name: JBL Flip 5
Alias: JBL Flip 5
Class: 0x00240414
Icon: audio-card
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Serial Port (00001101-0000-1000-8000-00805f9b34fb)
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
ManufacturerData Key: 0x0057
ManufacturerData Value:
31 1f 01 18 8d 00 1.....
ServiceData Key: 0000fddf-0000-1000-8000-00805f9b34fb
และดูเหมือนว่าเราจะก้าวหน้า! ใน "บท" ถัดไปด้านล่างเราจะพยายามสตรีมและเล่นเพลงผ่านลำโพงซึ่งเป็นวัตถุประสงค์สุดท้ายของภาคนี้
2.5 ความละเอียด:
ติดตั้งpulseaudio-module-bluetooth(และการอ้างอิงทั้งหมด)
pi@raspberrypi4b:~ sudo apt update && sudo apt upgrade -y
pi@raspberrypi4b:~ sudo apt install pulseaudio-module-bluetooth
แนวทางแก้ไขปัญหาอื่น ๆ ที่เป็นไปได้จะได้รับการประเมินในอนาคต ยินดีต้อนรับการวิเคราะห์และความคิดเห็น
3. สตรีมและเล่นเพลงจาก RPi ไปยังลำโพง Bluetooth
ด้วยความช่วยเหลือเล็ก ๆ น้อย ๆ จากเพื่อน ๆ ของฉัน esp @ukBazตอนนี้ฉันกำลังเพลิดเพลินกับ "Night in Tunisia" ของ Dizzy Gillespie ที่สตรีมจาก RPi 4 "Lite" ไปยังลำโพงบลูทู ธ บนโต๊ะทำงานของฉัน! นี่คือบัญชี"แบบต่อเนื่อง"ของขั้นตอนสุดท้ายของ "คำตอบ" นี้:
3.1 ไม่mpg321ให้อะไรฉันเลย!
หลังจากเชื่อมต่อบลูทู ธ สแต็กใน PulseAudio บน RPi 4 กับลำโพง 'JBL Flip 5' สำเร็จแล้วฉันก็นึกภาพสองสามนาทีว่าฉันอยู่ห่างจากนิพพานเพียงก้าวเดียว มันไม่ค่อยตรงไปตรงมา:
ฉันต้องการเครื่องเล่นเพลงแบบบรรทัดคำสั่งที่สามารถจัดการไฟล์ที่เข้ารหัส MP3 และแอปพลิเคชันแปลกตาmpg321ก็ปรากฏขึ้น ติดตั้งตรวจสอบman mpg321และเรียกใช้:
pi@raspberrypi4b:~ $ sudo apt update && sudo apt upgrade -y
pi@raspberrypi4b:~ $ sudo apt install mpg321
pi@raspberrypi4b:~ $ man mpg321
pi@raspberrypi4b:~ $ mpg321 -g 50 NightTunisia.mp3
... (crickets)
ดังนั้น - ไม่มีข้อความแสดงข้อผิดพลาด แต่ไม่มีเพลงด้วย!
3.2 connect speaker with cable(aka กำหนดค่า PulseAudio)
และอีกครั้ง @ukBaz ให้คำแนะนำ:
คุณจะเลือกเอาท์พุท (การ์ด) ที่เสียงจะไปได้อย่างไร?
สิ่งนี้ช่วยได้หรือไม่? https://wiki.archlinux.org/index.php/PulseAudio/Examples#Set_the_default_output_sink
แน่นอน! Arch Linux อาจมีเอกสารที่ดีที่สุดและทันสมัยที่สุดในทุกสิ่งบนLinuxบนอินเทอร์เน็ตในปัจจุบัน Arch Linux วิกิพีเดียโดยเฉพาะอย่างยิ่งเป็นทรัพยากรที่มีคุณค่า! ดังนั้นหลังจากลองสองสามครั้งมันก็เรียนรู้ว่านี่คือเวทมนตร์ที่เชื่อมต่อสายลำโพงจาก RPi ไปยังลำโพงบลูทู ธ :
pacmd "set-default-source bluez_sink.B8_F6_53_12_13_F1.a2dp_sink.monitor"
คำอธิบายบางอย่างที่อยู่ในลำดับที่นี่เป็น PulseAudio CLI คือยากที่จะเข้าใจทั้งหมด แต่PA-ผู้เชี่ยวชาญ น่าเสียดายที่ฉันไม่สามารถให้คำอธิบายเกี่ยวกับฟันเฟืองได้! นี่คือสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ในตอนนี้:
แนวคิด PulseAudio ของแหล่งที่มาและอ่างล้างมือเป็นสิ่งแรกที่หนีฉันไป ในขณะที่บรรลุวัตถุประสงค์คำสั่งนั้นpacmd "set-default-source...ทำให้ฉันถอยหลัง : RPi ควรเป็นแหล่งที่มาและผู้พูดควรเป็นอ่าง !
ไตร่ตรองสิ่งนี้ในขณะที่อ่านman pacmdและman pulse-cli-syntaxไม่ได้ให้การเปิดเผยใด ๆ แต่มันทำให้ฉันลองทำสิ่งนี้:
pi@raspberrypi4b:~ $ pacmd list | grep -e 'index:' -e 'name:'
Default sink name: bluez_sink.B8_F6_53_12_13_F1.a2dp_sink
Default source name: bluez_sink.B8_F6_53_12_13_F1.a2dp_sink.monitor
...
ขณะนี้ไม่ได้จริงอธิบายอะไรมันดูเหมือนว่าเห็นได้ชัดว่าsourceและsinkเป็นนามธรรมซอฟแวร์และไม่จำเป็นที่จะต้องมีความเกี่ยวข้องใด ๆ กับโลกทางกายภาพ ใช่ - อ่อนแอ แต่มันคือทั้งหมดที่ฉันมีในตอนนี้และฉันเริ่มเบื่อกับสิ่งนี้อย่างรวดเร็ว :)
3.3 ความละเอียด:
ตอนนี้ PulseAudio หวังว่าจะมีอินพุตและเอาต์พุตที่เชื่อมต่ออย่างถูกต้องแล้วก็ถึงเวลาmpg321ลองอีกครั้ง:
pi@raspberrypi4b:~ $ mpg321 -g 50 NightTunisia.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.3.2-1 (2012/03/25). Written and copyrights by Joe Drew,
now maintained by Nanakos Chrysostomos and others.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
Title : A Night In Tunisia Artist : Dizzy Gillespie & Charlie Park
Album : Town Hall, New York City, June Year : 2005
Playing MPEG stream from NightTunisia.mp3 ...
MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
[7:34] Decoding of NightTunisia.mp3 finished.
ใช้งานได้และคุณภาพเสียงที่น่าประทับใจ! มีรายงานมากมายที่กระจายอยู่ทั่วอินเทอร์เน็ตระบุว่าการเล่นเสียง RPi บนบลูทู ธ เป็นรอยมีเสียงดังและไม่สามารถยอมรับได้ สำหรับหูของฉันการเล่น "Night in Tunisia" ที่มาจาก RPi 4 นี้ฟังดูดีพอ ๆ กับการเล่นจากระบบ Ubuntu 20.04 ของฉันที่โฮสต์บน Macbook Pro 2011 แน่นอนว่าเมื่อ5 วันที่แล้วการตั้งค่าจึงนานกว่า 3-4 นาทีที่จำเป็นสำหรับการตั้งค่าบนเดสก์ท็อป Ubuntu แต่ใครจะนับล่ะ?
บทส่งท้ายเฟิร์มแวร์:
ฉันโพสต์สิ่งนี้เป็นการแก้ไขเนื่องจากฉันจำได้ว่าอ่านบางคนคาดเดาว่าเฟิร์มแวร์ RPi 4 อาจมีส่วนเกี่ยวข้องกับปัญหาคุณภาพเสียงที่รายงานสำหรับ RPi เมื่อฉันโพสต์คำถามเฟิร์มแวร์เป็นรุ่นล่าสุด อย่างไรก็ตามฉันเพิ่งตรวจสอบและดูเหมือนว่าจะมีการแก้ไขใหม่ตั้งแต่เทพนิยายนี้เริ่ม:
pi@raspberrypi4b:~ $ sudo rpi-eeprom-update
BCM2711 detected
Dedicated VL805 EEPROM detected
*** UPDATE AVAILABLE ***
BOOTLOADER: update available
CURRENT: Mon 15 Jun 13:36:19 UTC 2020 (1592228179)
LATEST: Thu 3 Sep 12:11:43 UTC 2020 (1599135103)
FW DIR: /lib/firmware/raspberrypi/bootloader/critical
VL805: update available
CURRENT: 000137ad
LATEST: 000138a1