Apakah pemrosesan sinyal waktu nyata dimungkinkan pada Windows?

8

Pertanyaan ini terkait dengan pada Bagaimana menentukan platform apa yang terbaik untuk mengimplementasikan pemrosesan audio waktu nyata? , tetapi fokus pada Windows.

Saya ingin dapat mengambil input dari papan akuisisi data dan memprosesnya (baik melalui Matlab atau program kustom), dan menggunakan hasil dari program itu untuk menggerakkan perangkat eksternal yang terpasang melalui USB. Saya tahu bahwa mendapatkan respons real-time yang sulit dengan Windows hampir tidak mungkin (karena ada "goyangan" (istilah teknis) 3-15 ms).

Apa cara paling efektif untuk mengurangi waktu goyangan ini? Apakah ini mungkin? Haruskah saya mencari solusi yang tertanam langsung?

jonsca
sumber

Jawaban:

4

Windows bukan OS waktu nyata, jadi Anda tidak memiliki kemampuan pemrosesan waktu nyata yang sebenarnya di Windows.

Dengan Windows Vista, Microsoft menawarkan API baru yang antara lain menargetkan kinerja yang ketat, di mana Aliran Mode Eksklusif menjanjikan kinerja yang mendekati waktu nyata. Ini dicapai dengan beberapa hal kuat yang bekerja bersama, termasuk jalur pendek dan eksklusif ke perangkat keras audio dari komponen mode pengguna, penjadwalan multimedia tertentu. Izinkan saya mengutip Wiki tentang ini:

Untuk profesional audio, driver port WaveRT baru telah diperkenalkan yang berusaha untuk mencapai kinerja real-time dengan menggunakan penjadwal kelas multimedia dan mendukung aplikasi audio yang mengurangi latensi stream audio. Akibatnya, aplikasi mode pengguna dapat sepenuhnya mengatur aliran audio tanpa eksekusi kode apa pun di kernel selama runtime. WaveRT memungkinkan aplikasi mode pengguna akses langsung ke buffer perangkat keras audio internal dan penghitung posisi sampel (data dalam memori yang dipetakan ke mesin DMA perangkat keras audio). Ini memungkinkan aplikasi untuk menyurvei posisi saat ini di jendela memori DMA yang diakses perangkat keras. WaveRT juga mendukung gagasan acara pemberitahuan jam yang dihasilkan perangkat keras, mirip dengan ASIO API, sehingga aplikasi tidak perlu polling untuk posisi saat ini jika mereka tidak mau. Namun WaveRT hanya bekerja dengan PCI, PCI Express atau perangkat audio onboard; itu tidak bekerja dengan antarmuka USB atau FireWire yang lebih luas di industri audio profesional.

Mode operasi baru ini membuka peluang menarik untuk pemrosesan audio latensi rendah, seperti dilaporkan oleh pengguna yang bahagia :

Saya mendapatkan audio solid solid rock yang sempurna dengan buffer 2ms + latensi 0,5ms, dibandingkan dengan audio semi-stabil di buffer 4ms (+ latensi keluaran 5ms), dengan ASIO.

Bergantung pada apakah perkiraan waktu nyata ini baik untuk Anda, Windows mungkin masih merupakan lingkungan yang baik untuk tugas yang disebutkan.

Roman R.
sumber
9

jika Anda perlu menjaga kegugupan (dengan asumsi itulah yang Anda maksud dengan "goyangkan" :) hingga <1ms saya akan mengatakan lupakan Windows. Apakah latensi absolut dari input ke output penting, atau itu hanya jitter?

Anda mungkin mengelolanya beberapa saat, tetapi menjamin itu tidak mungkin. Apa hukuman karena gagal memenuhi tenggat waktu? Apakah ini akan meledakkan speaker? Mengendarai lengan robot terlalu keras melawan pemberhentian? Atau sesuatu yang lebih jinak?

Kenyataan bahwa output Anda adalah USB juga tidak mungkin membantu dalam taruhan jitter karena ada banyak interaksi OS tambahan di sana, dan topologi bus juga akan menghambat potensi latensi Anda - jika output Anda berada di ujung rangkaian beberapa hub, misalnya.

Martin Thompson
sumber
Ya, jitter adalah istilah yang saya raih, terima kasih.
jonsca
5

Apakah ini mungkin atau tidak tergantung pada persyaratan latensi Anda, yaitu penundaan total antara input dan output. Titik awal yang baik dapat menyiapkan stasiun kerja audio digital menggunakan perangkat lunak perekaman seperti ProTools, Sonar, Ableton, Cubase dll. Ini bekerja dengan perangkat I / O (semacam) yang murah dan dilengkapi dengan driver yang dioptimalkan dengan latensi rendah. Beberapa di antaranya memiliki "plug in" antarmuka yang memungkinkan Anda untuk loop dalam pemrosesan sinyal Anda sendiri. Format populer adalah VST dari Steinberg yang didukung oleh banyak host. Dulu terbuka dan gratis tetapi mungkin memerlukan lisensi sekarang.

Http://www.kvraudio.com/wiki/ ini adalah sumber yang bagus untuk hal semacam itu.

Jika Anda ingin memproses di Matlab, Anda mungkin harus menulis driver sendiri. Saya telah melihat hal itu dilakukan dengan DLL dan juga antarmuka JAVA asli. Anda juga dapat meretas sesuatu bersama dengan audioplayer () dan audiorecorder () tetapi ini mungkin memerlukan latensi yang cukup tinggi untuk menangani interupsi Windows dan melakukan hal-hal lain. Intinya, Anda menyiapkan kontrol GUI dengan panggilan balik yang dipicu waktu. Dalam panggilan kembali Anda membaca semua input yang tersedia, memprosesnya, mendorongnya ke dalam output dan berharap yang terbaik.

Secara umum itu membantu untuk menjaga kotak Windows sebagai "bersih" mungkin, yaitu tidak ada koneksi jaringan (saat Anda memproses audio), tidak ada perangkat lunak anti-virus dan hanya menjalankan minimum mutlak item start up, perangkat lunak & layanan.

Hilmar
sumber