2010-03-19 10 views
7

He escrito una aplicación básica SL4 para capturar datos de audio desde el micrófono usando CaptureSource. El problema es que es una salida PCM en bruto, lo que significa enorme y sin comprimir.Silverlight 4 - codificación de datos PCM desde el micrófono

Dado que necesito que esta aplicación se ejecute puramente dentro de un entorno SL4, ¿cómo puedo comprimir los datos de audio de PCM en algo que pueda entregarse a un servidor remoto más fácilmente?

Básicamente, necesito una solución que también pueda implementar/incluir en una aplicación Windows Phone Series 7, así como una que funcione en el entorno del navegador, por lo que solo las soluciones de código administrado, ¿no?

En conversación, las personas han sugerido Speex y WMA por ejemplo, pero no he encontrado ninguna biblioteca o ejemplos que funcionen sin requerir referencia a DLL que no funcionarán en un proyecto SL4.

Respuesta

4

Por favor, consulte la clase WavFileHelper en Silverlight 4 Rough Notes: Camera and Microphone Support en el blog de Mike Taulty (un poco menor que la mitad de la página, pero el artículo completo vale la pena) en la que se comprime el archivo WAV PCM.

Aquí hay otro ejemplo de cuando escribiendo en WAV puede cambiar valores como Mono/Stereo, que cambiarán directamente el tamaño del archivo WAV: Audio recorder Silverlight 4 sample. Y uno más que brinda más detalles sobre cómo escribir en WAV: Creating Sound using MediaStreamSource in Silverlight 3 Beta

+0

Gracias, estos son todos los artículos que he visto. Una cosa a tener en cuenta aquí es mi requerimiento de que necesito "comprimir los datos de audio de PCM en algo que pueda entregarse a un servidor remoto más fácilmente". La conversión de PCM a WAV es fácil, pero la compresión de la salida no lo es. WAV es indeseable porque es muy voluminoso, incluso si lo codifica como mono. El blog de Mike Taulty es excelente para mostrar cómo usar los receptores para capturar PCM y convertirlo a WAV, pero supongo que lo que realmente necesitamos aquí es un MediaStreamSource o algo similar que se emita como Speex o WMA. – Richard

+0

@Otaku - He aceptado tu respuesta; fue el más completo. Aún queda mucho por hacer, e intentaré actualizar este artículo en algún momento en el futuro con mi respuesta real. Gracias por tu contribución. – Richard

+0

@Richard - ¡gracias! Te escucho sobre la necesidad de algo mucho más compacto que WAV. Mantendré esto en mi mente y me toparé con cosas, y si aparece algo mejor, actualizaré la respuesta. –

0

Este artículo http://alvas.net/alvas.audio,articles.aspx#how-to-save-audio-to-mp3-on-silverlight acerca de cómo guardar el audio en el cliente. Para enviar datos de audio a un servidor, puede usar WebClient, por ejemplo.

+0

Gracias; lo que busco es una solución puramente administrada por .NET sin componentes de terceros que no estén específicamente dirigidos a la plataforma SL4. Necesito una solución que también funcione en Windows Phone Series 7. – Richard

1

Eche un vistazo a this. Parece que ha portado el codificador Speex a C# para el problema exacto que está tratando de resolver. Está disponible here. Speex está diseñado para voz y debe funcionar mejor que wma, mp3 u otros códecs de audio que están diseñados para manejar música si solo está codificando el habla, lo que supongo desde que está agarrando del micrófono.

+0

Gracias Jason. He visto esto antes; tendré que volver a visitarlo y ver si funciona; ¡Olvidé la razón exacta por la que lo descarté por primera vez! – Richard

+0

Enlaces obsolet: Error al cargar el contenido de la página – Nasenbaer

-2

Puede codificar a través del servidor, envíe toda la secuencia al servicio WCF y realice la codificación a través de la API SDK de codificación de expresión de Microsoft.

Por favor, consulte la siguiente dirección URL que he preguntado antes: http://forums.silverlight.net/forums/t/181141.aspx

Saludos

+0

Gracias, pero el punto es comprimirlo * antes * de que se envíe al servidor. – Richard

Cuestiones relacionadas