Tôi có thể sử dụng máy tính của mình làm loa thu / loa A2DP không?


40

Đầu tiên, vấn đề: Tôi đang sử dụng máy nghe nhạc Cowon MP3 làm máy nghe nhạc chính của mình với nút tai cơ bản.

Nó cung cấp A2DP và tôi muốn để netbook của tôi (chạy UNE 10.04) hoạt động như một máy thu.

Một số tài nguyên trên web về a2dp, nhưng hầu hết đã hết hạn:

Câu trả lời:


47

Để sử dụng máy Ubuntu của bạn làm thiết bị Bluetooth a2dp, trước tiên bạn phải định cấu hình nó để đăng ký làm điểm cuối "a2dp chìm".

Các bluez gói trong Ubuntu (10.04 trở lên) bao gồm một tiện ích gọi là sdptool có thể được sử dụng để kiểm tra xem một thiết bị Bluetooth được cấu hình như một bồn rửa A2DP hay không. Đây là đầu ra từ sdptool chạy với tai nghe Bluetooth của tôi (địa chỉ được lấy từ hộp thoại "Cài đặt Bluetooth" trong trung tâm điều khiển gnome):

$ sdptool search --bdaddr 00:18:16:3A:3B:D4 a2snk
Searching for a2snk on 00:18:16:3A:3B:D4 ...
Service RecHandle: 0x10002
Service Class ID List:
  "Audio Sink" (0x110b)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x102
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102

$

và đây là đầu ra khi chạy với máy Ubuntu cục bộ của tôi:

$ sdptool search --bdaddr local a2snk
Searching for a2snk on FF:FF:FF:00:00:00 ...
$

Điều này cho thấy rằng máy Ubuntu không tự quảng cáo dưới dạng a2dp. Tuy nhiên, nó đang tự quảng cáo dưới dạng nguồn a2dp:

$ sdptool search --bdaddr local a2src
Searching for a2src on FF:FF:FF:00:00:00 ...
Service Name: Audio Source
Service RecHandle: 0x10003
Service Class ID List:
  "Audio Source" (0x110a)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 25
  "AVDTP" (0x0019)
    uint16: 0x102
Profile Descriptor List:
  "Advanced Audio" (0x110d)
    Version: 0x0102

Điều này cho phép máy Ubuntu ghép nối chính xác với tai nghe làm nguồn âm thanh, nhưng nó không cho phép sử dụng máy Ubuntu làm đầu ra (chìm) cho âm thanh Bluetooth.

Nếu bạn chỉnh sửa /etc/bluetooth/audio.conf, bạn có thể kích hoạt hỗ trợ chìm a2dp bằng cách thêm dòng này bên dưới [General]phần:

  Enable=Source

Đây là cả hai tên được đặt ngược lại - vì những gì chúng tôi thêm vào đây là hỗ trợ chìm Bluetooth, không phải hỗ trợ nguồn - và mâu thuẫn với nhận xét trong tệp này cho rằng tất cả các dịch vụ đã triển khai đều được bật theo mặc định. :

Sau khi thực hiện thay đổi này, bạn sẽ cần khởi động lại bluetoothd bằng cách chạy sudo service bluetooth restart.

Nếu trước đây bạn đã ghép nối thiết bị Android và máy tính Ubuntu của mình trong khi cố gắng thực hiện công việc này, bạn sẽ cần xóa ghép nối ở cả hai bên và ghép lại chúng để Android nhận ra Ubuntu là một thiết bị âm thanh có sẵn.

Khi bạn đã hoàn thành việc này, thiết bị Android sẽ hiển thị dưới dạng thiết bị đầu vào trong PulseAudio. Nếu PulseAudio không phát hiện nguồn âm thanh Bluetooth mới, bạn có thể cần cài đặt và tải mô-đun Bluetooth, từ dòng lệnh:

 sudo apt-get install pulseaudio-module-bluetooth
 pactl load-module module-bluetooth-discover

Sau đó, bạn cần báo cho PulseAudio định tuyến đầu vào âm thanh này đến đầu ra / âm thanh của bạn (chẳng hạn như loa hoặc tai nghe Bluetooth) bằng kết nối loopback (một đường thẳng từ nguồn đến bồn).

