哪些音频API可以支持投机评估和纠正?

时间:2012-12-05 23:44:30

标签: audio low-latency optimistic-concurrency

投机评估(又称推测执行)是以偶然返工(低效率)为代价实现低延迟代码的有效方法。推测评估是现代计算机体系结构的常见低级技术,但它可以在更高级别的编程模型中得到支持(参见时间扭曲协议,时态逻辑,反应式编程模型)。

似乎推测评估的一个地方特别有用的是音频的实时计算,例如用于实时编码或游戏。这个想法很简单:我们可以推测性地填充音频缓冲区以防止缓冲区欠载,但是如果我们必须对任何最后的瞬间变化做出反应,那么偶尔会纠正这些缓冲区。这样的技术仍然可能出现故障。一个分散的更新可能会在前面稍微削减一些。但是,由于大多数推测的声音应该仍然大部分都是正确的,因此与典型的欠载相比,这是一种不同的 - 可能更优雅 - 的故障模式。

现在,我想知道哪些音频API或库最有效地支持对现有缓冲区的这些最新即时更新。我不是声音编程方面的专家,但我见过的大多数示例代码似乎都承担了对缓冲区的承诺。如果我在加载后将其提交到缓冲区,那么除了在延迟和欠载风险之间进行权衡之外别无选择。哪些音频API不需要承诺?

1 个答案:

答案 0 :(得分:1)

一旦将包含声音的缓冲区传递给您的声卡,以任何方式修改它通常为时已晚。我似乎记得微软试图引入一个音频驱动程序模型,它允许你直接写入声卡的内存缓冲区(WaveRT),但由于USB声卡不支持它,它没有获得太大的牵引力。

所有音频API都有一种方法可以让您播放缓冲区,或填充您给出的缓冲区。完成后,无法保证更改该位置的内存会产生任何影响(甚至可能导致崩溃)。使用windows waveOut API,您可以排队多个缓冲区,因此您可以在声卡出现之前更改一个缓冲区。但是,它不是低延迟API,因此正在播放的API可能大约为50ms。

大多数需要响应非常灵敏的应用程序只能在低延迟时工作。从音频处理的角度来看,通常很难回顾性地修改已经写入的缓冲区的一部分,因为如果你不淡入淡出,那么交换音频会导致弹出和点击,以及任何DSP你通过音频通过可能有你无法重现的状态。