MATLAB中的audiorecorder对象的函数回调('StopFcn','TimerFcn')?

时间:2012-05-10 03:44:42

标签: function matlab callback

  

可能重复:
  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'。

有没有人可以给我一些建议?我非常感谢你的所有评论。

1 个答案:

答案 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之前递增。所以这可能会给你第一个样本带来问题,你需要稍微调整一下。这也是一个无限循环,我相信你会想要解决。