2012-05-10 25 views
1

可能性の重複:
How can I use function callback ('StopFcn' , 'TimerFcn')for audiorecorder object in MATLAB?MATLABのaudiorecorderオブジェクトの関数コールバック( 'StopFcn'、 'TimerFcn')?

だから私は、このコードにしてみてください。

% 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  

私は関数 'get_pitch(サンプル、FS、winsize、winshiftと)' を実行するaudiorecorderオブジェクトを介して記録時つつ。

ただし、実行中に次のような例外が発生します。

1)record(r、T)を実行した後。 (StopFcnが呼び出されました)??? ==> evalを使用しているエラー未定義の関数または変数 'r'。

2)StopFcnが呼び出された後(TimerFcnが呼び出された後)このフェーズでは、get_pitch関数のパラメータが完全に間違っています。たとえば、サンプルの位置{k}のパラメータは「audiorecorderオブジェクト」に変更されます。

私は 'StopFcn' & 'TimerFcn'の正確な使用を知らないようです。

私に助言を与えることができる人はいますか?皆さんのご意見は本当にありがたいです。

+0

これはあなたの最後の投稿と同じ質問です。http://stackoverflow.com/questions/10520290/how-can-i-use-function-callback-stopfcn-timerfcn-for-audiorecorder-objecそのうちの – Dan

答えて

1

example in the documentationを見ると、CallBackではなくループ内でgetaudiodata(r)を呼び出すことをおすすめします。したがって、このような何か:

% 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 

注私はtimerfcnが呼び出される前に、kはインクリメントされますので、samples{k - 1}の代わりkを使用するr.TimerFcnを変更しました。これにより、最初のサンプルで問題が発生する可能性があります。少し修正する必要があります。また、これは無限ループであり、あなたが取り組んでいると確信しています。