Storing/passing GUIDE、Matlab中的半大数据
Storing/passing semi-large data in GUIDE, Matlab
我正在制作一个可以进行一些信号处理的图形用户界面。其中一个组件是 "record" 按钮,用于记录麦克风发出的几秒钟声音。几个滑块之后会以不同的方式改变音高,然后会有一个播放按钮播放转换后的声音。
我对从滑块中选择的有关频率的所有信息使用句柄,它工作正常,但是对于录制的声音,我有点担心,因为我知道句柄结构一直被复制。几秒钟的声音可能不会太多,但我担心性能问题,因为 gui 是 运行 很长时间,很多组件都被点击了。我在一些 Mathworks 页面上读到 guidata/handles 不应该用于大型数据结构,因为它会被复制。我尝试按照此处的说明使用 setappdata 和 getappdata https://se.mathworks.com/help/matlab/ref/getappdata.html
这里
https://se.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html#bt9p4t0
虽然它不起作用,但给了我一个
Attempt to reference field of non-structure array.
Error in gui>recordbutton_Callback (line 334)
setappdata(hObject.Parent, 'v', 'Record')
错误。
这是我尝试存储它的方式:
% --- Executes just before gui is made visible.
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to gui (see VARARGIN)
setappdata(hObject, 'v', '');
%% --- Other app-specific inits
% --- Executes on button press in recordbutton.
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
setappdata(hObject.Parent, 'v', 'Record')
getappdata(hObject.Parent)
我试过将它存储在 hObject.Parent 和 hObject 本身中。两者都给出相同的错误。我希望数据可以从所有其他组件的回调函数访问,但不会一直被复制。
请注意,在此示例中,我只是尝试将字符串 'Record' 存储在变量 v 中,而不是为了便于阅读而记录。
编辑:我正在使用 GUIDE。
要使此功能在 r2014a 和 r2016b 中都有效,您有两个选择:
使 r2014a 像 r2016b 一样工作:
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
hObject = handle(hObject);
setappdata(hObject.Parent, 'v', 'Record')
getappdata(hObject.Parent)
两者都使用 r2014a 语法:
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Parent = get ( hObject, 'Parent' );
setappdata(Parent, 'v', 'Record')
getappdata(Parent)
我正在制作一个可以进行一些信号处理的图形用户界面。其中一个组件是 "record" 按钮,用于记录麦克风发出的几秒钟声音。几个滑块之后会以不同的方式改变音高,然后会有一个播放按钮播放转换后的声音。
我对从滑块中选择的有关频率的所有信息使用句柄,它工作正常,但是对于录制的声音,我有点担心,因为我知道句柄结构一直被复制。几秒钟的声音可能不会太多,但我担心性能问题,因为 gui 是 运行 很长时间,很多组件都被点击了。我在一些 Mathworks 页面上读到 guidata/handles 不应该用于大型数据结构,因为它会被复制。我尝试按照此处的说明使用 setappdata 和 getappdata https://se.mathworks.com/help/matlab/ref/getappdata.html
这里 https://se.mathworks.com/help/matlab/creating_guis/share-data-among-callbacks.html#bt9p4t0
虽然它不起作用,但给了我一个
Attempt to reference field of non-structure array.
Error in gui>recordbutton_Callback (line 334)
setappdata(hObject.Parent, 'v', 'Record')
错误。
这是我尝试存储它的方式:
% --- Executes just before gui is made visible.
function gui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to gui (see VARARGIN)
setappdata(hObject, 'v', '');
%% --- Other app-specific inits
% --- Executes on button press in recordbutton.
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
setappdata(hObject.Parent, 'v', 'Record')
getappdata(hObject.Parent)
我试过将它存储在 hObject.Parent 和 hObject 本身中。两者都给出相同的错误。我希望数据可以从所有其他组件的回调函数访问,但不会一直被复制。 请注意,在此示例中,我只是尝试将字符串 'Record' 存储在变量 v 中,而不是为了便于阅读而记录。
编辑:我正在使用 GUIDE。
要使此功能在 r2014a 和 r2016b 中都有效,您有两个选择:
使 r2014a 像 r2016b 一样工作:
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
hObject = handle(hObject);
setappdata(hObject.Parent, 'v', 'Record')
getappdata(hObject.Parent)
两者都使用 r2014a 语法:
function recordbutton_Callback(hObject, eventdata, handles)
% hObject handle to recordbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Parent = get ( hObject, 'Parent' );
setappdata(Parent, 'v', 'Record')
getappdata(Parent)