AudioDeviceInputNode是否应始终关联Device?空值问题咨询
问题与解答
代码片段
var pcm16 = AudioEncodingProperties.CreatePcm((uint)sampleRate, 1, 16); var audioGraphSettings = new AudioGraphSettings(AudioRenderCategory.Speech) { QuantumSizeSelectionMode = QuantumSizeSelectionMode.ClosestToDesired, AudioRenderCategory = AudioRenderCategory.Speech, DesiredSamplesPerQuantum = sampleRate / 100, EncodingProperties = pcm16, }; CreateAudioGraphResult result = await AudioGraph.CreateAsync(audioGraphSettings); if (result.Status != AudioGraphCreationStatus.Success) { throw result.ExtendedError; } graph = result.Graph; var inputProfile = MediaEncodingProfile.CreateWav(AudioEncodingQuality.High); inputProfile.Audio = pcm16; var deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync( MediaCategory, inputProfile.Audio); if (deviceInputNodeResult.Status != AudioDeviceNodeCreationStatus.Success) { throw deviceInputNodeResult.ExtendedError; } AudioDeviceInputNode deviceInputNode = deviceInputNodeResult.DeviceInputNode; var effectMan = AudioEffectsManager.CreateAudioCaptureEffectsManager( deviceInputNode.Device.Id, MediaCategory, AudioProcessing.Default);
问题描述
在一台PC上,尽管AudioDeviceInputNode创建成功,但deviceInputNode.Device为null。这是否意味着无法在该PC上使用AudioEffectsManager?AudioDeviceInputNode未关联设备意味着什么?目前该节点可以正常路由到帧输出节点使用。
解答
deviceInputNode.Device为null的含义:这通常是因为当前使用的是系统默认虚拟音频设备(比如Windows立体声混音、第三方虚拟音频驱动),或是设备驱动不支持通过该属性暴露设备元数据。节点能正常工作说明音频捕获的核心流程是正常的,只是设备的信息无法被获取到。AudioEffectsManager的使用限制:直接通过deviceInputNode.Device.Id的方式会失败,因为没有有效的设备ID。可以尝试两种替代方案:- 调用
MediaDevice.GetDefaultAudioCaptureId(MediaCategory.Speech)获取默认捕获设备的ID,直接传入CreateAudioCaptureEffectsManager - 检查系统音频设备是否禁用了效果功能,或是设备本身是否支持音频效果管理(部分低端或虚拟设备不支持)
- 调用
- 额外说明:节点能正常路由到输出,说明音频捕获功能不受影响,仅设备元数据和效果管理模块受限于系统配置或设备驱动。
内容的提问来源于stack exchange,提问作者LOST
相关产品推荐
相关产品推荐

