Receiving "too many output arguments" error in this code

I am trying to make a effects panel on Matlab App Designer using switch-case logic in order to check which filters are toggled and which are not.
function applyActiveTransformations(app)
audio = app.origFXAudioData;
for i = 1:length(app.activeTransformations)
switch app.activeTransformations{i}
case 'highpass'
cutoffFreq = (app.FxFs/2) - 100;
normalizedCutoff = cutoffFreq/(app.FxFs/2);
[b,a]=butter(4, normalizedCutoff, ...
'high');
audio = filtfilt(b,a,audio);
case 'lowpass'
cutoffFreq = (app.FxFs/2) - 5;
[b,a] = butter(4, cutoffFreq / (app.FxFs/2), 'low');
audio = filtfilt(b,a,audio) ;
case 'bandpass'
lowCutoff=(app.FxFs/2) - 10;
highCutoff = (app.FxFs/2) - 500;
[b,a]= butter(4, [lowCutoff, highCutoff]/(app.FxFs/2),'bandpass');
audio = filtfilt(b,a,audio);
case 'chipmunk filter'
nsemitones = 9;
audio = shiftPitch(audio,nsemitones);
case 'normalize'
audio = audio/max(abs(audio(:)));
end
end
app.procFxAudioData = audio;
end
Here is the callback function for one of the filters. The others follow the same logic:
function highpassButtonPushed(app, event)
if app.highpassButtonPushed.Value == 1
app.activeTransformations{end+1} = 'highpass';
else
app.activeTransformations = setdiff(app.activeTransformations, {'highpass'},'stable');
end
app.applyActiveTransformations();
end

10 Comments

