2

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」の正確な使い方がわからないようです。

アドバイスをくれる人はいますか?皆さんのコメントに本当に感謝しています。

4

0 に答える 0