2009-10-01 9 views
5

Tôi đang cố gắng sử dụng NAudio để tạo một ứng dụng đầu ra nhiều âm thanh. Chúng tôi đã cài đặt 8 card âm thanh USB. NAudio cho phép tôi sử dụng tất cả 8 nhưng tôi không thể tìm ra một mẫu để xác định chỉ mục thiết bị nào là thẻ nào.Điều gì xác định thứ tự cho các thiết bị âm thanh trong cửa sổ khi sử dụng winmm.dll?

Thẻ sẽ được nối với phần cứng khác nhau vì vậy điều quan trọng là phải đảm bảo bạn biết bạn đang sử dụng thẻ nào.

Tôi đã cố gắng sử dụng WMI để thăm dò thông tin nhưng tôi dường như không thể định vị bất kỳ thông tin nào xác định thứ tự của thiết bị âm thanh.

Cập nhật: Tôi quên bao gồm một số thông tin về sự cố này. Các card âm thanh là tất cả các card âm thanh USB nối qua một cổng 12 cổng.

Trả lời

3

Trình tự của các thiết bị là không xác định cho tất cả các phiên bản của Windows. Đối với Vista và ở trên, các thiết bị thường được đặt hàng bởi GUID DSound (nhiều hơn hoặc ít hơn) để chúng có hiệu quả ngẫu nhiên.

+0

Khá nhiều những gì tôi đã suy nghĩ nhưng tôi nghĩ rằng tôi có một hack để tìm ra nó. –

1

Hãy xem bài viết MSDN này. Nó sử dụng DirectSound để liệt kê các thiết bị âm thanh:

http://msdn.microsoft.com/en-us/library/bb318674(VS.85).aspx

+0

Chưa thử điều này vì tôi sẽ phải mang các hội đồng DirectX vào mã. Tôi sẽ cố gắng này là tất cả những gì khác thất bại. –

2

Tôi giả sử bạn đang sử dụng WaveOut? Bạn có thể gọi WaveOut.GetCapabilities (deviceNumber) để giữ tên của thiết bị, có thể giúp bạn.

+0

Điều này sẽ hoạt động nếu chúng không phải là tất cả các thẻ âm thanh USB giống hệt nhau. Xin lỗi tôi đã không đề cập đến điều đó trước đây. Cảm ơn mặc dù. –

2

Đây là những gì tôi đã đưa ra cho đến nay và nó hoạt động cho chúng tôi.

Sử dụng WMI bạn có thể lấy DeviceID từ Win32_SoundDevice. Sau đó, sử dụng mà bạn có thể truy cập vào sổ đăng ký tại HKLM \ SYSTEM \ CurrentControlSet \ ENUM \ 'DeviceID' và lấy giá trị chuỗi có tên là "Driver". Giá trị này chứa ClassGUID cộng với một số ở cuối.

Ví dụ: {4d36e96c-e325-11ce-bfc1-08002be10318} \ 0015

Nếu bạn lột con số cuối cùng * (15) * cho tất cả các bạn các thiết bị và sắp xếp chúng âm thanh, đó là để các thiết bị được liệt kê từ NAudio với sử dụng winmm.dll. Ngoài ra còn có một vị trí cho các thiết bị âm thanh này, hoặc trong sổ đăng ký tại cùng một khóa hoặc từ Win32_PNPEntity bằng DeviceID.

Trong trường hợp của chúng tôi, vị trí cho phép chúng tôi xác định cổng của thiết bị âm thanh trung tâm USB được cắm vào.