我看到使用音频服务器(在我的例子中是 pipewire)你可以改变“延迟”。(请原谅我,我对这些东西不是很了解。)
PIPEWIRE_LATENCY="128/48000"
Arch Linux wiki 将此描述为“请求[ing]自定义缓冲区大小”。
我想知道,将延迟设置得非常低是否有“缺点”。仅仅是响应更快的音频意味着更高的资源成本吗?
我看到使用音频服务器(在我的例子中是 pipewire)你可以改变“延迟”。(请原谅我,我对这些东西不是很了解。)
PIPEWIRE_LATENCY="128/48000"
Arch Linux wiki 将此描述为“请求[ing]自定义缓冲区大小”。
我想知道,将延迟设置得非常低是否有“缺点”。仅仅是响应更快的音频意味着更高的资源成本吗?
当缓冲区较小时,它会更快地填满并更快地清空。这就是延迟缩短的原因。
但是,将数据放入缓冲区和从缓冲区中取出数据的进程将被更频繁地触发。因此,当您将缓冲区设置得太小时,您可能会发现音频软件对计算机 CPU 的消耗更高。在极端情况下,使用具有小缓冲区的音频系统会使您计算机上的其他软件响应变慢,或者可能会“断断续续”或“断断续续”,在平滑和冻结之间交替。
如果将音频数据放入缓冲区的进程不能足够快地响应并且缓冲区在短时间内完全变空,那么小的缓冲区也可能导致音频流断断续续。将音频数据从缓冲区中取出并通过输出传递到扬声器(或耳机)的过程将耗尽数据,并且声音会中断(通常称为“丢失”)。
很难预测什么大小会“太小”,因此您可能必须进行试验,看看哪种折衷方案可以在不影响音频流和计算机其余部分的情况下为您提供最短的延迟。
无论你的声音应用程序 (A),声音服务器 (B),你的 alsa 声卡驱动程序 (C):
通过这种工作方式,您可以理解:
从上一段中,就缓冲区而言,您可以理解:
如果缓冲区太小,因为这些很可能是环形缓冲区……你很可能会面临:溢出!
这意味着样本永远不会进入硬件输出,硬件输出将转化为可听见的咔哒声。
所以是的!减小缓冲区大小确实有一个缺点:溢出。
当然,有一些方法可以降低超支的风险: 让流程以正确的速度运行!
如果您可以让下游组件能够及时完成它们的工作(或者以比上游组件更快或相同的速度),那么无论缓冲区大小如何,您都可以避免溢出的风险。
您也可能(正确地)认为带有两个缓冲区的声音服务器成本高昂(就额外延迟而言)并且可能……毫无用处并且……考虑摆脱它。