Matlab实时音频处理
Matlab real time audio processing
我正在尝试记录我的麦克风输入并同时对其进行处理。
我在里面尝试了一个循环:
recordblocking(recorder, 1);
y = getaudiodata(recorder);
% any processing on y
但是当我用 y
做一些事情时,我正在丢失信息,因为没有连续记录。
我可以做些什么来连续记录麦克风中的声音,将其存储在某种缓冲区中,并同时处理其中的块吗?
延迟不是问题,但我确实需要同时进行录制和处理。
在此先感谢您的帮助。
我认为你应该像这样使用流处理:
% Visualization of audio spectrum frame by frame
Microphone = dsp.AudioRecorder;
Speaker = dsp.AudioPlayer;
SpecAnalyzer = dsp.SpectrumAnalyzer;
tic;
while(toc<30)
audio = step(Microphone);
step(SpecAnalyzer,audio);
step(Speaker, audio);
end
您可以找到更多信息here and also in this presentation
您可以试试LTFAT中的块处理框架
http://ltfat.github.io/doc/demos/demo_blockproc_basicloop_code.html
编辑:
这是代码的主要要点:
% Basic Control pannel (Java object)
p = blockpanel({
{'GdB','Gain',-20,20,0,21},...
});
% Setup blocktream
fs = block('playrec','loadind',p);
% Set buffer length to 30 ms
L = floor(30e-3*fs);
flag = 1;
%Loop until end of the stream (flag) and until panel is opened
while flag && p.flag
gain = blockpanelget(p,'GdB');
gain = 10^(gain/20);
% Read the block
[f,flag] = blockread(L);
% Play the block and do the processing
blockplay(f*gain);
end
blockdone(p);
请注意,可以通过将附加参数传递给 block 函数来指定输入和输出设备及其通道。可以通过调用 blockdevices.
获取可用音频设备列表
我正在尝试记录我的麦克风输入并同时对其进行处理。
我在里面尝试了一个循环:
recordblocking(recorder, 1);
y = getaudiodata(recorder);
% any processing on y
但是当我用 y
做一些事情时,我正在丢失信息,因为没有连续记录。
我可以做些什么来连续记录麦克风中的声音,将其存储在某种缓冲区中,并同时处理其中的块吗?
延迟不是问题,但我确实需要同时进行录制和处理。
在此先感谢您的帮助。
我认为你应该像这样使用流处理:
% Visualization of audio spectrum frame by frame
Microphone = dsp.AudioRecorder;
Speaker = dsp.AudioPlayer;
SpecAnalyzer = dsp.SpectrumAnalyzer;
tic;
while(toc<30)
audio = step(Microphone);
step(SpecAnalyzer,audio);
step(Speaker, audio);
end
您可以找到更多信息here and also in this presentation
您可以试试LTFAT中的块处理框架 http://ltfat.github.io/doc/demos/demo_blockproc_basicloop_code.html
编辑: 这是代码的主要要点:
% Basic Control pannel (Java object)
p = blockpanel({
{'GdB','Gain',-20,20,0,21},...
});
% Setup blocktream
fs = block('playrec','loadind',p);
% Set buffer length to 30 ms
L = floor(30e-3*fs);
flag = 1;
%Loop until end of the stream (flag) and until panel is opened
while flag && p.flag
gain = blockpanelget(p,'GdB');
gain = 10^(gain/20);
% Read the block
[f,flag] = blockread(L);
% Play the block and do the processing
blockplay(f*gain);
end
blockdone(p);
请注意,可以通过将附加参数传递给 block 函数来指定输入和输出设备及其通道。可以通过调用 blockdevices.
获取可用音频设备列表