2011-08-09 29 views
5

Tôi có hai luồng mẫu PCM khác nhau. Có thể kết hợp chúng bằng cách nào đó và chơi với ALSA trên cùng một thiết bị đầu ra không?Cách trộn nhiều luồng PCM bằng ALSA

Tôi đọc có thể sử dụng máy trộn nhưng tôi cảm thấy khó hiểu vì thiếu tài liệu. Bất cứ ai có thể vui lòng cung cấp một số thông tin thêm về bất kỳ loại nào về cách thức này có thể được thực hiện (nếu nó thực sự là)?

Cảm ơn!

Trả lời

3

Đối với điều đó, hãy kiểm tra xem bạn có đang có .asoundrc tệp hệ thống của chúng tôi không. Nếu không có, sau đó tạo một và bạn có thể đặt nó trong thư mục/home của bạn. Cập nhật nó với các thiết lập này:

pcm.!default { 
       type plug 
       slave.pcm "dmixer" 
} 
pcm.dmixer { 
      type dmix 
     ipc_key 1024 
     slave { 
      pcm "hw:1,0" 
      period_time 0 
       period_size 1024 
      buffer_size 4096 
      rate 44100 
     } 
     bindings { 
      0 0 
      1 1 
     } 
} 
ctl.dmixer { 
     type hw 
     card 0 
} 

Sử dụng $aplay -l để có được một danh sách các thiết bị trên hệ thống của bạn. Các hw: X, Y đến từ bản đồ này của phần cứng của bạn, trong đó X là số thẻ, trong khi Y là số thiết bị.

Bây giờ, mở thiết bị đầu cuối, và chơi dòng PCM đầu tiên của bạn với: $aplay -f cd pcm_sound1.wav Và trong tab khác, chơi dòng PCM thứ hai của bạn: $aplay -f cd -D default pcm_sound2.wav

Nó sẽ kết hợp hai PCM bạn dòng dữ liệu.

Chúc mừng,

+0

Câu trả lời này rất hữu ích nhưng tôi hơi bối rối và sẽ đánh giá cao giải thích thêm. Tại sao lệnh 'aplay' thứ hai lại có' -D default', nhưng lệnh đầu tiên thì không? Ý nghĩa của phần 'bindings' là gì và' ctl.dmixer' là gì? Có thể kết hợp nhiều hơn hai luồng không, ví dụ: nếu tôi chạy ba lệnh 'aplay' cùng một lúc? Tại sao thiết bị "mặc định" của kiểu 'plug' trỏ tới' dmixer', chúng ta có thể đổi tên 'pcm.dmixer' thành' pcm.! Default' và tránh thụt lùi không? – Metamorphic

1

Tôi không chắc liệu điều này có xứng đáng với câu trả lời riêng hay không. Tôi đã sử dụng câu trả lời của HSC và các ví dụ tại "ALSA Wiki - The Dmix Howto". Các tài liệu Dmix thực sự là một chút bực bội.

Dưới đây là ví dụ ~/.asoundrc phù hợp với tôi. Phần "ràng buộc" là không cần thiết, nhưng HOWTO nói nó giúp "chip đa kênh hoạt động nhanh hơn" (không chắc chắn nếu tôi quan tâm?). Nếu tôi liên kết "0 1 1 0" thì nó sẽ chuyển kênh phải/trái. Nếu tôi liên kết "0 1 1 1" thì tôi lấy rác ở tai phải ... Rõ ràng ipc_key là một tham số bắt buộc; Tôi chỉ chọn một số nguyên ngẫu nhiên.

# example 1 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { 
     pcm "hw:3" 
     period_time 0 
     period_size 1024 # must be power of 2 
     buffer_size 4096 
     rate 44100 
    } 
    bindings { 
     0 0 
     1 1 
    } 
} 

pcm.!default hw3mix 

Dòng cuối cùng làm cho thiết bị mặc định mới của tôi.

tôi đơn giản hóa ở trên để:

# example 2 
pcm.hw3mix { 
    type dmix 
    ipc_key 1939 # must be unique 
    slave { pcm "hw:3" } 
} 

pcm.!default hw3mix 

và nó dường như chỉ làm việc tốt.

Như đã đề cập vào liên kết ALSA Wiki ở trên, tôi có thể tiếp tục đơn giản hóa nó để:

# example 3 
pcm.dsp0 { 
    type plug 
    slave.pcm "dmix" 
} 

pcm.!default dsp0 

và điều này có thể được tiếp tục đơn giản hóa để:

# example 4 
pcm.!default { 
    type plug 
    slave.pcm "dmix" 
} 

hoặc thậm chí:

# example 5 
pcm.!default plug:dmix 

Tuy nhiên, ba ví dụ cuối cùng không cho phép tôi chỉ định tham số cho plugin Dmix. Tôi muốn tạo một thiết bị kết hợp nhiều luồng tới "hw: 3". Tôi nghĩ rằng điều này đã được xác định như là một tham số để Dmix vì nó không phải là thiết bị mặc định, vì vậy tôi đã đi với ví dụ thứ hai của tôi ở trên.Trong thực tế ~/.asoundrc của tôi, cũng có một khối cho "hw: 0,0" được gọi là "hw0mix", vì vậy bằng cách thay đổi nhận xét trên các dòng sau, tôi có thể chuyển đổi đầu ra của luồng (vừa được tạo) giữa tai nghe và loa:

#pcm.!default hw0mix 
pcm.!default hw3mix 

NB: Ở trên đề cập đến các thiết bị như "hw: 0,0" và "hw: 3" ... khó tìm ra cách đảm bảo số thiết bị ổn định cho âm thanh USB khác nhau của tôi thiết bị, tôi đã tìm thấy hướng dẫn here trong "Đặt hàng nhiều thẻ cùng loại". Cấu hình bao gồm một dòng trong một tệp trong /etc/modprobe.d/. Đó là cách tôi nhận được các con số như 0 và 3 để chỉ các thiết bị tương tự trên các lần khởi động lại.

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