主要内容

测量音频延迟

这个例子展示了如何测量音频设备的延迟。这个例子使用audioLatencyMeasurementExampleApp,它又使用audioPlayerRecorder以及一个测试信号和交叉相关来确定延迟。为了避免硬盘访问干扰,测试信号被加载到dsp中。首先是AsyncBuffer对象,然后帧通过音频设备从该对象流化。

介绍

总体而言,延迟定义为从音频信号进入系统到退出的时间。在数字音频处理链中,有多个导致延迟的参数:

  1. 硬件(包括A/D和D/A转换)

  2. 与系统声卡通信的音频驱动程序

  3. 采样率

  4. 每帧样本(缓冲器大小)

  5. 算法延迟(例如,由过滤器或音频效果引起的延迟)

这个例子展示了如何测量往返延迟。即,通过设备播放音频、用物理环回电缆将音频环回、用相同的音频设备记录环回音频时所产生的延迟。为了计算您自己的音频设备的延迟,您需要使用环回电缆连接音频输出和音频端口。

往返延迟不会分解输出延迟和输入延迟之间的度量。它只衡量两者的综合效应。而且,大多数实际应用程序不会使用环回设置。通常,处理链包括录制音频、处理音频和播放处理后的音频。然而,只要其他因素(帧大小、采样率、算法延迟)不变,所涉及的延迟应该是相同的。

硬件延迟

较小的外形尺寸和更高的采样率减少往返延迟。然而,代价是存在的(超支/欠载)失落的机会较高。

除了潜在地增加延迟外,音频算法所涉及的处理量也可能导致退出。

测量延迟与audioLatencyMeasurementExampleApp.m

该功能audioLatencyMeasurementExampleApp计算以毫秒为单位给定的设置往返延迟。超限和欠载还提出。如果超限/欠载不为零,其结果很可能无效。例如:

audioLatencyMeasurementExampleApp ('SamplesPerFrame',64,“SampleRate”48岁的e3)%本例中的测量是在macOS上完成的。对于大多数%测量,使用一个斯坦伯格UR22外部USB设备。对于%测量与自定义I/O通道,一个RME Fireface UFX+设备用于%。此RME装置具有比用于所述斯坦伯格设备更低的延迟给定采样率/帧大小组合。使用% ASIO驱动程序应该得到相似的值。
试验(S)框架尺寸64. ANS = 1×5表SamplesPerFrame SampleRate_kHz Latency_ms树精欠载_______________ ______________ __________ ________ _________ 64 48 8.3125 0 0进行

测量延迟时的一些提示

如果最小化由计算机执行其他任务的通用操作系统上的实时处理才是可能的。建议:

  1. 关闭所有其他程序

  2. 确保不欠载运行/发生超支

  3. 使用足够大的缓冲区(SamplesPerFrame)来确保一致的无退出行为

  4. 确保硬件设置(缓冲区大小,采样率)与measureLatency的输入相匹配

在Windows上,您可以使用asiosettings功能来启动对话框来控制硬件设置。在macOS上,您应该启动Audio MIDI设置。

当使用ASIO(或CoreAudio与Mac OS)时,延迟测量是一致的,只要没有退出发生。对于较小的缓冲区,可以在一个实例中获得一个干净的度量值,然后在下一个实例中退出。Ntrials选项可用于在测量延迟时确保一致的退出行为。例如,要执行3个测量,使用:

audioLatencyMeasurementExampleApp ('SamplesPerFrame'96,...“SampleRate”,48e3,'Ntrials',3)
试验(S)框架尺寸96. ANS = 3×5表SamplesPerFrame SampleRate_kHz Latency_ms树精欠载_______________ ______________ __________ ________ _________ 96 48 10.312 0 0 96 48 10.312 0 0 96 48 10.312 0 0进行

测量对于不同的缓冲区大小

在MacOS,还可以尝试不同的帧大小不改变硬件设置。为了使这个方便,你可以指定SamplesPerFrame的载体:

