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 属性被忽略的主要内容,如果未能解决你的问题,请参考以下文章
[UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode
如何在 AudioGraph 中将 RemoteIO、Mixer 和 Filter 连接在一起?