使用NAudio时出现DirectX源错误。对于DirectX,我不是那么知识,所以会很感激一些指示。
在使用DirectX 12安装的Windows 10 PC上初始化NAudio时我收到的错误是:
NAudio.Dmo.DmoResampler..ctor System.Runtime.InteropServices.COMException:由于以下错误,检索具有CLSID {F447B69E-1884-4A7E-8055-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上都能正常工作
有什么想法吗?
答案 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桌面应用程序,可能对可能影响您的可用转换也有一些限制。