2011-04-13 42 views
6

Tengo un proyecto que usa NAudio para convertir de mp3 a wav. (Usando el método WaveFormatConversionStream.CreatePcmStream())Error de NAudio: "NoDriver llamando a acmFormatSuggest"

Trabajó muy bien en mi máquina de desarrollo, pero ahora estoy tratando de que en un nuevo servidor fresca y su lanzamiento este error:

NAudio.MmException: NoDriver calling acmFormatSuggest
at NAudio.MmException.Try(MmResult result, String function)
at NAudio.Wave.Compression.AcmStream.SuggestPcmFormat(WaveFormat compressedFormat)
at NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(WaveStream sourceStream)

Asumo hay una cierta dependencia que NAudio necesita aquí que no está en el nuevo servidor. ¿Qué es y de dónde debería instalarlo?

El servidor es una instancia recién creada de Amazon EC2 Windows 2008 de 32 bits con los roles de 'servidor web' y 'servidor de aplicaciones' instalados.

Respuesta

7

Ejecutando Windows 2008 R2, usando Naudio para detectar la longitud de los archivos Wav y Mp3, me encontré con el mismo problema.

que resolvieron este siguiendo este: https://technet.microsoft.com/en-us/library/cc772567.aspx

Esencialmente, instale la característica "Experiencia de escritorio".

Lo anterior requerirá un reinicio del servidor.

Una vez que se instaló lo anterior, no necesité habilitar nada más, se resolvió el problema.

+0

Pensando en el pasado, esa podría ser la forma en que finalmente resolvió esto también. – codeulike

+0

Esta solución es excelente cuando posee el servidor, cuando no lo hace (como es el caso de Azure Websites), no puede instalarlo. Intente utilizar NLayer https://nlayer.codeplex.com/ – Shiroy

+0

También funciona en Windows Server 2012.La función "Experiencia de escritorio" está un poco más oculta allí, utilícela para encontrarla: https://yellowduckguy.wordpress.com/2012/12/21/windows-server-2012-how-to-add-desktop -experiencia-característica / –

2

WaveFormatConversionStream hace uso de los códecs ACM instalados en su máquina. Comienza por preguntar si hay algún códec ACM instalado que pueda convertir desde el origen al formato de destino. Parece que le falta un códec MP3 en la máquina de destino.

NAudio ofrece una forma diferente de decodificación de MP3, utilizando el decodificador DMO MP3 (objeto de medios DirectX), que también puede estar en su máquina de destino. Para utilizar esta lo que necesita para obtener la última fuente NAudio desde CodePlex y en el MP3FileReader (que ahora hace la conversión a PCM para usted), se toma la siguiente línea:

decompressor = new AcmMp3FrameDecompressor(this.Mp3WaveFormat); 

y reemplazarlo con

decompressor = new DmoMp3FrameDecompressor(this.Mp3WaveFormat); 
+0

Esto no funcionó para mí. Ese código aparentemente intenta cargar un DMO que TAMBIÉN no está instalado en Windows 2008 Server. Supuestamente, este DMO está en el SDK de Windows, pero lo instalé y todavía no está allí. – Lavamantis

+0

Todavía no recibo el archivo .wav. Solo estoy convirtiendo mi archivo mp3 a wav. – Illaya

+1

necesita instalar el componente de experiencia de escritorio de Windows Server. –

0

Gracias a @Shiroy, encontré la increíble biblioteca NLayer (https://github.com/naudio/NLayer) By @MarkHeath. Si lo instala con NLayer.NAudioSupport, puede comprimirlo con una línea de código adicional (y no se requieren códecs instalados).

Cuestiones relacionadas