-
Couldn't load subscription status.
- Fork 32
Open
Labels
Description
NETCDFload crashes when loading a SOFA file, with strings having dimension MSI. Just copy and run the following code to reproduce issue. No data required, just the SOFA Toolbox.
E = 1 -> not working:
%% IS NOT WORKING: FreeFieldDirectivityFIR with 1 Emitter
SOFAstart;
N = 48000; % number of dummy samples
clear str;
E = 1; % define number of emitters
Obj=SOFAgetConventions('FreeFieldDirectivityFIR');
Obj.Data.IR = zeros(Obj.API.M,Obj.API.R,N); % defines mrn
Obj.Data.Delay = zeros(Obj.API.M,Obj.API.R); % mandatory; must be IR, MR
Obj.EmitterPosition = repmat([0 0 0], E, 1); % defines e; must be eCI, eCM
Obj = SOFAupdateDimensions(Obj);
for ii=1:Obj.API.E
str{ii,1}=['String' num2str(round(rand(1,1)*10000))];
end
Obj = SOFAaddVariable(Obj,'EmitterDescriptions','MSI',str); % can be MSI, ESI, MES
% Obj = SOFAaddVariable(Obj,'EmitterDescriptions','ESI',str); % can be MSI, ESI, MES - but will be converted to MSI
% Obj = SOFAaddVariable(Obj,'EmitterDescriptions','MES',str); % can be MSI, ESI, MES - but will be converted to MSI
%% SAVE AND LOAD
Obj = SOFAupdateDimensions(Obj);
disp(Obj.EmitterDescriptions);
SOFAsave('test.sofa',Obj);
Obj2=SOFAload('test.sofa'); % crashes in NETCDFload
E = 2 -> working:
%% IS WORKING: FreeFieldDirectivityFIR with 2 Emitters
SOFAstart;
N = 48000; % number of dummy samples
clear str;
E = 2; % define number of emitters
Obj=SOFAgetConventions('FreeFieldDirectivityFIR');
Obj.Data.IR = zeros(Obj.API.M,Obj.API.R,N); % defines mrn
Obj.Data.Delay = zeros(Obj.API.M,Obj.API.R); % mandatory; must be IR, MR
Obj.EmitterPosition = repmat([0 0 0], E, 1); % defines e; must be eCI, eCM
Obj = SOFAupdateDimensions(Obj);
for ii=1:Obj.API.E
str{ii,1}=['String' num2str(round(rand(1,1)*10000))];
end
Obj = SOFAaddVariable(Obj,'EmitterDescriptions','ESI',str); % can be MSI, ESI, MES
%% SAVE AND LOAD
Obj = SOFAupdateDimensions(Obj);
disp(Obj.EmitterDescriptions);
SOFAsave('test.sofa',Obj);
Obj2=SOFAload('test.sofa');
This is where the crash happens in NETCDFload.m in E = 1 case;