Which line is it complaining about, thinking that it has too many outputs ?
Please show us the complete error message. That means all of the red text.
Here is the complete error message:
Error using newestAudioProjDec6/highpassButtonPushed
Too many output arguments.
Error in newestAudioProjDec6/highpassButtonPushed (line 1742)
disp(app.highpassButtonPushed.Value)
Error in matlab.apps.AppBase>@(source,event)executeCallback(ams,app,callback,requiresEventData,event) (line 62)
newCallback = @(source, event)executeCallback(ams, ...
Error while evaluating Button PrivateButtonPushedFcn.
That is not the complete message.
The implication is that somehow app.highpassButtonPushed has become non-scalar, so app.highpassButtonPushed.Value is structure expansion (or object expansion) resulting in multiple parameters passed to disp()
However: the highpassButtonPushed code that you posted does not contain any disp() in it, so either you did not post the correct code or else the wrong version of the code is (somehow) executing.
Here is all of the code related to the FX panel:
properties:
origFxAudioData
procFxAudioData
FxFs
fxAudioPlayer
activeTransformations
function applyActiveTransformations(app)
disp(app.activeTransformations)
audio = app.origFXAudioData;
for i = 1:length(app.activeTransformations)
switch app.activeTransformations{i}
case 'highpass'
cutoffFreq = (app.FxFs/2) - 100;
normalizedCutoff = cutoffFreq/(app.FxFs/2);
[b,a]=butter(4, normalizedCutoff, ...
'high');
audio = filtfilt(b,a,audio);
case 'lowpass'
cutoffFreq = (app.FxFs/2) - 5;
[b,a] = butter(4, cutoffFreq / (app.FxFs/2), 'low');
audio = filtfilt(b,a,audio) ;
case 'bandpass'
lowCutoff=(app.FxFs/2) - 10;
highCutoff = (app.FxFs/2) - 500;
[b,a]= butter(4, [lowCutoff, highCutoff]/(app.FxFs/2),'bandpass');
audio = filtfilt(b,a,audio);
case 'chipmunk filter'
nsemitones = 9;
audio = shiftPitch(audio,nsemitones);
case 'normalize'
audio = audio/max(abs(audio(:)));
end
end
app.procFxAudioData = audio;
end
in the startup fnc:
app.activeTransformations = {};
function highpassButtonPushed(app, event)
disp(app.highpassButtonPushed.Value)
disp(app.activeTransformations)
if app.highpassButtonPushed.Value == 1
app.activeTransformations{end+1} = 'highpass';
else
app.activeTransformations = setdiff(app.activeTransformations, {'highpass'},'stable');
end
app.applyActiveTransformations();
end
% Button pushed function: lowpassButton
function lowpassButtonPushed(app, event)
if app.lowpassButtonPushed.Value == 1
app.activeTransformations{end+1} = 'lowpass';
else
app.activeTransformations = setdiff(app.activeTransformations, {'lowpass'},'stable');
end
app.applyActiveTransformations();
end
% Button pushed function: bandpassButton
function bandpassButtonPushed(app, event)
if app.bandpassButtonPushed.Value == 1
app.activeTransformations{end+1} = 'bandpass';
else
app.activeTransformations = setdiff(app.activeTransformations, {'bandpass'},'stable');
end
app.applyActiveTransformations();
end
% Button pushed function: chipmunkfilterButton
function chipmunkfilterButtonPushed(app, event)
if app.chipmunkfilterButtonPushed.Value == 1
app.activeTransformations{end+1} = 'chipmunk filter';
else
app.activeTransformations = setdiff(app.activeTransformations, {'chipmunk filter'},'stable');
end
app.applyActiveTransformations();
end
% Button pushed function: normalizeButton
function normalizeButtonPushed(app, event)
if app.normalizeButtonPushed.Value == 1
app.activeTransformations{end+1} = 'normalize';
else
app.activeTransformations = setdiff(app.activeTransformations, {'normalize'},'stable');
end
app.applyActiveTransformations();
end
For the purposes of testing, on the line before
disp(app.highpassButtonPushed.Value)
insert
HIGHBUTTONPUSHED = app.highpassButtonPushed;
whos HIGHBUTTONPUSHED
and tell us what the result is at the time of the error.
here is the error:
Error using riasupdates/highpassButtonPushed
Too many output arguments.
Error in riasupdates/highpassButtonPushed (line 1742)
HIGHBUTTONPUSHED = app.highpassButtonPushed;
Error in matlab.apps.AppBase>@(source,event)executeCallback(ams,app,callback,requiresEventData,event) (line 62)
newCallback = @(source, event)executeCallback(ams, ...
Error while evaluating Button PrivateButtonPushedFcn.
Hmmm, change
HIGHBUTTONPUSHED = app.highpassButtonPushed;
whos HIGHBUTTONPUSHED
to
whos app event
for testing purposes.
At the moment, it appears that app is non-scalar and might possibly not be an app at all.
here is the new error:
To get started, type doc.
For product information, visit www.mathworks.com.
Name Size Bytes Class Attributes
app 1x1 8 riasupdates
event 1x1 8 matlab.ui.eventdata.ButtonPushedData
Error using riasupdates/highpassButtonPushed
Too many output arguments.
Error in riasupdates/highpassButtonPushed (line 1743)
disp(app.highpassButtonPushed.Value)
Error in matlab.apps.AppBase>@(source,event)executeCallback(ams,app,callback,requiresEventData,event) (line 62)
newCallback = @(source, event)executeCallback(ams, ...
Error while evaluating Button PrivateButtonPushedFcn.

Sign in to comment.

 Accepted Answer

You define
function highpassButtonPushed(app, event)
which declares highpassButtoPushed as a function that returns no outputs.
You call
disp(app.highpassButtonPushed.Value)
That asks to invoke the function highpassButtonPushed and return some value from that, and index that output at field Value . But highpassButtonPushed is a function that returns no outputs, so the results of it cannot be processed.
You might possibly be wanting to do
disp(app.highpassButton.Value)

2 Comments

When I delete
disp(app.highpassButtonPushed.Value)
I'm still receiving this error.
Error using riasupdates/highpassButtonPushed
Too many output arguments.
Error in riasupdates/highpassButtonPushed (line 1743)
if app.highpassButtonPushed.Value == 1
Error in matlab.apps.AppBase>@(source,event)executeCallback(ams,app,callback,requiresEventData,event) (line 62)
newCallback = @(source, event)executeCallback(ams, ...
Error while evaluating Button PrivateButtonPushedFcn.
"I'm still receiving this error."
Because you still have the same bug here:
if app.highpassButtonPushed.Value == 1
which should be replaced with this:
if app.highpassButton.Value == 1

Sign in to comment.

More Answers (0)

Categories

Find more on Audio I/O and Waveform Generation in Help Center and File Exchange

Products

Release

R2023b

Asked:

Ria
on 7 Dec 2024

Commented:

on 8 Dec 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!