2009-12-08 37 views
5

Làm cách nào để tìm hiểu khả năng của thiết bị ALSA mà không cần mở thiết bị trước? Vấn đề là, tôi cần cung cấp các tham số cho hàm snd_pcm_open() để sử dụng các hàm kiểm tra mà tôi cho là ngớ ngẩn. Tại sao lại hỏi đây có phải là thiết bị phát lại hoặc ghi âm nếu tôi phải báo trước cho hàm mở? Ví dụ, tôi muốn liệt kê tất cả các thiết bị phát lại nhưng cách duy nhất tôi có thể nghĩ là cố gắng mở mọi thiết bị tôi tìm thấy (với snd_device_name_hint()) và thử mở chúng ở chế độ phát lại và nếu tôi quản lý để mở , mọi thứ đều ổn.Cách tìm hiểu khả năng thiết bị âm thanh ALSA lập trình trong Linux mà không cần mở thiết bị

Vấn đề là, với tất cả các biến thể có thể (tỷ lệ mẫu, kênh, v.v ...) sẽ có một số lượng lớn các() cần phải thực hiện để tìm ra các tham số.

Trả lời

6

Sử dụng snd_ctl_next để lặp qua tất cả các thiết bị, sau đó snd_ctl_open để nhận được thông tin về các thiết bị - đây không giống như snd_pcm_open, điều này có thể thất bại nếu chương trình khác có thiết bị mở hoặc nếu bạn có cài đặt không đúng.

Nó khá dày đặc, nhưng đây là một số mã nguồn mở lặp qua tất cả các thiết bị ALSA bạn có thể xem: https://app.assembla.com/spaces/portaudio/git/source/master/src/hostapi/alsa/pa_linux_alsa.c - tìm kiếm BuildDeviceList để bắt đầu.

-1

Cung cấp cho bạn có thể thực hiện lệnh trình bao. Sau đó, aplay là bạn của bạn.

http://alsa.opensrc.org/Aplay

aplay -l

danh sách tất cả các card âm thanh và âm thanh kỹ thuật số thiết bị

+6

này không cho tôi biết bất cứ điều gì tôi không biết với snd_device_name_hint(). Nó dường như không nói, ví dụ, tỷ lệ mẫu mà mỗi thiết bị hỗ trợ. Plus tôi sẽ không nói nó rất đơn giản để gọi này từ mã C và xử lý đầu ra ngay cả khi nó đã sản xuất các thông tin tôi cần ... – Makis

0

Đó là yêu cầu đầu tiên của tôi đối với một dự án linux/unix mà tôi cần biết về tất cả khả năng của thiết bị âm thanh có sẵn. Sau đó, tôi cần phải sử dụng các thiết bị này để chụp và phát lại âm thanh. Những gì tôi đã làm là khá đơn giản. Có một lệnh linux/unix được sử dụng để tìm các thiết bị thông qua tiện ích alsa trong linux.

Đó là:

aplay -l 

Bây giờ những gì tôi đã làm chỉ là tạo ra một chương trình để cung cấp cho các hiện như như như thế này bởi alsa.

Để được trợ giúp của mọi người, tôi đã tạo một thư viện (.so) và một Ứng dụng mẫu thể hiện việc sử dụng thư viện này trong C++.

Sản lượng của thư viện của tôi là như-

[[email protected]~]# ./IdeaAudioEngineTest 
HDA Intel plughw:0,0 
HDA Intel plughw:0,2 

Thư viện này cũng có thể chụp và xem lại các dữ liệu âm thanh thời gian thực.

Nó có sẵn với tài liệu trong IdeaAudio library with Duplex Alsa Audio

Các vấn đề liên quan