Azzera filtri
Azzera filtri

Error in a testbench generated file using validateAudioPlugin

1 visualizzazione (ultimi 30 giorni)
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 Commenti
jibrahim
jibrahim il 8 Feb 2024
Yes, please also attach ImpulseResponseLoader or equivalent code

Accedi per commentare.

Risposta accettata

jibrahim
jibrahim il 8 Feb 2024
Modificato: jibrahim il 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.

Più risposte (0)

Categorie

Scopri di più su Audio I/O and Waveform Generation in Help Center e File Exchange

Prodotti


Release

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by