Có thể xử lý tín hiệu thời gian thực trong Windows không?


8

Câu hỏi này liên quan đến Làm thế nào để quyết định nền tảng nào là tốt nhất để thực hiện xử lý âm thanh thời gian thực trên? , nhưng tập trung vào Windows.

Tôi muốn có thể lấy đầu vào từ bảng thu thập dữ liệu và xử lý nó (thông qua Matlab hoặc chương trình tùy chỉnh) và sử dụng kết quả của chương trình đó để điều khiển một thiết bị bên ngoài được gắn qua USB. Tôi biết rằng việc nhận được các phản hồi thời gian thực khó khăn với Windows là gần như không thể (vì có một "lung" (thuật ngữ kỹ thuật) là 3-15ms).

Cách hiệu quả nhất để giảm thời gian ngọ nguậy này là gì? Điều này có thể không? Tôi có nên tìm kiếm một giải pháp nhúng ngay lập tức?

Câu trả lời:


4

Windows không phải là hệ điều hành thời gian thực, vì vậy, bạn không có khả năng xử lý thời gian thực trong Windows.

Với Windows Vista, Microsoft đã cung cấp một API mới mà trong số những thứ khác nhắm đến hiệu suất nghiêm ngặt, trong đó Luồng chế độ độc quyền hứa hẹn hiệu suất gần với thời gian thực. Điều này đạt được với một vài thứ mạnh mẽ làm việc cùng nhau, bao gồm đường dẫn ngắn và độc quyền đến phần cứng âm thanh từ các thành phần chế độ người dùng, lập lịch đa phương tiện cụ thể. Hãy để tôi trích dẫn Wiki về điều này:

Đối với các chuyên gia âm thanh, trình điều khiển cổng WaveRT mới đã được giới thiệu nhằm cố gắng đạt được hiệu suất thời gian thực bằng cách sử dụng bộ lập lịch lớp đa phương tiện và hỗ trợ các ứng dụng âm thanh giúp giảm độ trễ của luồng âm thanh. Kết quả là, các ứng dụng chế độ người dùng hoàn toàn có thể chi phối các luồng âm thanh mà không cần thực thi mã trong kernel trong thời gian chạy. WaveRT cho phép ứng dụng chế độ người dùng truy cập trực tiếp vào bộ đệm phần cứng âm thanh bên trong và bộ đếm vị trí mẫu (dữ liệu trong bộ nhớ được ánh xạ tới công cụ DMA phần cứng âm thanh). Nó cho phép các ứng dụng thăm dò vị trí hiện tại trong cửa sổ bộ nhớ DMA mà phần cứng đang truy cập. WaveRT cũng hỗ trợ khái niệm sự kiện thông báo đồng hồ được tạo bằng phần cứng, tương tự như API ASIO, để các ứng dụng không cần thăm dò ý kiến ​​cho vị trí hiện tại nếu chúng không muốn. Tuy nhiên, WaveRT chỉ hoạt động với các thiết bị âm thanh PCI, PCI Express hoặc trên bo mạch; nó không hoạt động với giao diện USB hoặc FireWire phổ biến hơn trong ngành công nghiệp âm thanh chuyên nghiệp.

Chế độ hoạt động mới này đã mở ra những cơ hội thú vị để xử lý âm thanh có độ trễ thấp, như báo cáo của người dùng hài lòng :

Tôi nhận được âm thanh ổn định rock hoàn hảo với bộ đệm 2ms + độ trễ 0,5ms, so với âm thanh bán ổn định trong bộ đệm 4ms (độ trễ đầu ra + 5ms), với ASIO.

Tùy thuộc vào việc xấp xỉ thời gian thực này có tốt cho bạn hay không, Windows vẫn có thể là một môi trường tốt cho tác vụ được đề cập.


9

nếu bạn cần giữ jitter (giả sử đó là những gì bạn muốn nói bằng cách "ngọ nguậy" :) xuống <1ms tôi sẽ quên Windows. Liệu độ trễ tuyệt đối từ đầu vào đến đầu ra có vấn đề, hay chỉ là jitter?

Bạn có thể quản lý nó một số thời gian, nhưng đảm bảo nó là không thể. Hình phạt nào cho việc không đáp ứng thời hạn? Nó sẽ thổi lên loa? Lái một cánh tay robot quá mạnh chống lại điểm dừng? Hay một cái gì đó lành tính hơn?

Thực tế là đầu ra của bạn là USB cũng không có khả năng giúp đỡ các cổ phần jitter vì có rất nhiều tương tác hệ điều hành bổ sung ở đó và cấu trúc liên kết của xe buýt cũng sẽ cản trở độ trễ tiềm năng của bạn - nếu đầu ra của bạn ở cuối chuỗi một vài trung tâm, ví dụ.


Vâng, jitter là thuật ngữ tôi đã đạt được, cảm ơn.
jonsca

5

Việc này có khả thi hay không phụ thuộc vào yêu cầu độ trễ của bạn, tức là tổng độ trễ giữa đầu vào và đầu ra. Điểm khởi đầu tốt có thể là thiết lập máy trạm âm thanh kỹ thuật số bằng phần mềm ghi âm như ProTools, Sonar, Ableton, Cubase, v.v. Những công việc này với phần cứng I / O rẻ tiền và đi kèm với trình điều khiển được tối ưu hóa độ trễ thấp. Một số trong số này có giao diện "cắm vào" cho phép bạn lặp trong quá trình xử lý tín hiệu của riêng bạn. Một định dạng phổ biến là VST từ Steinberg, được nhiều máy chủ hỗ trợ. Nó được sử dụng để mở và miễn phí nhưng có thể cần phải có giấy phép ngay bây giờ.

Đây http://www.kvraudio.com/wiki/ là một nguồn lực tốt cho điều đó đại loại như vậy.

Nếu bạn muốn xử lý trong Matlab, bạn có thể phải viết trình điều khiển của riêng mình. Tôi đã thấy điều đó được thực hiện với DLL và giao diện JAVA bản địa. Bạn cũng có thể hack một cái gì đó cùng với audioplayer () và audiorecorder () nhưng chúng có thể yêu cầu độ trễ khá cao để xử lý các ngắt Windows và làm các công việc khác. Về bản chất, bạn thiết lập một điều khiển GUI với một cuộc gọi lại được kích hoạt theo thời gian. Trong cuộc gọi lại, bạn đọc tất cả các đầu vào có sẵn, xử lý chúng, đưa chúng vào đầu ra và hy vọng điều tốt nhất.

Nói chung, nó giúp giữ cho hộp Windows "sạch" nhất có thể, tức là không có kết nối mạng (trong khi bạn xử lý âm thanh), không có phần mềm chống vi-rút và chỉ chạy tối thiểu tuyệt đối các mục, phần mềm & dịch vụ khởi động.

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.