Làm cách nào để định cấu hình âm thanh của tôi cho Jasper trên Raspbian Jessie?


19

Tôi đang sử dụng Raspbian Jessie (2015-11-21) để chạy Jasper (nhánh chính) trên Raspberry Pi 2 Model B. Các hướng dẫn cài đặt trong tài liệu dường như dành cho Wheezy chứ không phải cho Jessie.

Chạy Jasper trên Wheezy hoạt động tốt. Nhưng, trên Jessie, tôi gặp vấn đề trong việc cấu hình âm thanh. Hoặc mic của tôi hoạt động nhưng không phải là loa hoặc ngược lại.

Điều cần làm là, card âm thanh mặc định phải được đặt thành USB vì đó là nơi mic USB của tôi được kết nối và Jasper yêu cầu điều này. Có rất nhiều câu trả lời nói về việc cấu hình ALSA thông qua ~/.asoundrc, /etc/asound.confvà thậm chí /usr/share/alsa/alsa.confnhưng không có câu trả lời nào phù hợp với tôi.

Khi tôi mở máy trộn qua alsamixervà nhấn F6, tôi luôn xem bcm2835là thẻ mặc định. Đó là thẻ mặc định của Pi2 nhưng tôi muốn biến USB của mình thành thẻ mặc định.

Làm thế nào để tôi làm điều này?

Câu trả lời:


25

Theo ALSA Wiki , dưới tiêu đề có nội dung " Cách chọn một đơn hàng cụ thể cho nhiều thẻ được cài đặt ", nó ghi như sau:

Thẻ nào là thẻ số 0, 1 và theo mặc định được xác định theo thứ tự tải mô-đun. Điều này đặc biệt hữu ích để chọn thẻ nào trở thành thẻ mặc định.

Về lý thuyết, do đó, có thể chọn thẻ nào trong số một số thẻ đã cài đặt trở thành thẻ 0, thẻ mặc định, bằng cách đảm bảo mô-đun trình điều khiển của nó được tải trước. (Lưu ý: điều này giả định rằng mỗi card âm thanh yêu cầu một trình điều khiển khác nhau. Nếu bạn có hai soundcard cùng loại, vui lòng bỏ qua phần tiếp theo.)

Có hai cách để đạt được điều này, tùy chọn "cũ" index của mô-đun trình điều khiển thẻ và tùy chọn khe cắm (và mới) thay thế của mô-đun snd.

Nó ghi lại hai phương pháp để làm điều này:

  1. Phương thức "index =" cũ hơn
  2. Phương thức "slot =" mới hơn

Cái trước là những gì hướng dẫn cài đặt Jasper khuyên dùng. Đó cũng là điều mà phần lớn các giải pháp ngoài kia nói về. Tuy nhiên, đây là phương pháp cũ hơn và có thể không hoạt động trên các hình ảnh Raspbian Jessie hiện tại.

Một sự kết hợp của cả hai phương pháp là những gì làm việc cho tôi.

Trước hết, hãy kiểm tra xem thứ tự thẻ của bạn đã được nạp vào:

$ cat /proc/asound/modules
 0 snd_bcm2835
 1 snd_usb_audio

Đếm thẻ bắt đầu từ 0đó mặc định bcm2835được tải trước và thẻ USB có mic của tôi được tải thứ hai.

Để sắp xếp lại các thẻ của tôi, trước tiên tôi tạo một tệp có tên /etc/modprobe.d/alsa-base.conf. Nó có thể được đặt tên bất cứ điều gì bạn muốn miễn là nó kết thúc .conf. Sau đó tôi đã thêm vào như sau:

# This sets the index value of the cards but doesn't reorder.
options snd_usb_audio index=0
options snd_bcm2835 index=1

# Does the reordering.
options snd slots=snd_usb_audio,snd_bcm2835

Các ý kiến ​​nên giải thích những gì mỗi dòng làm. Khi bạn làm điều đó, có vẻ như bạn phải khởi động lại máy để nó hoạt động.

