AudioGraph DesiredSamplesPerQuantum 属性被忽略

Posted

技术标签:

【中文标题】AudioGraph DesiredSamplesPerQuantum 属性被忽略【英文标题】:AudioGraph DesiredSamplesPerQuantum property is ignored 【发布时间】:2018-11-15 20:55:09 【问题描述】:

我正在开发一个 UWP 音频应用程序。最新的 Windows 10 SDK 版本 1803。

我想增加我的应用程序的 AudioGraph 上使用的 SamplesPerQuantum。 根据the docs,我应该在创建 AudioGraph 之前指定属性 DesiredSamplesPerQuantum 和 QuantumSizeSelectionMode。

我正在像这样创建 AudioGraph:

AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Media);
settings.DesiredSamplesPerQuantum = 960; // 20ms
settings.QuantumSizeSelectionMode = QuantumSizeSelectionMode.ClosestToDesired;
CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings);
Debug.WriteLine("SamplesPerQuantum=" + result.Graph.SamplesPerQuantum);

我什么都试过了,SamplesPerQuantum 属性总是 480...

这是一个问题,因为我在每次垃圾回收时都会点击音频输出。我认为默认的 10ms 时间间隔太短了...

【问题讨论】:

【参考方案1】:

我什么都试过了,SamplesPerQuantum 属性总是 480...

默认情况下,量子大小为 10 毫秒,基于默认采样率。系统将选择尽可能接近您指定的量子大小。如果您的语音设备的采样率限制为 48000hz,SamplesPerQuantum 将限制为 480。根据您的要求,您可以将采样率设置为 96000hz。那么你的设置就可以使用了。

我与媒体团队讨论过,他们给出了以下答复。总体思路是DesiredSamplesPerQuantum 与您的硬件相关。

更新

客户看到的行为取决于底层音频硬件。 DesiredSamplesPerQuantum 属性只是对底层硬件的建议。如果硬件/驱动程序不支持请求的量程,则不会设置。 当 GC 运行时,音频中可能会出现咔嗒声或爆裂声。这是因为托管语言是不确定的。

这是 James Dailey 的 blog,您可以参考。

【讨论】:

是的,但在 96000 hz 下的 960 SamplesPerQuantum 仍为 10 毫秒。我想要 20 毫秒或更长时间... 你能告诉我10ms是怎么得出的吗? 如果和采样率有关,可以修改EncodingProperties属性。 文档说:“默认情况下,量子大小为 10 ms,基于默认采样率”。我猜 480 是 10 毫秒... 好的,谢谢@NicoZhuMSFT 抽出时间来回答!关于 10ms 的限制,我将尝试使用外部声卡,看看它是否会改变一些东西。关于 GC 点击,我会尽可能优化我的代码,以减少阻塞的 GC 收集。经过一些优化,已经更好了……

以上是关于AudioGraph DesiredSamplesPerQuantum 属性被忽略的主要内容,如果未能解决你的问题,请参考以下文章

如何为 AudioGraph 添加固定增益?

[UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode

如何在 AudioGraph 中将 RemoteIO、Mixer 和 Filter 连接在一起?

uwp AudioGraph 音频处理

如何使用默认输出设备作为使用 AudioGraph 录制音频的源?

最小化或锁定时继续播放 Audiograph UWP 输出