L'elaborazione del segnale in tempo reale è possibile in Windows?


8

Questa domanda è correlata a Come decidere su quale piattaforma è meglio implementare l'elaborazione audio in tempo reale? , ma concentrandosi su Windows.

Mi piacerebbe essere in grado di ricevere input da una scheda di acquisizione dati ed elaborarli (tramite Matlab o un programma personalizzato) e utilizzare il risultato di quel programma per guidare un dispositivo esterno collegato tramite USB. So che ottenere risposte in tempo reale difficili con Windows è quasi impossibile (in quanto esiste un "wiggle" (termine tecnico) di 3-15 ms).

Qual è il modo più efficace per ridurre questo tempo di oscillazione? È possibile? Dovrei cercare subito una soluzione integrata?

Risposte:


4

Windows non è un sistema operativo in tempo reale, quindi non hai le vere capacità di elaborazione in tempo reale in Windows.

Con Windows Vista, Microsoft ha offerto una nuova API che, tra le altre cose, mirava a prestazioni rigorose, in cui i flussi in modalità esclusiva promettevano prestazioni quasi in tempo reale. Ciò si ottiene con alcune cose potenti che lavorano insieme, tra cui un percorso breve ed esclusivo all'hardware audio dai componenti della modalità utente, una pianificazione multimediale specifica. Vorrei citare Wiki su questo:

Per i professionisti dell'audio, è stato introdotto un nuovo driver della porta WaveRT che si sforza di ottenere prestazioni in tempo reale utilizzando lo schedulatore di classe multimediale e supporta applicazioni audio che riducono la latenza dei flussi audio. Di conseguenza, le applicazioni in modalità utente possono governare completamente i flussi audio senza alcuna esecuzione di codice nel kernel durante il runtime. WaveRT consente all'applicazione in modalità utente l'accesso diretto ai buffer hardware audio interni e ai contatori di posizione del campione (dati nella memoria mappati al motore DMA hardware audio). Consente alle applicazioni di eseguire il polling della posizione corrente nella finestra della memoria DMA a cui accede l'hardware. WaveRT supporta anche l'idea di un evento di notifica dell'orologio generato dall'hardware, simile all'API ASIO, in modo che le applicazioni non debbano eseguire il polling per la posizione corrente se non lo desiderano. WaveRT tuttavia funziona solo con dispositivi audio PCI, PCI Express o integrati; non funziona con le interfacce USB o FireWire che sono più diffuse nel settore audio professionale.

Questa nuova modalità operativa ha aperto interessanti opportunità per l'elaborazione audio a bassa latenza, come riportato da utenti felici :

Ottengo un audio stabile, solido come una roccia, con buffer di 2 ms + latenza di 0,5 ms, rispetto all'audio semi-stabile in buffer di 4 ms (latenza di uscita di + 5 ms), con ASIO.

A seconda che questa approssimazione in tempo reale sia adatta a te, Windows potrebbe essere comunque un buon ambiente per l'attività menzionata.


9

se hai bisogno di mantenere il jitter (supponendo che sia quello che intendi con "wiggle" :) fino a <1ms, direi di dimenticare Windows. La latenza assoluta dall'input all'output è importante o è solo il jitter?

Potresti gestirlo qualche volta, ma garantirlo è improbabile. Qual è la penalità per non aver rispettato la scadenza? Farà saltare gli altoparlanti? Guidare un braccio robot troppo forte contro un fine corsa? O qualcosa di più benigno?

Anche il fatto che l'output sia USB non è di grande aiuto in caso di jitter, in quanto vi sono molte interazioni extra del sistema operativo e la topologia del bus ostacolerà anche la tua potenziale latenza, se l'output è alla fine di una stringa di alcuni hub, per esempio.


Sì, jitter era il termine che stavo raggiungendo, grazie.
jonsca,

5

Il fatto che ciò sia possibile o meno dipende dai requisiti di latenza, ovvero dal ritardo totale tra input e output. Un buon punto di partenza potrebbe essere la creazione di una workstation audio digitale utilizzando software di registrazione come ProTools, Sonar, Ableton, Cubase ecc. Funzionano con hardware I / O economico (di tipo) e sono dotati di driver ottimizzati a bassa latenza. Alcuni di questi hanno interfacce "plug-in" che consentono di eseguire il loop nella propria elaborazione del segnale. Un formato popolare è VST di Steinberg che è supportato da molti host. Un tempo era aperto e gratuito, ma ora potrebbe richiedere una licenza.

Questo http://www.kvraudio.com/wiki/ è una buona risorsa per questo genere di cose.

Se si desidera elaborare in Matlab, potrebbe essere necessario scrivere i propri driver. Ho visto che fatto con DLL e anche interfacce JAVA native. Puoi anche hackerare qualcosa insieme a audioplayer () e audiorecorder () ma questi potrebbero richiedere una latenza abbastanza alta per gestire gli interrupt di Windows e fare altre cose. In sostanza si configura un controllo GUI con un callback che è stato attivato per un tempo. Nella richiamata leggi tutti gli input disponibili, li elabori, li metti nell'output e speri per il meglio.

In generale aiuta a mantenere il box di Windows il più "pulito" possibile, ovvero nessuna connessione di rete (mentre si elabora l'audio), nessun software antivirus ed eseguire solo il minimo assoluto di elementi, software e servizi di avvio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.