Các phiên bản sau của PulseAudio có thể có chính sách mô-đun-bluetooth và nó có thể đã thiết lập một thiết bị loopback cho bạn, nhưng đây dường như không phải là trường hợp phổ biến nhất.

Một cách bán tự động để thiết lập kết nối loopback - nếu bạn cũng đã cài đặt chương trình GUI pavucontrol - chỉ cần tải mô-đun loopback và định cấu hình bằng pavucontrol, vì PulseAudio sẽ nhớ các cài đặt. Tải mô-đun được thực hiện từ lệnh bằng cách sử dụng pactl:

 pactl load-module module-loopback

Đừng sợ nếu bạn chưa nghe thấy bất cứ điều gì hoặc nếu bạn nhận được các hiệu ứng phản hồi lạ, chúng tôi cần nói cho thiết bị mới được tạo nguồn nào để nhận đầu vào và đầu tiên sẽ gửi đầu ra.

Mở pavucontrol và mở tab Cấu hình của nó. Đảm bảo thiết bị Bluetooth của bạn hiển thị ở đây (sau khi ghép nối với thiết bị bằng trình quản lý blueman hoặc công cụ Bluetooth khác) và cấu hình được đặt thành A2DP. Chuyển sang tab Thiết bị đầu vào và đảm bảo thiết bị của bạn cũng hiển thị ở đây và không bị tắt tiếng. Bây giờ chuyển sang tab Ghi âm và tạo kết nối loopback vừa tạo, sử dụng thiết bị của bạn làm nguồn với hộp chọn bên cạnh nút tắt tiếng. Chuyển sang tab Phát lại để chọn kết nối chìm nên sử dụng theo cùng một cách. Nếu thiết bị loopback không hiển thị trong các tab, hãy đảm bảo tất cả các luồng được hiển thị bằng hộp chọn ở cuối mỗi tab.

Bây giờ bạn sẽ nghe thấy âm thanh từ thiết bị của mình, nếu nó đang phát, trong loa của bạn hoặc bất kỳ đầu ra nào bạn chọn. Khi thiết bị của bạn bị ngắt kết nối, thiết bị loopback sẽ chuyển sang nguồn và nguồn có sẵn, điều này có thể không mong muốn, vì vậy hãy đảm bảo bạn tắt tiếng thiết bị loopback cho đến khi bạn cần. Kết nối loopback sẽ khôi phục cùng một nguồn / nguồn vào lần tới khi cùng một thiết bị Bluetooth được kết nối nhờ vào mô-đun - * - khôi phục các mô-đun.

Nếu điều đó không hiệu quả hoặc bạn chưa cài đặt pavucontrol, thay vào đó, bạn có thể thiết lập loopback bằng phương pháp sau:

 pactl load-module module-loopback source_dont_move=yes source=$BTSOURCE sink=$SINK

(Thay thế $BTSOURCEbằng tên nguồn cho thiết bị Bluetooth của bạn như PulseAudio nhìn thấy, ví dụ: bluez_source.14_DA_E9_2A_D7_57và thay thế $SINKbằng tên của đầu ra PulseAudio mà bạn muốn gửi luồng âm thanh tới, ví dụ : alsa_output.pci-0000_00_1b.0.analog-stereo. Bạn có thể bỏ hoàn toàn đối số chìm và có dự phòng đến một bồn rửa hoạt động và thay đổi nó sau thông qua pavucontrol.)

  • Bạn có thể tìm thấy $SINKvới pactl list sinks, nó được hiển thị sauName:
  • Tương tự như vậy bạn có thể thấy $BTSOURCEvớipactl list sources
  • Đối source_dont_movesố ngăn kết nối loopback quay trở lại nguồn âm thanh khác khi thiết bị Bluetooth bị ngắt kết nối. Thay vào đó, nó sẽ bị xóa và bạn sẽ phải thiết lập lại lần sau.

Đây là một ví dụ mà người ta sẽ trông như thế nào (Hãy nhớ thay thế :bằng _địa chỉ Bluetooth!):

pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo

Nếu tải mô-đun dự phòng thất bại, hãy thử xóa source_dont_move=yesđối số, nó sẽ được cung cấp trước trong phiên bản 1.0. Tuy nhiên, hãy cẩn thận để xóa kết nối loopback này trước khi bạn bỏ âm thanh này hoặc nếu micrô máy tính xách tay của bạn không được bật, bạn có thể nhận được một số phản hồi rất tệ. Để hủy kết nối loopback này theo cách thủ công khi bạn hoàn tất, hãy chạy:

pactl unload-module $(pactl list short modules | grep "loopback.*$BTSOURCE" | cut -f1)

Một lần nữa, thay thế $BTSOURCEbằng tên cho nguồn PulseAudio đề cập đến thiết bị Bluetooth của bạn. Bạn cũng có thể dỡ bỏ mô-đun bằng cách sử dụng id được trả về bởi lệnh tải mô-đun:

$ pactl load-module module-loopback source_dont_move=yes source=bluez_source.14_DA_E9_2A_D7_57 sink=alsa_output.pci-0000_00_14.2.analog-stereo
15
$ pactl unload-module 15

Người giới thiệu:

  • Blog đăng bài phác thảo một số chi tiết về cách khắc phục sự cố này trong Ubuntu.

chúng ta có thể thay đổi bản đồ kênh cho thiết bị chìm cụ thể không
Prakash V Holkar

chào bạn và cảm ơn bạn đã hướng dẫn chi tiết. Lệnh pactl load-module module-bluethooth-discoverthất bại trong studio ubfox 14.04. Vì vậy, tôi không thấy bất kỳ blueznguồn nào trong đó pulseaudio, mặc dù điện thoại của tôi thấy chính xác máy tính là một âm thanh chìm. Có ý kiến ​​gì không?
NASS

nếu pactl list sources shortkhông hiển thị nguồn bluez cho bạn, tôi đã tìm thấy hai giải pháp khả thi: gọi gdbus call --system --dest org.bluez --object-path /org/bluez/XXX/hci0/dev_XX_XX_XX_XX_XX_XX --method org.bluez.AudioSource.Connectnơi (đường dẫn bao gồm địa chỉ BD của thiết bị và đường dẫn bộ điều hợp mà bạn có thể nhận được gdbus call --system --dest org.bluez --object-path / --method org.bluez.Manager.DefaultAdapter). Hoặc sử dụng chân d như được giải thích ở đây . Nếu không, kết nối bên điện thoại, và bắt đầu chơi một cái gì đó.
Treviño

Tôi vẫn không thấy bất kỳ nguồn nào từ bluez xuất hiện. Linux Mint 17.3 "Rosa" tại đây.
donquixote

1
Ồ với những thay đổi tối thiểu (/etc/bluetooth/main.conf thay vì audio.conf), điều này hoạt động trên Rasbian. Cảm ơn bạn! (Không cần cấu hình loopback trong HĐH đó)
jamie

13

Tôi sử dụng blueman, được cài đặt từ trung tâm phần mềm Ubuntu. Nhấp chuột phải vào biểu tượng blueman * -> "dịch vụ cục bộ" -> âm thanh-> Kiểm tra "nhận âm thanh nâng cao" được cho biết. Btw Tôi sử dụng nó để nghe trong máy tính xách tay Ubuntu 11.10 của tôi những gì tôi chơi trên điện thoại Android.

* Biểu tượng blueman được hiển thị ở góc dưới bên phải trong vỏ gnome + ubfox 11.10, đó là trường hợp của tôi. Tôi hy vọng điều này hữu ích theo một cách nào đó cho bạn.


Giao diện cấu hình blueman cho âm thanh chỉ đặt giá trị Bật = Nguồn trong /etc/bluetooth/audio.conf, vì vậy tôi không thấy cách này sẽ cho phép Android sử dụng máy tính làm đầu ra âm thanh.
slangasek

ok, vì vậy nếu tôi đặt nó trong audio.conf và sau đó hủy ghép nối từ cả hai phía của kết nối, điều đó dường như là đủ để cho Android xem máy tính như một âm thanh chìm sau tất cả ...
slangasek

