我試圖記錄我的麥克風輸入並在同一時間處理它。Matlab實時音頻處理
我試圖用這裏面的循環:
recordblocking(recorder, 1);
y = getaudiodata(recorder);
% any processing on y
但是當我做一些與y
,我因爲不是連續記錄丟失信息。
有沒有什麼我可以做的,不斷錄製聲音進入我的麥克風,將其存儲在某種緩衝區,並同時處理它的塊?
延遲不是問題,但我真的需要同時進行記錄和處理。
在此先感謝您的幫助。
我試圖記錄我的麥克風輸入並在同一時間處理它。Matlab實時音頻處理
我試圖用這裏面的循環:
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
你可以找到在這個presentation
更多信息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獲取可用音頻設備列表。
你有Simulink嗎? – Memming