2016-10-21 21 views
1

我在做一些處理信號的GUI。其中一個組件是一個「記錄」按鈕,記錄麥克風幾秒鐘的聲音。稍後幾個滑塊以不同的方式移動它,稍後有一個播放按鈕可播放變形的聲音。在GUIDE中存儲/傳遞半大型數據,Matlab

我使用處理所有有關從滑塊選擇的頻率的信息,它工作正常,但是與錄製的聲音,我有點擔心,因爲我知道把手結構複製所有的時間。幾秒鐘的聲音可能不會太多,但我擔心性能問題,因爲gui運行很長時間,並且很多組件被點擊。我在一些Mathworks頁面上閱讀過,guidata /句柄不應該用於大型數據結構,因爲它被複制。我嘗試使用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中,而不是爲了便於閱讀而進行記錄。

編輯:我使用的指南。

+0

這是MATLAB <2014B?錯誤是因爲'hObject.Parent',hObject不是一個結構 –

+0

是的,>版本給出了8.3.0.532(R2014a),所以我會這樣猜測。我在Stackoverflow上看到了hObject.Parent,所以我只是複製它。任何解決方法?無庸置疑,該代碼應該在2014年和2016年都運行,但這並不是一個嚴格的要求。 – user1661303

+1

複製粘貼代碼而不知道它的作用!多麼恐怖的可怕想法要做。主要是因爲你不知道如果失敗會發生什麼,並且並不是所有的代碼都是正確的。 –

回答

2

,使這項工作在兩個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) 
+0

謝謝。可能愚蠢的問題,但是hObject = handle(hObject)是做什麼的? – user1661303

+1

它使預處理2014b處理一個變量,您可以使用'點'語法 – matlabgui