2017-01-02 3 views
0

Je reçois une erreur provenant de DirectX lors de l'utilisation de NAudio. Je ne suis pas si compétent quand il s'agit de DirectX, donc j'apprécierais quelques conseils.NAudio et DirectX 12

erreur de là que je reçois lors de l'obtention NAudio initialisé sur un ordinateur Windows 10 PC avec DirectX 12 installer est ceci:

NAudio.Dmo.DmoResampler..ctor System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {F447B69E-1884-4A7E-8055-346F74D6EDB3} failed due to the following error: 80040154 Class not registered (Exception from >HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

NAudio.Dmo.DmoResampler..ctor

NAudio.Wave.ResamplerDmoStream..ctor IWaveProvider inputProvider, WaveFormat outputFormat

NAudio.Wave.WasapiOut.Init IWaveProvider waveProvider

Sound.Support.AudioPlaybackEngine..ctor MMDevice device, Int32 sampleRate, Int32 channelCount

Sound.Manager.PerformInitialization

Analyze.ViewModels.ApplicationViewModel.InitSoundManager

D'accord, il est un objet COM assez évident est pas enregistré, alors que faire?

Voici le code invoquant NAudio:

public AudioPlaybackEngine(MMDevice device, int sampleRate = 44100, int channelCount = 2) 
    { 
     Device = device; 

     mOutputDevice = new WasapiOut(device, 
             AudioClientShareMode.Shared, 
             true, 
             200); 

     mMixer = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channelCount)) 
       { 
        ReadFully = true 
       }; 

     mMixer.MixerInputEnded += OnMixerInputEnded; 

     mOutputDevice.Init(mMixer); 
     mOutputDevice.Play(); 
    } 

Le défaut se produit sur le premier appel.

Cela fonctionne très bien sur DirectX 11, sur toute plate-forme

Toute pensée?

Répondre

3

Windows 10 a DirectX 9.0c via DirectX 12 tous côte à côte. Ceci est probablement mieux considéré comme une question de la Fondation des médias.

Ce GUID ({F447B69E-1884-4A7E-8055-346F74D6EDB3}) semble être le DMO de rééchantillonnage (Objets média DirectX). DMOs faisaient partie des technologies héritées de DirectShow qui sont principalement utilisées aujourd'hui par les API de la Fondation Media - je ne vais pas entrer dans l'histoire torturée de la façon dont "DirectShow" initialement appelé "ActiveMovie" a fini par être marqué DirectX, mais inutile de dire La technologie était removed à partir du SDK DirectX en 2005.

Par conséquent, ma question serait: utilisez-vous une édition N ou KN de Windows 10? Si tel est le cas, il ne contient pas Media Foundation par défaut. Vous devez l'installer via un Restore Pack. Voir Who moved my Windows Media Cheese?.

You can try using this sample program to ensure the GUID is present on your machine.

Si vous développez une application plutôt que l'application de bureau classique Win32 Plate-forme Windows Universal (UWP), il pourrait aussi y avoir des restrictions sur les transformations disponibles qui pourraient être vous impactage.

+0

Il est étrange que le client rencontrant le problème se trouve aux États-Unis et le voit sur deux machines différentes. Au moins, cela me donne une route vers le bas pour commencer à trouver le problème. (C'est une ancienne application WPF s'il y a une telle chose). Merci pour les pointeurs. – WyomingDoug