タイマーコールバック内でプロット先指定をするためにはどうすればよいですか?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Yoshiharu Soeta
el 21 de Nov. de 2018
Respondida: Aoi Midori
el 4 de Dic. de 2018
マイクから取得した音源をGUIDE上のAxesであるwaveformにリアルタイムにプロットしようとしています.
公式ドキュメンテーション"GUIDEアプリでのプロットの自動更新"を参考に,タイマーのコールバック関数updata_displayを追加し,
getaudiodata関数で取得した値をplot関数に入れました.
しかし,1フレームだけwaveformにプロットされてから,新しいfigureウィンドウが開きそこにリアルタイム描画されます.
全フレームをwaveformにプロットするためにはどうすればよいですか?
OpeningFcn内timerの定義部分
handles.waveform = findobj('Tag','waveform');
% Create a timer object to fire at 1/10 sec intervals
% Specify function handles for its start and run callbacks
handles.timer = timer(...
'ExecutionMode', 'fixedRate', ... % Run timer repeatedly
'Period', 1, ... % Initial period is 1 sec.
'TimerFcn', {@update_display,hObject}); % Specify callback function
function update_display(hObject, eventdata, handles)
% Timer timer1 callback, called each time timer iterates.
handles = guidata(handles)
y_tmp = getaudiodata(handles.recObj);
tv = (1:length(y_tmp))./handles.fs;
%プロット対象をwaveformに指定
axes(handles.waveform);
plot(tv, y_tmp./max(y_tmp), 'k');
axis([0 length(y_tmp)/handles.fs -1 1])
end
4 comentarios
Aoi Midori
el 26 de Nov. de 2018
Yoshiharu Soetaさん、
.mファイルと.figファイルの添付ありがとうございます。頂いたファイルで確かに再現しました。ただ、RealTime_GUI.mのupdate_display()内でブレークを張って実行すると新しいウィンドウができなかったので、タイミングの問題?と思い、下記の通りpause()を加えると、カクカクながらもご所望の動きに近い形になりました。getaudiodata()に時間がかかるんですかね?対処療法的ですみませんが、一応コード載せておきますね。少しでも手掛かりになると嬉しいです。。
function update_display(hObject, eventdata, handles)
% 略
y_tmp = getaudiodata(handles.recObj);
pause(1) % 新規追加部分
tv = (1:length(y_tmp))./handles.fs;
% 略
end
Respuesta aceptada
Aoi Midori
el 4 de Dic. de 2018
Yoshiharu Soetaさん、
無事に解決されたようでよかったです。では、回答としてこちらに記載しておきます。
function update_display(hObject, eventdata, handles)
% 略
y_tmp = getaudiodata(handles.recObj);
pause(1) % 新規追加
tv = (1:length(y_tmp))./handles.fs;
% 略
end
0 comentarios
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!