Khi bạn khởi động lại, bạn sẽ có thể ghi lại một số âm thanh bằng thẻ mặc định mà giờ là mic của bạn:

$ arecord temp.wav

và sau đó phát nó, chỉ định thẻ là 1 và thiết bị là 0, nơi đầu ra loa của bạn sẽ là:

aplay -D plughw:1,0 temp.wav

Tôi ban đầu chỉ thêm dòng với slotsnó. Điều này làm việc trong việc biến thẻ USB của tôi thành thẻ mặc định nhưng nó đã bị lập chỉ mục sai. Ví dụ, một khi tôi đã làm điều đó, đây là giao diện của tôi /proc/asound/modules:

$ cat /proc/asound/modules
 1 snd_usb_audio
 2 snd_bcm2835

Lý tưởng nhất, nó sẽ trông như thế này:

 0 snd_usb_audio
 1 snd_bcm2835

Và đó là lý do tại sao tôi cũng sử dụng indexphương pháp để đạt được điều này.


Rất vui vì nó đã giúp :) Tôi sẽ có một tập lệnh thiết lập bash cũng như một cuốn sách dạy nấu ăn để làm tất cả những điều này trong vài ngày, trên tài khoản Github của tôi (liên kết trong hồ sơ của tôi).
Housni

Tôi có hai thiết bị được gọi snd_usb_audio, thật không may.
kleinfreund

@Housni Bạn đã thực hiện kịch bản đó chưa?
not2qubit

0

Sau khi cố gắng gỡ lỗi các vấn đề alsa cho dự án này và để BÓNG USB mic và loa bcm2835 hoạt động, tôi nghĩ có một vấn đề cơ bản mà TẤT CẢ những lời khuyên ALSA tôi nhận được không giải quyết được.

Thư mục / usr / share / alsa / tags không có tệp bcm2835.conf. Tệp thư mục / usr / share / alsa alsa.conf để lại rất nhiều sơ khai cần được chỉ định. Trừ khi thẻ được cung cấp cho bcm2835, việc kích hoạt tính năng Jasper.py sẽ hiển thị rất nhiều thông báo lỗi được cho là không gây tử vong. Bằng cách làm việc với tệp bcm2835.conf, bạn có thể thoát khỏi các tin nhắn gây khó chịu.

Dường như với tôi rằng đây là một lỗi của Jessie; thực sự cần có một tập tin giải quyết các thông báo lỗi này. Tôi dường như chỉ lười biếng đối với lập trình viên jessie liên quan đến ALSA để không tạo ra một thử nghiệm.

Tôi đã không làm việc với tất cả các thông báo lỗi, nhưng tôi nghi ngờ rằng các thông báo khác cũng là do điều này.

Một trường hợp khác không có bản phát hành trưởng thành là không kiểm tra phần sụn cũ trong khi khởi động. Phần sụn cũ trên jessie của tôi dẫn đến một máy tính để bàn không phản hồi với bàn phím hoặc chuột, đây là phần trình diễn để sử dụng jessie với phần sụn cũ, trừ khi bạn biết ssh. Không phải là một tình huống người dùng ngây thơ.


1
WRT nó "dường như chỉ lười biếng đối với lập trình viên jessie liên quan đến ALSA mà chưa tạo ra một bản thử nghiệm", đừng nhầm lẫn khi tin rằng Debian 8, aka. jessie, từ đó Raspbian được chế tạo, chủ yếu dành cho Raspberry Pi và BCM2835 SoC. Cái sau sẽ chiếm <1% người dùng Debian, vì vậy nó khó có thể được coi là ưu tiên của họ. Việc một nhóm tình nguyện viên chủ yếu không muốn làm việc với bàn phím 25 giờ / ngày để trở thành tất cả mọi người không khiến họ lười biếng ....
goldilocks

... Nó chỉ cho thấy không có đủ sự quan tâm của mọi người trong cộng đồng với chuyên môn kỹ thuật cần thiết để thực hiện công việc.
goldilocks
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.