2015-05-07 185 views
1

我試圖記錄我的麥克風輸入並在同一時間處理它。Matlab實時音頻處理

我試圖用這裏面的循環:

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

但是當我做一些與y,我因爲不是連續記錄丟失信息。

有沒有什麼我可以做的,不斷錄製聲音進入我的麥克風,將其存儲在某種緩衝區,並同時處理它的塊?

延遲不是問題,但我真的需要同時進行記錄和處理。

在此先感謝您的幫助。

+0

你有Simulink嗎? – Memming

回答

4

我認爲你應該使用數據流的處理是這樣的:

% 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 

你可以找到在這個presentation

0

更多信息here,你也可以嘗試在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獲取可用音頻設備列表。