NAudio和DirectX 12

时间:2017-01-02 09:31:29

标签: c# directx-11 naudio directx-12

使用NAudio时出现DirectX源错误。对于DirectX,我不是那么知识,所以会很感激一些指示。

在使用DirectX 12安装的Windows 10 PC上初始化NAudio时我收到的错误是:

  

NAudio.Dmo.DmoResampler..ctor      System.Runtime.InteropServices.COMException:由于以下错误,检索具有CLSID {F447B69E-1884-4A7E-80​​55-346F74D6EDB3}的组件的COM类工厂失败:80040154类未注册(例外> 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设备,Int32 sampleRate,Int32 channelCount

     

Sound.Manager.PerformInitialization

     

Analyze.ViewModels.ApplicationViewModel.InitSoundManager

好的,很明显有些COM对象没有注册,那该怎么办?

这是调用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();
    }

第一次通话时发生故障。

在任何平台上的DirectX 11上都能正常工作

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Windows 10通过DirectX 12并排使用DirectX 9.0c。这可能更好地被视为媒体基金会的问题。

该GUID({F447B69E-1884-4A7E-8055-346F74D6EDB3})似乎是重采样器DMO(DirectX媒体对象)。 DMOs是传统DirectShow技术的一部分,这些技术目前主要由媒体基金会API使用 - 我不会深入了解“DirectShow”最初称为“ActiveMovie”最终被称为DirectX的折磨历史,但是毋庸置疑,该技术早在2005年就已从DirectX SDK获得removed

因此,我的问题是:您使用的是Windows 10的N或KN版本吗?如果是这样,那么默认情况下它不包含Media Foundation。您必须通过Restore Pack安装它。请参阅Who moved my Windows Media Cheese?

  

您可以尝试使用this sample program确保计算机上存在GUID。

如果您正在开发通用Windows平台(UWP)应用程序而不是经典的Win32桌面应用程序,可能对可能影响您的可用转换也有一些限制。