Domanda

Voglio campionare continuamente dalla linea audio del mio PC usando C # (quindi elaborare quei dati). Qual è il modo migliore per eseguire il campionamento?

È stato utile?

Soluzione

È possibile eseguire alcune (basilari) acquisizioni audio utilizzando l'open source NAudio .NET Audio Library. Dai un'occhiata al progetto NAudioDemo per vedere un semplice esempio di registrazione su un file WAV usando le funzioni WaveIn. NAudio ora include anche la possibilità di acquisire audio utilizzando WASAPI (Windows Vista e versioni successive) e ASIO (se la scheda audio ha un driver ASIO).

Altri suggerimenti

Esiste la libreria Alvas Audio , non gratuita, ha un fastidio schermo se non paghi, ma funziona magnificamente. E la documentazione è buona e, se trovi un bug o qualcosa del genere, anche il supporto va bene.

Non ci sono librerie integrate nel framework .NET per gestire il suono, ma se sei su Win32, puoi usare una libreria non gestita come DirectSound per farlo.

Ianier Munoz mostra come scrivere un lettore audio full duplex in C # usando waveIn tramite P / Invoke su CodeProject. Menziona Managed DirectSound come altro metodo generale.

Managed DirectX supporta l'acquisizione diretta dell'audio ed è molto facile da usare, ma non è più supportato ed è stato rimosso dall'SDK di DirectX l'anno scorso. È ancora possibile scaricarlo installando una versione dell'SDK precedente ad agosto 2007.

Pur non rispondendo rigorosamente ai requisiti, un approccio più solido sarebbe quello di creare un assembly wrapper C ++ / CLI attorno all'API DirectSound C ++ nativa, sempre dall'SDK di DirectX. Questo potrebbe quindi essere chiamato direttamente dal codice C #. Questo è sicuramente un approccio più potente e mantenibile, nonostante richieda una certa conoscenza di C ++ e COM.

Ho usato entrambe queste tecniche in passato ed entrambe funzionano bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top