Domanda

Ho un server che invia i dati tramite un socket, i dati sono un 'file' wav. Posso facilmente scrivere i dati su disco e quindi riprodurli in WMP, ma non ho idea di come posso riprodurli mentre li leggo dal socket. È possibile?

Domanda bonus: come farei se lo streaming fosse in mp3 o in altro formato?

Questo è per Windows in C ++ nativo.

È stato utile?

Soluzione

Dato che hai detto WMP, suppongo che la domanda si applichi al tentativo di riprodurre un file WAV su un computer Windows. In caso contrario, questa risposta non è pertinente.

Quello che vuoi fare non è banale. C'è un buon articolo qui sul progetto di codice che descrive l'audio di Windows modello. Descrive come impostare il dispositivo audio e come trasmettere i dati nel dispositivo per la riproduzione. "Semplicemente" è necessario fornire i dati provenienti dal socket come dati per i buffer di riproduzione. Ma è qui che si trova tutto il lavoro complicato. Devi essere sicuro che

  • Hai abbastanza dati per iniziare una riproduzione
  • Gestisci il caso quando il tuo socket è affamato di dati e non hai nulla da inviare al buffer di riproduzione
  • Sei in grado di leggere i dati dal socket con una velocità sufficiente per mantenere pieni i buffer di riproduzione

È un esercizio interessante. Ma difficile.

Altri suggerimenti

Mark ha ragione sul fatto che questo è un problema difficile. Potrebbe essere meno complicato se si utilizza DirectSound anziché waveOut. Ecco un articolo sullo streaming di file wave da disco: lo streaming dalla rete è essenzialmente lo stesso processo. Assicurati di raccogliere abbastanza dati dalla rete prima di iniziare: vorrai più dei 2 buffer citati dall'articolo.

Ancora meno complicato sarebbe FMOD . Dalle FAQ :

Funzioni Internet avanzate

  • Streaming audio su Internet. È incluso un codice di streaming Internet personalizzato, che consente il supporto continuo di streaming SHOUTcast, Icecast e http.
  • Funzionalità di download. Un effetto collaterale del file system modulare di FMOD che supporta i file di rete, anche i campioni statici possono essere caricati da Internet.

Supporto formato file : FMOD attualmente supporta una vasta gamma di formati di file audio. elenco parziale :

  • MP3 - (MPEG I / II Layer 3, incluso il supporto VBR)
  • OGG - (formato Ogg Vorbis)
  • WAV - (file Microsoft Wave, inclusi gli onde compressi. Wav compressi PCM, MP3 e IMA ADPCM

Mark ha ragione sul fatto che questo è un problema difficile. L'API waveOutXXXX è antica (è precedente a Windows 95) e richiede una codifica più soggetta a errori di quanto si pensi. Interagire con l'API in C ++ sarà più semplice che con C #. Assicurati solo che sia qualcosa che vuoi davvero fare.

Se il tuo stream è in un formato diverso dai dati del file WAV (come MP3 o WMA), dovrai eseguire la fase aggiuntiva di decodifica dei dati in formato WAV e riprodurli con l'API waveOutXXXX. Trovare un buon componente per eseguire la decodifica MP3 è più complicato di quanto ti aspetteresti - penso che ciò sia legato alla situazione delle licenze Fraunhofer (dovresti pagarli se usi il codice MP3 in qualche modo).

Troverei un prodotto standard per farlo, a meno che tu non voglia l'esperienza di apprendimento.

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