Domanda

Sto lavorando a un'applicazione audio, scritto in C. Ho bisogno di fornire una riproduzione audio dal vivo in ambiente Windows. Ho bisogno di decidere quale API audio da utilizzare. Sto pensando di utilizzare l'API di base waveOut , ma ho voluto controllare per vedere ciò che la comunità qui raccomanda.

Voglio codice che sarà solo di lavoro su qualsiasi versione recente di Windows senza la necessità di installare le librerie; e voglio latenza minima.

Non ho bisogno o volete qualche "effetti", ho solo bisogno di giocare con fedeltà tutto ciò che i campioni d'onda l'applicazione genera.

La mia comprensione è che la maggior parte delle applicazioni audio professionali per Windows ASIO usare, che offre un'eccellente bassa latenza, ma io non voglio ASIO perché voglio il mio codice di solo lavoro e la maggior parte delle persone non hanno ASIO pre-installato sui loro computer. (In un secondo momento io possa tornare indietro e anche aggiungere ASIO come opzione, ma io vado per la soluzione più generale prima.)

C'è qualcosa là fuori che sarebbe stato meglio che waveOut per i miei scopi, o è che la scelta migliore?

È stato utile?

Soluzione

Dipende da ciò che si sta cercando di fare. L'API audio waveOut base è meglio per lo streaming audio. Esso consente di coda su diversi buffer e li hanno riprodotti automaticamente in successione. Ma se l'audio è in riproduzione e si desidera cambiarlo, o aggiungere qualcosa ad esso, che è relativamente duro.

DirectX audio è meglio per l'audio basato su eventi. Si possono avere diverse cose che giocano allo stesso tempo, senza dover fare il te stesso di miscelazione. È possibile aggiungere o rimuovere piccoli pezzi di audio in modo semplice - come la riproduzione di un suono quando l'utente preme il grilletto sulla sua pistola. Ma in streaming (cioè la riproduzione di 1 tampone dopo l'altro) è più difficile.

waveOut è stato progettato per facilitare la riproduzione di audio che è costante, come un file .mp3. DirectX è progettato per l'audio che è intermittente, come il feedback in un gioco.

ASIO è come il peggiore dei waveOut e DirectX in termini di difficoltà di programmazione. E non è che stabile. Le applicazioni in genere non possono condividere il dispositivo audio. Ma ti dà la più bassa latenza di accesso a quella hardware audio.

ASIO ti dà anche un modo per sincronizzare la riproduzione su dispositivi multipli.

Se non c'è bisogno di essere in grado di Modifica ciò che sta per essere giocato a destra prima si gioca, e non è necessario sincronizzare più dispositivi, allora non è necessario ASIO .

Altri suggerimenti

Al momento ho fatto questa domanda, ho scritto il codice utilizzando le API WaveOut e waveIn in streaming. Da allora, ho scoperto una libreria utile:

PortAudio http://www.portaudio.com/

PortAudio è un software libero con una licenza commerciale-friendly. Se si scrive il codice per chiamare PortAudio dovrebbe essere in grado di lavorare con i dispositivi WaveOut, ma anche con i dispositivi ASIO in Windows; esso può essere quindi ricompilato per Linux e dovrebbe funzionare con i dispositivi ALSA; e può quindi essere ricompilato per il Mac e dovrebbe funzionare con i dispositivi CoreAudio. Non ho ancora testato la parte Mac, ma il mio progetto sta lavorando molto con Windows e Linux.

In aggiunta alle opzioni di cui parla Giovanni Knoeller, c'è WASAPI che permette di latenze molto più bassi rispetto WaveOut, ma purtroppo è disponibile solo da Windows Vista in poi.

Dopo aver scritto un'applicazione di streaming DirectSound me stesso, io certamente raccomando per bassa latenza e facilità d'uso. Inoltre, consente di impostare un formato di qualità superiore per la riproduzione su edizioni precedenti di Windows.

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