0

使用 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

分析.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 上运行良好,在任何平台上

有什么想法吗?

4

1 回答 1

3

Windows 10 具有 DirectX 9.0c 到 DirectX 12 所有并排。这可能更好地被认为是媒体基金会的问题。

该 GUID ( {F447B69E-1884-4A7E-8055-346F74D6EDB3}) 似乎是 Resampler DMO(DirectX 媒体对象)。DMO是当今主要由 Media Foundation API 使用的传统 DirectShow 技术的一部分——我不会深入探讨最初称为“ActiveMovie”的“DirectShow”是如何最终成为 DirectX 品牌的,但不用说早在 2005 年,该技术就从 DirectX SDK中删除了。

因此,我的问题是:您使用的是 Windows 10 的 N 版还是 KN 版?如果是这样,则默认情况下它不包含媒体基础。您必须通过Restore Pack安装它。查看谁动了我的 Windows Media Cheese?.

您可以尝试使用此示例程序来确保您的计算机上存在 GUID。

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

于 2017-01-02T20:36:27.920 回答