2017-01-02 8 views
0

Ich erhalte einen DirectX-Fehler, wenn ich NAudio verwende. Ich bin nicht so gut informiert, wenn es um DirectX geht, würde mich über einige Hinweise freuen.NAudio und DirectX 12

irrtümlich Ich erhalte, wenn sie auf einem Windows 10 PC mit DirectX 12 NAudio initialisiert immer installiert, ist dies:

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

Okay, es ist ziemlich offensichtlich einig COM-Objekt ist nicht registriert, so was zu tun ist?

Hier ist der Code Aufruf 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(); 
    } 

Der Fehler tritt beim ersten Anruf.

Das auf DirectX funktioniert gut 11, auf jeder Plattform

Irgendwelche Gedanken?

Antwort

3

Windows 10 hat DirectX 9.0c über DirectX 12 alle nebeneinander. Dies wird wahrscheinlich besser als eine Frage der Medienstiftung betrachtet.

Diese GUID ({F447B69E-1884-4A7E-8055-346F74D6EDB3}) scheint der Resampler DMO (DirectX Media Objects) zu sein. DMOs waren Teil der alten DirectShow - Technologien, die heute hauptsächlich von den Media Foundation - APIs verwendet werden - ich werde nicht in die quälende Geschichte von "DirectShow", ursprünglich "ActiveMovie" genannt, geraten, das als DirectX gebrandmarkt wurde Technologie war removed aus dem DirectX SDK im Jahr 2005 zurück

Daher wäre meine Frage: verwenden Sie eine N oder KN-Edition von Windows 10? Wenn dies der Fall ist, enthält es Media Foundation standardmäßig nicht. Sie müssen es über eine Restore Pack installieren. Siehe Who moved my Windows Media Cheese?.

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

Wenn Sie ein Universal-Windows-Plattform (UWP) App eher als klassischen Win32-Desktop-App entwickeln, gibt es auch einige Einschränkungen auf dem verfügbaren Transformationen sein könnte, die Sie beeinflussen könnten.

+0

Es ist seltsam, da der Kunde, der das Problem hat, in den USA ist und es auf zwei verschiedenen Maschinen sieht. Zumindest gibt mir das einen Weg nach unten, um das Problem zu finden. (Es ist eine einfache alte WPF-App, wenn es so etwas gibt). Danke für die Hinweise. – WyomingDoug