Matlab实时音频处理

时间:2015-05-07 12:55:05

标签: matlab audio-recording audio-processing

我正在尝试录制我的麦克风输入并同时处理它。

我尝试了一个内部循环:

recordblocking(recorder, 1);
y = getaudiodata(recorder);
% any processing on y

但是当我用 y 做某事时,由于没有连续录制,我丢失了信息。

我能做些什么来连续录制麦克风中的声音,将其存储在某种缓冲区中,并同时处理它的块?

延迟不是问题,但我确实需要同时完成录制和处理。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

我认为你应该像这样使用Stream处理:

% 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

中找到更多信息presentation

答案 1 :(得分:0)

您可以在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);

请注意,可以通过将其他参数传递给函数来指定输入和输出设备及其通道。可以通过调用 blockdevices 获取可用音频设备列表。