Matlab并行计算 - 同时播放和录制

时间:2014-05-25 13:24:33

标签: matlab parallel-processing

我想使用Matlab同时播放纯音并从默认麦克风录音。

%% Main code   
frequency = 500;
time = 5;

tic
parfor ii = 1:2
    if ii==1
        recording = test_record(time);
    elseif ii==2
        test_play(frequency,time);
    end
end
toc

size(recording)

除了在parfor循环结束后记录变量不可用之外,这一切都正常工作,我需要它进行进一步分析。我很欣赏如何在parforloop之后提供记录样本的建议,甚至更好 - 我很乐意了解更好的设计是否更合适。

谢谢!


以下是用于运行上述代码的两个附加函数:

%% Play the given frequency
function test_play(frequency,recording_time)
fs = 8000; % Samples per second
t = 0:(1/fs):recording_time;
y =  sin(2*pi*frequency*t);
sound(y, fs);
end

%% Record from the microphone for given number of seconds
function recording = test_record(recording_time)
recObj = audiorecorder;
recordblocking(recObj, recording_time);
recording = getaudiodata(recObj);
end

注意 - related question's答案会重定向到某些程序( Sox ),这些程序似乎就是我搜索的内容,但是我想自己编写Matlab代码。

1 个答案:

答案 0 :(得分:2)

在您的情况下,录制是一个保留在工作人员身上的局部变量。此代码创建一个切片的单元格数组,应该修复它:

%% Main code   
frequency = 500;
time = 5;
recording=cell(2,1)
parfor ii = 1:2
    if ii==1
        recording{ii} = test_record(time);
    elseif ii==2
        test_play(frequency,time);
    end
end

显然,您的数据正在录制{1}