Error in a testbench generated file using validateAudioPlugin

4 Ansichten (letzte 30 Tage)
While validating an audio plugin, I get the following error
Generating mex file 'testbench_HeadPhoneSimulator_ver2_mex.mexmaci64'... Cannot allocate this handle object. For code generation, a handle object
allocated inside a loop cannot be referenced outside of the loop.
More information
Error in ==> testbench_HeadPhoneSimulator_ver2 Line: 58 Column: 9
Warning: Failed to save report information.
Code generation failed: View Error Report
Error using coder.internal.generateAudioPlugin
Error in validateAudioPlugin
the thing that I don't understand is the fact that the error is in a file that's not written by me, but in a file made by the testbench itself.
I think that the function that provokes the error is the following:
function updateFilters(plugin,n,flag)
if ~flag
plugin.Filter_L = dsp.FrequencyDomainFIRFilter('Numerator', plugin.IR_bank(:,1,n).', ...
'PartitionForReducedLatency', true, 'PartitionLength', 1024);
plugin.Filter_R = dsp.FrequencyDomainFIRFilter('Numerator', plugin.IR_bank(:,2,n).', ...
'PartitionForReducedLatency', true, 'PartitionLength', 1024);
else
num = zeros(1,1024);
num(1) = 1;
plugin.Filter_L = dsp.FrequencyDomainFIRFilter('Numerator', num, ...
'PartitionForReducedLatency', true, 'PartitionLength', 1024);
plugin.Filter_R = dsp.FrequencyDomainFIRFilter('Numerator', num, ...
PartitionForReducedLatency', true, 'PartitionLength', 1024);
end
end
if needed I will provide the complete code
  6 Kommentare
jibrahim
jibrahim am 8 Feb. 2024
Yes, please also attach ImpulseResponseLoader or equivalent code
DARIO BENVEGNÙ
DARIO BENVEGNÙ am 8 Feb. 2024
Bearbeitet: DARIO BENVEGNÙ am 8 Feb. 2024
this should be enough. thank you.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

jibrahim
jibrahim am 8 Feb. 2024
Bearbeitet: jibrahim am 8 Feb. 2024
Hi Dario,
Thanks for the reproduction steps. This helps.
The problem is in the method updateFilters. The method recreates the frequency-domain filters every time it is called. This is not supported in this context in codegen (those are the objects validation is complaining are created in a loop).
You probably want to tune these objects instead of recreating them, i.e.
function updateFilters(plugin,n,flag)
if ~flag
plugin.Filter_L.Numerator = plugin.IR_bank(:,1,n).';
plugin.Filter_R.Numerator = plugin.IR_bank(:,2,n).';
else
num = zeros(1,1024);
num(1) = 1;
plugin.Filter_L.Numerator = num;
plugin.Filter_R.Numerator = num;
end
end
There is another issue in process, where output was first set to empty, and then its size is changed to the size of input. Code generation does not like this size change. This code fixes the issue:
function output = process(plugin,input) % funzione di elaborazione
output = input;
if ~plugin.bypass
output(:,1) = step(plugin.Filter_L,input(:,1));
output(:,2) = step(plugin.Filter_R,input(:,2));
end
end
With those two changes, you should be able to validate and generate your plugin.

Weitere Antworten (0)

Kategorien

Mehr zu Simulation, Tuning, and Visualization finden Sie in Help Center und File Exchange

Produkte


Version

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by