audiorecorder オブジェクトを介して録音中に関数 'get_pitch(samples,fs,winsize,winshift)' を実行したいと考えています。そのためには、「関数コールバック」が役立つことがわかりました。
だから私はこのコードを試します。
% 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
ただし、実行中に次の例外が発生します。
1) record(r,T) が実行された後。(StopFcn が呼び出されるようになりました) ??? ==> eval の使用エラー 未定義の関数または変数 'r'。
2) StopFcn が呼び出された後 (TimerFcn が呼び出されるようになりました) このフェーズでは、get_pitch 関数のパラメーターが完全に間違っています。たとえば、位置 samples{k} のパラメーターは「audiorecorder オブジェクト」に変更されます。
「StopFcn」と「TimerFcn」の正確な使い方がわからないようです。
アドバイスをくれる人はいますか?皆さんのコメントに本当に感謝しています。