可能重复:
How can I use function callback ('StopFcn' , 'TimerFcn' )for audiorecorder object in MATLAB?
所以我尝试使用此代码。
% assume fs,winsize,winshift is given.
T = 0.1; % in seconds
samples = cell{100,1};
r = audiorecorder(fs,16,1);
k=1;
r.TimerPeriod = 0.1;
r.StopFcn = 'samples{k} = getaudiodata(r);';
r.TimerFcn = {@get_pitch,samples{k},winsize,winshift};
while 1
record(r,T);
k=k+1;
end
我希望在录音期间通过audiorecorder对象执行'get_pitch(samples,fs,winsize,winshift)函数。
但执行期间发生以下异常。
1)执行记录(r,T)后。 (现在调用StopFcn)???使用==>时出错eval未定义的函数或变量'r'。
2)调用StopFcn后(现在调用TimerFcn)在这个阶段,get_pitch函数的参数完全错误。例如,位置样本{k}中的参数更改为“audiorecorder对象”。
似乎我不知道确切使用'StopFcn'和& 'TimerFcn'。
有没有人可以给我一些建议?我非常感谢你的所有评论。
答案 0 :(得分:1)
查看example in the documentation我建议尝试在循环中调用getaudiodata(r),而不是使用CallBack。所以像这样:
% assume fs,winsize,winshift is given.
T = 0.1; % in seconds
samples = cell{100,1};
r = audiorecorder(fs,16,1);
k=1;
r.TimerPeriod = 0.1;
r.StopFcn = 'disp(''Completed sample '', k)';
r.TimerFcn = {@get_pitch,samples{k - 1},winsize,winshift};
while 1
record(r,T);
samples{k} = getaudiodata(r);
k=k+1;
end
注意我将r.TimerFcn
更改为使用samples{k - 1}
而不是k
,因为k会在调用timerfcn之前递增。所以这可能会给你第一个样本带来问题,你需要稍微调整一下。这也是一个无限循环,我相信你会想要解决。