Hi
I´m trying to implement a x4 oversampling process but I´m having difficulties on how let the SampleRateConverter sytem object knows about sample rate used.
When compiling the example attached for plugin generation, the following error shows up: “Failed to compute constant value for nontunable property 'SampleRate'. In code generation, nontunable properties can only be assigned constant values.”
I'd really appreciate if someone can give me a hint on how fix/treat this.
Br
Pablo
classdef (StrictDefaults)DistoLab_Test2 < matlab.System & audioPlugin properties GainDisto=0; Input=0; Volume=0; end properties (Constant, Hidden) % Define the plugin interface
PluginInterface = audioPluginInterface( ... 'InputChannels',2,... 'OutputChannels',2,... 'PluginName','DistoLab_Test2',... audioPluginParameter('Volume', ... 'DisplayName', 'Out', ... 'DisplayNameLocation','none',... 'Label','dB', ... 'Mapping', { 'lin', -15, 15}, ... 'Style', 'rotaryknob', 'Layout', [4 6]),... audioPluginParameter('Input', ... 'DisplayName', 'In', ... 'DisplayNameLocation','none',... 'Label','dB', ... 'Mapping', { 'lin', -5, 5}, ... 'Style', 'rotaryknob', 'Layout', [4 3]),... audioPluginParameter('GainDisto', ... 'DisplayName', 'Saturation', ... 'DisplayNameLocation','none',... 'Style', 'rotaryknob', 'Layout', [4,5],... 'Mapping', { 'lin', 0, 10}, ... 'Filmstrip','knob_67_black.png', ... %<-- 'FilmstripFrameSize',[80,80]), ... audioPluginGridLayout('RowHeight', [30 90 10 100 37], ... 'ColumnWidth', [30 100 100 20 100 100 20 80 80 80 60], 'Padding', [10 10 10 10])); end properties (Access = private) Up4; Down4; end methods % Constructor
function plugin = DistoLab_Test2 plugin.Up4=dsp.SampleRateConverter; plugin.Down4=dsp.SampleRateConverter; calculateSampleRates(plugin); end end methods(Access = protected) function out = stepImpl(plugin, in) inadjusted=in*(10^(plugin.Input/20)); % Incoming signal adjusted by Input Gain
%SampleRateConverter x4 process
v=step(plugin.Up4,inadjusted); disto=(v*plugin.GainDisto).^5; % input distorted
outdisto=(disto)*(10^(plugin.Volume/20)); out = step(plugin.Down4,outdisto); end function resetImpl(plugin) reset(plugin.Up4); reset(plugin.Down4); end function calculateSampleRates(plugin) plugin.Up4.InputSampleRate=getSampleRate(plugin); plugin.Up4.OutputSampleRate=4*getSamplerate(plugin); plugin.Down4.InputSampleRate=4*getSampleRate(plugin); plugin.Down4.OutputSampleRate=getSampleRate(plugin); end end end
Best Answer