如何通过 MATLAB DSP System Toolbox 降低音频延迟?
How to reduce Audio Latency by MATLAB DSP System Toolbox?
我一直在做我的 ANC 项目。为此,我有两个麦克风输入和一个扬声器输出,但最初我使用单个麦克风和 dspStreamingPassthrough 将麦克风输入传递给扬声器。这是我的代码
% Initialization
numIterations = 500;
% Construct sources (for all inputs)
src1 = dsp.AudioRecorder('DeviceName','Mikrofon (USB-Audiogerät)','NumChannels',1);
% Construct sinks (for all outputs)
sink1_1 = dsp.SpectrumAnalyzer('SampleRate',44100, ...
'PlotAsTwoSidedSpectrum',false, ...
'ShowLegend',true);
sink1_2 = dsp.TimeScope('BufferLength',44100, ...
'SampleRate',44100, ...
'TimeSpan',1, ...
'ShowLegend',true, ...
'ShowGrid',true, ...
'YLimits',[-0.5 0.5]);
sink1_3 =
dsp.AudioPlayer('BufferSizeSource','Property','BufferSize',1024,...
'QueueDuration',0,'OutputNumUnderrunSamples',true);
sink1_3.DeviceName = 'Lautsprecher (USB-Audiogerät)';
% Stream processing loop
clear dspStreamingPassthrough;
for i = 1:numIterations
% Sources
in1 = step(src1);
% User Algorithm
out1 = dspStreamingPassthrough(in1);
% Sinks
step(sink1_3,out1);
step(sink1_1,out1);
step(sink1_2,out1);
nUnderrun=step(sink1_3,out1);
end
% Clean up
release(src1);
release(sink1_1);
release(sink1_2);
我正在使用 Windows DirectSound 音频驱动程序(我无法使用 ASIO 驱动程序,因为我无法访问单个音频设备名称。!)现在我的音频延迟为 1.2 秒,即如果我说 ''hello''现在在麦克风中,1.2 秒后扬声器说''hello''(这绝对没有任何音频输入数据处理只是 'dspStreamingPassthrough')。如何减少这种令人难以置信的延迟?
对于我的 1 米长管道(风管)项目,我应该能够在 1.7 毫秒或更短的时间内处理数据!我试过最低 'BufferSize' 和最低 'QueueDuration' 可能!!
还有哪些其他参数可以影响加速此过程?是否可以使用 MATLAB?
PS:-对整个代码感到抱歉。 -我使用的是便宜的优质声卡(7 欧元)
DirectSound 的延迟比 ASIO 高很多,因为 DirectSound 不适合低延迟应用程序。 DSP System Toolbox 还不支持 WASAPI。
从 15a 开始,这些对象的延迟性能得到了极大的改善。我不确定你是哪个版本 运行 但请尝试升级到 15a 或更高版本。
关于调整延迟,请尝试以下操作:
* 将播放器和记录器的队列持续时间 属性 设置为 0 秒。
* 对于记录器,匹配 SamplesPerFrame 和 BufferSize 属性。
* 对于播放器,确保数据的大小与 BuferSize 属性.
匹配
BufferSize属性是声卡运行时的大小。
如果出现掉落,请增加 BufferSize 值。掉落的原因可能有很多:
* 你的算法 运行 并不比 BufferSize/SampleRate 快
* 声卡无法在此 BufferSize 下运行。一些声卡允许您在使用 ASIO 时修改它。
* player/recorder 个对象的限制。
希望对您有所帮助。
迪内什
我一直在做我的 ANC 项目。为此,我有两个麦克风输入和一个扬声器输出,但最初我使用单个麦克风和 dspStreamingPassthrough 将麦克风输入传递给扬声器。这是我的代码
% Initialization
numIterations = 500;
% Construct sources (for all inputs)
src1 = dsp.AudioRecorder('DeviceName','Mikrofon (USB-Audiogerät)','NumChannels',1);
% Construct sinks (for all outputs)
sink1_1 = dsp.SpectrumAnalyzer('SampleRate',44100, ...
'PlotAsTwoSidedSpectrum',false, ...
'ShowLegend',true);
sink1_2 = dsp.TimeScope('BufferLength',44100, ...
'SampleRate',44100, ...
'TimeSpan',1, ...
'ShowLegend',true, ...
'ShowGrid',true, ...
'YLimits',[-0.5 0.5]);
sink1_3 =
dsp.AudioPlayer('BufferSizeSource','Property','BufferSize',1024,...
'QueueDuration',0,'OutputNumUnderrunSamples',true);
sink1_3.DeviceName = 'Lautsprecher (USB-Audiogerät)';
% Stream processing loop
clear dspStreamingPassthrough;
for i = 1:numIterations
% Sources
in1 = step(src1);
% User Algorithm
out1 = dspStreamingPassthrough(in1);
% Sinks
step(sink1_3,out1);
step(sink1_1,out1);
step(sink1_2,out1);
nUnderrun=step(sink1_3,out1);
end
% Clean up
release(src1);
release(sink1_1);
release(sink1_2);
我正在使用 Windows DirectSound 音频驱动程序(我无法使用 ASIO 驱动程序,因为我无法访问单个音频设备名称。!)现在我的音频延迟为 1.2 秒,即如果我说 ''hello''现在在麦克风中,1.2 秒后扬声器说''hello''(这绝对没有任何音频输入数据处理只是 'dspStreamingPassthrough')。如何减少这种令人难以置信的延迟?
对于我的 1 米长管道(风管)项目,我应该能够在 1.7 毫秒或更短的时间内处理数据!我试过最低 'BufferSize' 和最低 'QueueDuration' 可能!!
还有哪些其他参数可以影响加速此过程?是否可以使用 MATLAB?
PS:-对整个代码感到抱歉。 -我使用的是便宜的优质声卡(7 欧元)
DirectSound 的延迟比 ASIO 高很多,因为 DirectSound 不适合低延迟应用程序。 DSP System Toolbox 还不支持 WASAPI。
从 15a 开始,这些对象的延迟性能得到了极大的改善。我不确定你是哪个版本 运行 但请尝试升级到 15a 或更高版本。
关于调整延迟,请尝试以下操作: * 将播放器和记录器的队列持续时间 属性 设置为 0 秒。 * 对于记录器,匹配 SamplesPerFrame 和 BufferSize 属性。 * 对于播放器,确保数据的大小与 BuferSize 属性.
匹配BufferSize属性是声卡运行时的大小。
如果出现掉落,请增加 BufferSize 值。掉落的原因可能有很多: * 你的算法 运行 并不比 BufferSize/SampleRate 快 * 声卡无法在此 BufferSize 下运行。一些声卡允许您在使用 ASIO 时修改它。 * player/recorder 个对象的限制。
希望对您有所帮助。
迪内什