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 commentaires

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.
Ria
Ria le 7 Déc 2024
Modifié(e) : Ria le 7 Déc 2024
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.
Ria
Ria le 7 Déc 2024
Modifié(e) : Walter Roberson le 7 Déc 2024
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.

Connectez-vous pour commenter.

 Réponse acceptée

Walter Roberson
Walter Roberson le 8 Déc 2024
Modifié(e) : Walter Roberson le 8 Déc 2024
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 commentaires

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Audio I/O and Waveform Generation dans Centre d'aide et File Exchange

Produits

Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by