BufferSizes = [64; 96; 128];T = audioLatencyMeasurementExampleApp('SamplesPerFrame'BufferSizes)%注意,在缓冲区的大小每一个样品增量,附加%等待时间是3 * SamplesPerFrameIncrement /采样率(仅MACOS)。
对frameSize 64进行了试验。对frameSize 96进行了试验。对128帧进行了试验。t = 3×5表SamplesPerFrame SampleRate_kHz Latency_ms超支欠载运行很有用  _______________ ______________ __________ ________ _________ 64年48 8.3125 0 0 96 48 10.312 0 0 128 48 12.312 0 0

具体地说,在前面的示例中,增量为

3 * (128 - 96, 96 - 64) / 48 e3%。此外,请注意实际的缓冲延迟也被确定%的3 * SamplesPerFrame /采样率。从测量中减去该值%延迟给出设备引入的延迟的度量(合并)%效果的A/D转换,D/A转换,和驱动器)。上面的数字%表示由于设备特定因素导致的约4.3125 ms延迟。t.Latency_ms - 3 * BufferSizes / 48
ANS = 0.0020 0.0020 ANS = 4.3125 4.3125 4.3125

指定自定义输入/输出通道

的测量来实现迄今假定信道#1被用于输入和输出。如果您的设备连接到其他频道的环回电缆,您可以使用IOChannels选项measureLatency指定它们。这被指定为一个2元素矢量,对应于所述输入和输出通道中使用(测量总是在一单声道信号)。例如用于RME的Fireface UFX +:

audioLatencyMeasurementExampleApp ('SamplesPerFrame'(32 64 96),...“SampleRate”96年e3,“设备”'的Fireface UFX +(23767940)'...“IOChannels”[1 3])
框架尺寸96. ANS = 3×5表SamplesPerFrame SampleRate_kHz Latency_ms树精欠载_______________ ______________ __________ _________ __________ 32 96 2.6458 0 32 64 96试验进行(一个或多个),用于框架尺寸64试验(一个或多个)来完成框架尺寸32试验(一个或多个)来完成3.6458 0 0 96 96 4.6458 0 0

算法延迟

到目前为止,测量还没有包括算法延迟。因此,它们表示对于给定设备、缓冲区大小和采样率可以实现的最小往返延迟。您可以在处理链中添加一个线性相位FIR滤波器,以验证延迟测量是否符合预期。此外,该算法还提供了一种在给定工作负载下验证实时音频处理鲁棒性的方法。例如,

L = 961;Fs = 48 e3;audioLatencyMeasurementExampleApp ('SamplesPerFrame',128,...“SampleRate”,FS,'FilterLength'L,'Ntrials',3)%的过滤器引入的延迟是由过滤器的给定%群延迟。GroupDelay = (l - 1) / 2 / Fs当使用a时,组延迟占额外的10毫秒延迟%961抽头的线性相位FIR滤波器对的最小可实现的延迟。
试验(S)框架尺寸128 ANS = 3×6表SamplesPerFrame SampleRate_kHz FilterLength Latency_ms树精欠载_______________ ______________ ____________ __________ ________ _________ 128 48 961 22.312 0 0 128 48 961 22.312 0 0 128 48 961 22.312 0 0 GroupDelay = 0.0100进行

绘制原始和记录信号

延迟度量是由源的相互关联决定的%与信号的延迟版本的音频信号的结果之后通过音频设备%环回。您可以使用绘图选项%measureLatency与一起绘制的原始和延迟信号%互相关:audioLatencyMeasurementExampleApp ('SamplesPerFrame',128,“阴谋”,真正的)%如果使用可选的FIR滤波,波形不受影响%,因为所使用的过滤器具有比所述测试音频更宽的带宽%的信号。
对128帧进行了试验。策划……ans = 1×5表SamplesPerFrame SampleRate_kHz Latency_ms超支欠载运行很有用  _______________ ______________ __________ ________ _________ 128 48 12.312 0 0