Pregunta

Estoy buscando para desarrollar una aplicación de Silverlight que tendrá un flujo de datos (no un flujo de audio como tal) desde un servidor web.

El flujo de datos podría entonces ser manipulado para dar de audio de un formato determinado (G.711 de ley A, por ejemplo) que luego se puede convertir en PCM de modo que los efectos adicionales se pueden aplicar (como aumentar el volumen).

Estoy bien hasta este punto. Tengo mis datos, convirtió el G.711 en PCM, pero mi problema es ser capaz de salida de esta PCM de audio a la tarjeta de sonido.

Me baso una solución en algún código C # destinada a una aplicación .Net pero en Silverlight hay un problema con tratar de llevar una copia de un delegado (puntero de función), que será el tema de una pregunta separada una vez que haya producido un ejemplo de código simple.

Entonces, la pregunta es ... ¿Cómo puedo emitir el audio PCM que he realizado en una estructura de datos (en la actualidad una matriz) en mi Silverlight para el usuario? (Por favor, no decir escribir los valores de byte a un cuadro de texto)

Si se tratara de un archivo MP3 o WMA Me lo juego utilizando una MediaElement pero no quiero tener que hacerlo en un archivo ya que esto pondría un rizado en la aplicación de efectos dinámicos para el audio.

He visto un par de mensajes de personas diciendo soporte de audio de bajo nivel es pobre inexistente / en Silverlight, así que estoy abierto a cualquier sugerencia / ideas la gente pueda tener.

¿Fue útil?

Solución

La respuesta simple es que no hay soporte para la reproducción PCM de Silverlight en la versión 2. Así que a menos que usted quiere escribir un PCM totalmente administrado al convertidor MP3 que está atascado. Incluso entonces no estoy seguro de que podría conseguir el MediaElement para jugar desde el almacenamiento aislado.

¿Hay alguna posibilidad de que podría utilizar un servicio web para realizar la conversión?

Vea también esta pregunta: ¿Dónde está la API de sonido en Silverlight? O, ¿Cómo se escribe una aplicación de música para funcionar en el navegador?

Actualización: Silverlight 3 es compatible con las fuentes de audio personalizados. Sin embargo, no le permitirá interceptar muestras para realizar efectos en WMA o MP3, presumiblemente por razones de DRM, por lo que aún sería potencialmente tenga que escribir su propio decodificador.

Otros consejos

Respuesta corta es utilizar un MediaElement + a MediaStreamSource

Salida siguientes:

http : //blogs.msdn.com/gillesk/archive/2009/03/23/playing-back-wave-files-in-silverlight.aspx

http://code.msdn.microsoft.com /wavmss/Release/ProjectReleases.aspx?ReleaseId=2417

Básicamente, escribir un decodificador de código administrado para convertir G.711 A-Law en PCM, luego hacer las modificaciones que desea los valores brutos, a continuación, pasar a los que en un MediaStreamSource.

Parece que Silverlight 3 es compatible con salida PCM directa ahora, o será cuando se suelta. No veo nada en la documentación sobre la tubería AV prima todavía.

respuesta

Mark Heath es correcta - sólo ciertos formatos son compatibles -. mp3 y ciertos sabores de WMA (por desgracia no WMA sin pérdida que sería 'más cerca' a PCM)

Para reproducir datos PCM en Silverlight, se puede hacer lo siguiente:
* Convertir el PCM en datos de mp3, y almacenarlo en la memoria.
* Reproducción de los datos MP3 usando la técnica presentada en ManagedMediaHelpers . La idea consiste en una clase llamada Mp3MediaStreamSource (derivado de System.Windows.Media.MediaStreamSource) que proporciona trozos mp3 a un MediaElement para jugar. Los trozos tendrán que estar en una corriente, pero, por supuesto, una secuencia de memoria van a hacer.

Al principio pensé que podría ser capaz de proporcionar trozos de PCM a través de MediaStreamSource, pero esto no funciona. Es una verdadera pena, ya que resolvería su problema (y la que me enfrentaba - hacer un reproductor de archivos de audio Speex)! Muy fácilmente

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