MATLAB Answers

I don't know why I am getting this Matlab GUI error. Someone please help me get out of this!

10 views (last 30 days)
Yamini Durga
Yamini Durga on 29 Dec 2018
Edited: Image Analyst on 30 Dec 2018
My AIM is to implement COMPRESSION OF AUDIO SIGNALS USING WAVELETS TRANSFORMS! But when try this code and run in MatLab, it shows some GUI ERROR which I have no idea about! I am using R2016b. I have mentioned the line in which error occured in code as comments with line number. I have also given the source code for gui_mainfcn.
CODE I AM USING:
function varargout = AudioCompression2(varargin)
% AUDIOCOMPRESSION2 MATLAB code for AudioCompression2.fig
% AUDIOCOMPRESSION2, by itself, creates a new AUDIOCOMPRESSION2 or raises the existing
% singleton*.
%
% H = AUDIOCOMPRESSION2 returns the handle to a new AUDIOCOMPRESSION2 or the handle to
% the existing singleton*.
%
% AUDIOCOMPRESSION2('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in AUDIOCOMPRESSION2.M with the given input arguments.
%
% AUDIOCOMPRESSION2('Property','Value',...) creates a new AUDIOCOMPRESSION2 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before AudioCompression2_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to AudioCompression2_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help AudioCompression2
% Last Modified by GUIDE v2.5 21-Nov-2014 18:23:56
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @AudioCompression2_OpeningFcn, ...
'gui_OutputFcn', @AudioCompression2_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:}); % ERROE LINE (LINE 42)
end
% End initialization code - DO NOT EDIT
% --- Executes just before AudioCompression2 is made visible.
function AudioCompression2_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 AudioCompression2 (see VARARGIN)
% Choose default command line output for AudioCompression2
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes AudioCompression2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = AudioCompression2_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global file_name;
%guidata(hObject,handles)
file_name=uigetfile({'*.wav'},'Select an Audio File');
fileinfo = dir(file_name);
SIZE = fileinfo.bytes; % ERROE LINE (LINE 85)
Size = SIZE/1024;
[x,Fs,bits] = audioread(file_name);
xlen=length(x);
t=0:1/Fs:(length(x)-1)/Fs;
set(handles.text12,'string',Size);
%plot(t,x);
axes(handles.axes1) % Select the proper axes
plot(t,x)
set(handles.axes1,'XMinorTick','on')
grid on
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global file_name;
if(~ischar(file_name))
errordlg('Please select Audio first');
else
[Data,Fs,bits] = audiioread(file_name);
[Data, Fs, bits] = audioread('Windows XP Startup.wav');
%chosing a block size
windowSize = 8192;
%changing compression percentages
samplesHalf = windowSize / 2;
samplesQuarter = windowSize / 4;
samplesEighth = windowSize / 8;
%initializing compressed matrice
DataCompressed2 = [];
DataCompressed4 = [];
DataCompressed8 = [];
%actual compression
for i=1:windowSize:length(Data)-windowSize
windowDCT = dct(Data(i:i+windowSize-1));
DataCompressed2(i:i+windowSize-1) = idct(windowDCT(1:samplesHalf), windowSize);
DataCompressed4(i:i+windowSize-1) = idct(windowDCT(1:samplesQuarter), windowSize);
DataCompressed8(i:i+windowSize-1) = idct(windowDCT(1:samplesEighth), windowSize);
end
audiowrite(DataCompressed2,Fs,bits,'output3.wav')
[x,Fs,bits] = audioread('output3.wav');
fileinfo = dir('output3.wav');
SIZE = fileinfo.bytes;
Size = SIZE/1024;
xlen=length(x);
t=0:1/Fs:(length(x)-1)/Fs;
set(handles.text14,'string',Size);
%plot(t,x);
axes(handles.axes2) % Select the proper axes
plot(t,x)
set(handles.axes2,'XMinorTick','on')
grid on
audiowrite(DataCompressed4,Fs,bits,'output4.wav')
[x,Fs,bits] = audioread('output4.wav');
fileinfo = dir('output4.wav');
SIZE = fileinfo.bytes;
Size = SIZE/1024;
xlen=length(x);
t=0:1/Fs:(length(x)-1)/Fs;
set(handles.text16,'string',Size);
%plot(t,x);
axes(handles.axes3) % Select the proper axes
plot(t,x)
set(handles.axes3,'XMinorTick','on')
grid on
audiowrite(DataCompressed8,Fs,bits,'output5.wav')
[x,Fs,bits] = audioread('output5.wav');
fileinfo = dir('output5.wav');
SIZE = fileinfo.bytes;
Size = SIZE/1024;
xlen=length(x);
t=0:1/Fs:(length(x)-1)/Fs;
set(handles.text18,'string',Size);
%plot(t,x);
axes(handles.axes4) % Select the proper axes
plot(t,x)
set(handles.axes4,'XMinorTick','on')
grid on
[y1,fs1, nbits1,opts1]=audioread(file_name);
[y2,fs2, nbits2,opts2]=audioread('output3.wav');
[c1x,c1y]=size(y1);
[c2x,c2y]=size(y1);
if c1x ~= c2x
disp('dimeonsions do not agree');
else
R=c1x;
C=c1y;
err = (sum(y1(2)-y2).^2)/(R*C);
MSE=sqrt(err);
MAXVAL=255;
PSNR = 20*log10(MAXVAL/MSE);
MSE= num2str(MSE);
if(MSE > 0)
PSNR= num2str(PSNR);
else
PSNR = 99;
end
fileinfo = dir(file_name);
SIZE = fileinfo.bytes;
Size = SIZE/1024;
fileinfo1 = dir('output3.wav');
SIZE1 = fileinfo1.bytes;
Size1 = SIZE1/1024;
CompressionRatio = Size/Size1;
set(handles.text21,'string',PSNR)
set(handles.text23,'string',MSE)
set(handles.text24,'string',CompressionRatio)
end
end
SOURCE CODE FOR gui_mainfcn:
function varargout = gui_mainfcn(gui_State, varargin)
% GUI_MAINFCN Support function for creation and callback dispatch of GUIDE GUIs.
% GUI_MAINFCN is called from inside MATLAB code files generated by GUIDE to handle
% GUI creation, layout, and callback dispatch.
%
% See also: GUIDE.
% GUI_MAINFCN provides these command line APIs for dealing with GUIs
%
% UNTITLED, by itself, creates a new UNTITLED or raises the existing
% singleton*.
%
% H = UNTITLED returns the handle to a new UNTITLED or the handle to
% the existing singleton*.
%
% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in UNTITLED.M with the given input arguments.
%
% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
% existing singleton*. Starting from the left, property value pairs
% are
% applied to the GUI before untitled_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to untitled_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% Copyright 1984-2015 The MathWorks, Inc.
gui_StateFields = {'gui_Name'
'gui_Singleton'
'gui_OpeningFcn'
'gui_OutputFcn'
'gui_LayoutFcn'
'gui_Callback'};
gui_Mfile = '';
for i=1:length(gui_StateFields)
if ~isfield(gui_State, gui_StateFields{i})
error(message('MATLAB:guide:StateFieldNotFound', gui_StateFields{ i }, gui_Mfile));
elseif isequal(gui_StateFields{i}, 'gui_Name')
gui_Mfile = [gui_State.(gui_StateFields{i}), '.m'];
end
end
numargin = length(varargin);
if numargin == 0
% UNTITLED
% create the GUI only if we are not in the process of loading it
% already
gui_Create = true;
elseif local_isInvokeActiveXCallback(gui_State, varargin{:})
% UNTITLED(ACTIVEX,...)
vin{1} = gui_State.gui_Name;
vin{2} = [get(varargin{1}.Peer, 'Tag'), '_', varargin{end}];
vin{3} = varargin{1};
vin{4} = varargin{end-1};
vin{5} = guidata(varargin{1}.Peer);
feval(vin{:});
return;
elseif local_isInvokeHGCallback(gui_State, varargin{:})
% UNTITLED('CALLBACK',hObject,eventData,handles,...)
gui_Create = false;
else
% UNTITLED(...)
% create the GUI and hand varargin to the openingfcn
gui_Create = true;
end
if ~gui_Create
% In design time, we need to mark all components possibly created in
% the coming callback evaluation as non-serializable. This way, they
% will not be brought into GUIDE and not be saved in the figure file
% when running/saving the GUI from GUIDE.
designEval = false;
if (numargin>1 && ishghandle(varargin{2}))
fig = varargin{2};
while ~isempty(fig) && ~ishghandle(fig,'figure')
fig = get(fig,'parent');
end
designEval = isappdata(0,'CreatingGUIDEFigure') || (isscalar(fig)&&isprop(fig,'GUIDEFigure'));
end
if designEval
beforeChildren = findall(fig);
end
% evaluate the callback now
varargin{1} = gui_State.gui_Callback;
if nargout
[varargout{1:nargout}] = feval(varargin{:});
else
feval(varargin{:});
end
% Set serializable of objects created in the above callback to off in
% design time. Need to check whether figure handle is still valid in
% case the figure is deleted during the callback dispatching.
if designEval && ishghandle(fig)
set(setdiff(findall(fig),beforeChildren), 'Serializable','off');
end
else
if gui_State.gui_Singleton
gui_SingletonOpt = 'reuse';
else
gui_SingletonOpt = 'new';
end
% Check user passing 'visible' P/V pair first so that its value can be
% used by oepnfig to prevent flickering
gui_Visible = 'auto';
gui_VisibleInput = '';
for index=1:2:length(varargin)
if length(varargin) == index || ~ischar(varargin{index})
break;
end
% Recognize 'visible' P/V pair
len1 = min(length('visible'),length(varargin{index}));
len2 = min(length('off'),length(varargin{index+1}));
if ischar(varargin{index+1}) && strncmpi(varargin{index},'visible',len1) && len2 > 1
if strncmpi(varargin{index+1},'off',len2)
gui_Visible = 'invisible';
gui_VisibleInput = 'off';
elseif strncmpi(varargin{index+1},'on',len2)
gui_Visible = 'visible';
gui_VisibleInput = 'on';
end
end
end
% Open fig file with stored settings. Note: This executes all component
% specific CreateFunctions with an empty HANDLES structure.
% Do feval on layout code in m-file if it exists
gui_Exported = ~isempty(gui_State.gui_LayoutFcn);
% this application data is used to indicate the running mode of a GUIDE
% GUI to distinguish it from the design mode of the GUI in GUIDE. it is
% only used by actxproxy at this time.
setappdata(0,genvarname(['OpenGuiWhenRunning_', gui_State.gui_Name]),1);
if gui_Exported
gui_hFigure = feval(gui_State.gui_LayoutFcn, gui_SingletonOpt);
% make figure invisible here so that the visibility of figure is
% consistent in OpeningFcn in the exported GUI case
if isempty(gui_VisibleInput)
gui_VisibleInput = get(gui_hFigure,'Visible');
end
set(gui_hFigure,'Visible','off')
% openfig (called by local_openfig below) does this for guis without
% the LayoutFcn. Be sure to do it here so guis show up on screen.
movegui(gui_hFigure,'onscreen');
else
gui_hFigure = local_openfig(gui_State.gui_Name, gui_SingletonOpt, gui_Visible);
% If the figure has InGUIInitialization it was not completely created
% on the last pass. Delete this handle and try again.
if isappdata(gui_hFigure, 'InGUIInitialization')
delete(gui_hFigure);
gui_hFigure = local_openfig(gui_State.gui_Name, gui_SingletonOpt, gui_Visible);
end
end
if isappdata(0, genvarname(['OpenGuiWhenRunning_', gui_State.gui_Name]))
rmappdata(0,genvarname(['OpenGuiWhenRunning_', gui_State.gui_Name]));
end
% Set flag to indicate starting GUI initialization
setappdata(gui_hFigure,'InGUIInitialization',1);
% Fetch GUIDE Application options
gui_Options = getappdata(gui_hFigure,'GUIDEOptions');
% Singleton setting in the GUI MATLAB code file takes priority if different
gui_Options.singleton = gui_State.gui_Singleton;
if ~isappdata(gui_hFigure,'GUIOnScreen')
% Adjust background color
if gui_Options.syscolorfig
set(gui_hFigure,'Color', get(0,'DefaultUicontrolBackgroundColor'));
end
% Generate HANDLES structure and store with GUIDATA. If there is
% user set GUI data already, keep that also.
data = guidata(gui_hFigure);
handles = guihandles(gui_hFigure);
if ~isempty(handles)
if isempty(data)
data = handles;
else
names = fieldnames(handles);
for k=1:length(names)
data.(char(names(k)))=handles.(char(names(k)));
end
end
end
guidata(gui_hFigure, data);
end
% Apply input P/V pairs other than 'visible'
for index=1:2:length(varargin)
if length(varargin) == index || ~ischar(varargin{index})
break;
end
len1 = min(length('visible'),length(varargin{index}));
if ~strncmpi(varargin{index},'visible',len1)
try set(gui_hFigure, varargin{index}, varargin{index+1}), catch break, end
end
end
% If handle visibility is set to 'callback', turn it on until finished
% with OpeningFcn
gui_HandleVisibility = get(gui_hFigure,'HandleVisibility');
if strcmp(gui_HandleVisibility, 'callback')
set(gui_hFigure,'HandleVisibility', 'on');
end
feval(gui_State.gui_OpeningFcn, gui_hFigure, [], guidata(gui_hFigure), varargin{:});
if isscalar(gui_hFigure) && ishghandle(gui_hFigure)
% Handle the default callbacks of predefined toolbar tools in this
% GUI, if any
guidemfile('restoreToolbarToolPredefinedCallback',gui_hFigure);
% Update handle visibility
set(gui_hFigure,'HandleVisibility', gui_HandleVisibility);
% Call openfig again to pick up the saved visibility or apply the
% one passed in from the P/V pairs
if ~gui_Exported
gui_hFigure = local_openfig(gui_State.gui_Name, 'reuse',gui_Visible);
elseif ~isempty(gui_VisibleInput)
set(gui_hFigure,'Visible',gui_VisibleInput);
end
if strcmpi(get(gui_hFigure, 'Visible'), 'on')
figure(gui_hFigure);
if gui_Options.singleton
setappdata(gui_hFigure,'GUIOnScreen', 1);
end
end
% Done with GUI initialization
if isappdata(gui_hFigure,'InGUIInitialization')
rmappdata(gui_hFigure,'InGUIInitialization');
end
% If handle visibility is set to 'callback', turn it on until
% finished with OutputFcn
gui_HandleVisibility = get(gui_hFigure,'HandleVisibility');
if strcmp(gui_HandleVisibility, 'callback')
set(gui_hFigure,'HandleVisibility', 'on');
end
gui_Handles = guidata(gui_hFigure);
else
gui_Handles = [];
end
if nargout
[varargout{1:nargout}] = feval(gui_State.gui_OutputFcn, gui_hFigure, [], gui_Handles);
else
feval(gui_State.gui_OutputFcn, gui_hFigure, [], gui_Handles);
end
if isscalar(gui_hFigure) && ishghandle(gui_hFigure)
set(gui_hFigure,'HandleVisibility', gui_HandleVisibility);
end
end
function gui_hFigure = local_openfig(name, singleton, visible)
% openfig with three arguments was new from R13. Try to call that first, if
% failed, try the old openfig.
if nargin('openfig') == 2
% OPENFIG did not accept 3rd input argument until R13,
% toggle default figure visible to prevent the figure
% from showing up too soon.
gui_OldDefaultVisible = get(0,'defaultFigureVisible');
set(0,'defaultFigureVisible','off');
gui_hFigure = matlab.hg.internal.openfigLegacy(name, singleton);
set(0,'defaultFigureVisible',gui_OldDefaultVisible);
else
% Call version of openfig that accepts 'auto' option"
gui_hFigure = matlab.hg.internal.openfigLegacy(name, singleton, visible);
% %workaround for CreateFcn not called to create ActiveX
% peers=findobj(findall(allchild(gui_hFigure)),'type','uicontrol','style','text');
% for i=1:length(peers)
% if isappdata(peers(i),'Control')
% actxproxy(peers(i));
% end
% end
end
function result = local_isInvokeActiveXCallback(gui_State, varargin)
try
result = ispc && iscom(varargin{1}) ...
&& isequal(varargin{1},gcbo);
catch
result = false;
end
function result = local_isInvokeHGCallback(gui_State, varargin)
try
fhandle = functions(gui_State.gui_Callback);
result = ~isempty(findstr(gui_State.gui_Name,fhandle.file)) || ...
(ischar(varargin{1}) ...
&& isequal(ishghandle(varargin{2}), 1) ...
&& (~isempty(strfind(varargin{1},[get(varargin{2}, 'Tag'), '_'])) || ...
~isempty(strfind(varargin{1}, '_CreateFcn'))) );
catch
result = false;
end
ERROR:
Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
Error in AudioCompression2>pushbutton2_Callback (line 85)
SIZE = fileinfo.bytes;
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in AudioCompression2 (line 42)
gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)AudioCompression2('pushbutton2_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback

  0 Comments

Sign in to comment.

Accepted Answer

vik
vik on 29 Dec 2018
If you want to use "dir" on a specific file and the file is not in your current folder, dir will return nothing. This results in the error described.
uigetfile returns file name and folder name. You need to work with both and combine it with fullfile to get "dir" working properly:
[file_name,folder_name] = uigetfile({'*.wav'},'Select an Audio File');
file_path = fullfile(folder_name,file_name);
file_details = dir(file_path);
size_field = file_details.bytes; % ERROE LINE (LINE 85)
file_size = size_field/1024;
You can set breakpoints to stop the program before the error occurs and check your variables and values to see what's going on. If you set a breakpoint on line 85 you can see that dir returns an empty value.

  4 Comments

Show 1 older comment
vik
vik on 29 Dec 2018
There might be the same problem on audioread. Try specifying the full file path instead of filename and pass it to audioread:
[file_name,folder_name] = uigetfile({'*.wav'},'Select an Audio File');
file_path = fullfile(folder_name,file_name);
file_details = dir(file_path);
size_field = file_details.bytes; % ERROE LINE (LINE 85)
file_size = size_field/1024;
[x,Fs,bits] = audioread(file_path); %file_path instead of file_name!
Image Analyst
Image Analyst on 30 Dec 2018
Attach your .wav file zipped up with the paper clip icon so we can try vik's code with your exact file.
Is your error still the following?
Error in AudioCompression2>pushbutton2_Callback (line 88)
SIZE = fileinfo.bytes;
If so, where did the fileinfo variable get instantiated? Did you change fileinto to file_details like in vik's code? What is your exact error now?
Try this slightly different and fixed code:
[baseFileName, folder] = uigetfile({'*.wav'}, 'Select an Audio File');
fullFileName = fullfile(folder,baseFileName);
file_details = dir(fullFileName);
size_field = file_details.bytes
file_size_in_KB = size_field/1024;
[y, Fs] = audioread(fullFileName); % Only 2 output args!
soundsc(y, Fs);

Sign in to comment.

More Answers (0)

Sign in to answer this question.


Translated by