Tôi đã thử nó và không thể nhận ra nó là âm thanh chìm. : - /
Jorge Fidel

blueman đã làm việc cho tôi vào ngày 12.04 mà không có vấn đề gì khác ngoài thực tế tôi đã kết thúc với hai biểu tượng bluetooth trong applet chỉ báo của mình.
HDave

7

Bây giờ nó thực sự đơn giản trong Ubuntu 12.04

Kết nối thiết bị bluetooth của bạn

Tìm kiếm thiết bị bluetooth của bạn và ghi chú số nguồn của nó:

pactl list sources 

Tạo một loopback cho thiết bị bluetooth:

pactl load-module module-loopback source=$SOURCE_NUMBER  

Trong đó $ SOURCE_NUMBER là số bạn đã lưu ý trước đó.

Ví dụ: tôi đã nhập vào phần sau để phát lại âm thanh để hoạt động:

$ pactl load-module module-loopback source=3  

Đó là nó! Tôi thấy giải pháp trong câu trả lời hàng đầu hơi phức tạp, vì vậy tôi đã đơn giản hóa nó theo cách này (ít gõ và sao chép / dán) hơn nhiều. Mặc dù giải pháp của tôi có thể sẽ bị hỏng nếu bạn loại bỏ bất kỳ thiết bị âm thanh nào được liệt kê trước thiết bị bluetooth pactl list sources.

Ngoài ra, đừng quên xóa mô-đun loopback trước khi ngắt kết nối thiết bị bluetooth:

Lưu ý số mô-đun của thiết bị loopback bạn đã tạo:

pactl list short modules

Hủy bỏ thiết bị loopback:

pactl unload-module $MODULE_NUMBER

Các câu trả lời trước được viết trước khi phát hành 12.04, vì vậy tôi chắc chắn có một số thay đổi. Ví dụ: tôi không phải bật thủ công bằng cách sử dụng các thiết bị bluetooth làm nguồn âm thanh (nó được bật theo mặc định). Tuy nhiên, đôi khi tôi phải chuyển cấu hình "Âm thanh phương tiện" trong cài đặt bluetooth trên điện thoại của mình (Samsung Cap activate chạy CyanogenMod 9.1.0).

Có lẽ có một cách để tận dụng màn hình dbus bằng cách sử dụng tập lệnh shell để xem các kết nối thiết bị bluetooth A2DP và tự động tải mô-đun loopback cho nó, nhưng điều đó hơi quá đầu tôi.

Hy vọng rằng chúng ta sẽ không cần phải làm điều này bằng tay nữa trong Ubuntu 12.10.


Sau khi tải loopback mô-đun cho các bồn cụ thể, chúng ta có thể thay đổi sơ đồ kênh của loopback mô-đun của thiết bị cụ thể sang trái hoặc phải
Prakash V Holkar

3

Đối với 13.04, hãy ghép nối thiết bị nguồn của bạn với máy tính xách tay Ubuntu và nó chỉ hoạt động! Rất mát mẻ để thấy rằng nó là dễ dàng bây giờ.



0

Thậm chí giải pháp dễ hơn câu trả lời.

Bạn có thể chỉ cần đi

sudo apt-get install pulseaudio*

Sau đó khởi động lại. Sau khi khởi động lại, kết nối với Bluetooth của bạn và chỉ cần phát nhạc trên điện thoại của bạn. Mọi thứ sẽ được truyền đến máy tính của bạn và phát ra trên loa của máy tính.

Và vâng! không có gì.


apt-getsử dụng các biểu thức thông thường, không phải ký tự đại diện. Vì vậy, bạn không biết cái gì sẽ được cài đặt bằng cách sử dụng pulseaudio*(gợi ý: đó không chỉ là các gói bắt đầu pulseaudi). Và PulseAudio đã là một phần của cài đặt Ubuntu mặc định.
muru

Đúng! Nhưng điều này sẽ làm việc cho tất cả những người lười biếng muốn mọi thứ hoạt động ngay lập tức.
Adel Abula - MageBinary
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.