Pregunta

Tengo un servidor que envía datos a través de un socket, los datos son un 'archivo' wav. Puedo escribir fácilmente los datos en el disco y luego reproducirlos en WMP, pero no tengo idea de cómo puedo reproducirlos mientras los leo desde el socket. ¿Es posible?

Pregunta de bonificación: ¿cómo lo haría si la transmisión estuviera en formato mp3 o en otro formato?

Esto es para Windows en C ++ nativo.

¿Fue útil?

Solución

Debido a que has dicho WMP, supongo que la pregunta se aplica a intentar reproducir un archivo wav en una máquina con Windows. Si no, esta respuesta no es relevante.

Lo que quieres hacer no es trivial. Hay un buen artículo aquí sobre el proyecto de código que describe el audio de Windows modelo. Describe cómo configurar el dispositivo de audio y cómo transmitir datos al dispositivo para su reproducción. Usted " simplemente " debe proporcionar datos provenientes de su socket como datos para los buffers de reproducción Pero ahí es donde está todo el trabajo difícil. Tienes que estar seguro de que

  • Tienes suficientes datos para comenzar una reproducción
  • Maneja el caso cuando tu socket carece de datos y no tienes nada que enviar al búfer de reproducción
  • Puede leer datos fuera del zócalo con la velocidad suficiente para mantener los buffers de reproducción completos

Es un ejercicio interesante. Pero complicado.

Otros consejos

Mark tiene razón al decir que este es un problema difícil. Puede ser menos complicado si usa DirectSound en lugar de waveOut. Aquí hay un artículo sobre la transmisión de archivos wave desde el disco: la transmisión desde la red es esencialmente el mismo proceso Asegúrese de recopilar suficientes datos de la red antes de comenzar. Querrá más de los 2 buffers que menciona el artículo.

Incluso menos complicado sería FMOD . De las Preguntas frecuentes :

Funciones de Internet mejoradas

  • transmisión de audio por Internet. Se incluye el código de transmisión de Internet personalizado, que permite la compatibilidad perfecta con SHOUTcast, Icecast y http en tiempo real.
  • Capacidad de descarga. Un efecto secundario del sistema de archivos modular de FMOD que admite archivos de red, incluso las muestras estáticas se pueden cargar desde Internet.

Compatibilidad con formatos de archivo : FMOD actualmente admite una amplia gama de formatos de archivos de audio. lista parcial :

  • MP3 - (MPEG I / II Layer 3, incluida la compatibilidad con VBR)
  • OGG - (formato Ogg Vorbis)
  • WAV - (archivos de Microsoft Wave, incluidos wavs comprimidos. PCM, MP3 y wav comprimido IMA ADPCM

Mark tiene razón al decir que este es un problema difícil. La API de waveOutXXXX es antigua (es anterior a Windows 95) y requiere más codificación propensa a errores de lo que cree. Le resultará más fácil interactuar con la API en C ++ que con C #. Solo asegúrate de que esto sea algo que realmente quieras hacer.

Si su transmisión tiene un formato diferente a los datos de archivos WAV (como MP3 o WMA), tendrá que realizar el paso adicional de descodificar los datos en formato WAV y reproducirlos con la API waveOutXXXX. Encontrar un buen componente para decodificar MP3 es más complicado de lo que podría esperar. Creo que esto está relacionado con la situación de la licencia de Fraunhofer (se supone que debe pagarlos si utiliza el código MP3 de alguna manera).

Encontraría un producto comercial para hacer esto, a menos que quieras la experiencia de aprendizaje.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top