Windows 如何利用MATLAB DSP系统工具箱减少音频延迟?

Windows 如何利用MATLAB DSP系统工具箱减少音频延迟?,windows,matlab,signal-processing,audio-recording,microphone,Windows,Matlab,Signal Processing,Audio Recording,Microphone,我一直在做我的非国大项目。为此,我有两个麦克风输入和一个扬声器输出,但最初我使用单麦克风和dspStreamingPassthrough将麦克风输入传递给扬声器。这是我的密码 % Initialization numIterations = 500; % Construct sources (for all inputs) src1 = dsp.AudioRecorder('DeviceName','Mikrofon (USB-Audiogerät)','NumChannels',1); % C

我一直在做我的非国大项目。为此,我有两个麦克风输入和一个扬声器输出,但最初我使用单麦克风和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秒的音频延迟,也就是说,如果我现在在麦克风中打招呼,1.2秒后,扬声器会说“你好”,这绝对没有任何音频输入数据处理,只是“dspStreamingPassthrough”。如何减少这种令人难以置信的延迟

对于我的1米长管道风管项目,我应该能够在1.7毫秒或更短时间内处理数据!!我尝试了尽可能低的“BufferSize”和“QueueDuration”

有哪些其他参数可以影响加速此过程?是否可以使用MATLAB


PS:-对整个代码感到抱歉-我使用的是7欧元的廉价优质声卡,DirectSound的延迟远远高于ASIO,因为DirectSound不适合低延迟应用。DSP系统工具箱还不支持WASAPI

从15a开始,这些对象的延迟性能大大提高。我不确定您正在运行哪个版本,但请尝试升级到15a或更高版本

至于调整延迟,请尝试以下操作: *将播放机和录音机的队列持续时间属性设置为0秒。 *对于记录器,匹配SamplePerFrame和BufferSize属性。 *对于播放机,请确保数据的大小与BuferSize属性匹配

BufferSize属性是声卡操作的大小

如果出现下降,请增加BufferSize值。下降的原因可能有很多: *您正在运行的算法不比BufferSize/SampleRate快 *声卡无法在此缓冲区大小下工作。某些声卡允许您在使用ASIO时修改此选项。 *播放器/录音机对象的限制

希望这有帮助


Dinesh

即使您可以以某种方式减少延迟,您也无法将延迟降低到<1.7毫秒。因此matlab不适用于此!?那么解决办法是什么呢!?你能给我提个建议吗!这不是MATLAB-这是一个更基本的问题-1.7毫秒@44.1 kHz采样率是75个采样-声卡、驱动程序等中的缓冲区将大于此。我能处理数据的最短时间是多少?我在维基上读过,DirectSound是500秒。ASIO需要多少钱?将上述脚本转换为MEX文件将给出一些结果?我使用的是Matlab2015b学生版。使用ASIO驱动程序,无需任何处理,仅dspStreamingPassThrough,MATLAB每次“for”循环迭代大约需要50毫秒。它比DirectSound好得多,但问题是如果我使用两个麦克风和一个带ASIOI的扩音器,我无法访问单个设备的名称。如果我使用scr1.DeviceName='然后我只能选择ASIO4ALL v2。我尝试像你提到的线程中那样使用devinfo命令,但我只得到以下输出。>>ddevinfo=dspAudioDeviceInfo ddevinfo=name:'ASIO4ALL v2 ASIO'最大输入:2最大输出:2如何访问单个设备名称??该设备有2个输入通道和2个输出通道。因此,如果将一个麦克风连接到一个通道,将第二个麦克风连接到另一个通道,则可以将两个输入记录为该设备的两个通道。我不确定您在说单个设备名称时期望的是什么?很抱歉,可能我没有正确理解您的意思。如何映射或连接一个dsp的两个不同通道的两个不同话筒。audioplayer对象??我有麦克风连接,如图所示。PS:我尝试使用“ChannelMapping”属性,但我不能选择两个单独的麦克风。当我说单独的设备名称时,我指的是单独的麦克风名称,这可以在代码第4行和第18行中看到。问题是,如果我使用ASIO,我得到的设备如前所述。。