From f6bcadcfb46ae7a240c2140c5b92230feef7d26d Mon Sep 17 00:00:00 2001 From: Marco Berzborn Date: Sat, 4 May 2019 19:21:04 +0200 Subject: [PATCH] very basic version of writing itaAudio objects to sofa files --- .../DataAudio_IO/ita_write/ita_write_sofa.m | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/kernel/DataAudio_IO/ita_write/ita_write_sofa.m b/kernel/DataAudio_IO/ita_write/ita_write_sofa.m index 0b75cf4..0a0dad2 100644 --- a/kernel/DataAudio_IO/ita_write/ita_write_sofa.m +++ b/kernel/DataAudio_IO/ita_write/ita_write_sofa.m @@ -82,6 +82,16 @@ switch(sArgs.dataType) % sofaObj = SOFAgetConventions('SingleRoomDRIR'); % sofaObj = createSofaDRIR(sofaObj,data,userDataFields); % sofaObj = ita_sofa_setCoordinates(sofaObj,data,'channelCoordinateType','ReceiverPosition'); + case 'GeneralFIR' + sofaObj = SOFAgetConventions('GeneralFIR'); + sofaObj = createSofaFIR(sofaObj,data,userDataFields); % userdatafields are generated from sofaObj.userdata + sofaObj = ita_sofa_setCoordinates(sofaObj, data,'channelCoordinateType','ReceiverPosition'); + if ~isempty(sArgs.userdata) % user data are replaced by the struct + fNames = fieldnames(sArgs.userdata); + for idxFN = 1:numel(fNames) + sofaObj.(fNames{idxFN}) = sArgs.userdata.(fNames{idxFN}); + end + end otherwise error('ITA_WRITE_SOFA: Only HRTF Type is defined'); end @@ -98,6 +108,35 @@ result = 1; end +function sofaObj = createSofaFIR(sofaObj, data, userDataFields) + +if ~isa(data, 'itaAudio') + ita_verbose_info('I only export itaAudio objects', 0); + return; +end + +sofaObj.Data.IR = zeros(1, data.nChannels, data.nSamples); + +sofaObj.Data.IR(1,: ,:) = data.timeData.'; +sofaObj.Data.Delay = zeros(1, data.nChannels); +sofaObj.Data.SamplingRate = data.samplingRate; + +userData = data.userData; + +for index = 1:length(userDataFields) + if isfield(userData,userDataFields{index}) + sofaObj.(userDataFields{index}) = userData.(userDataFields{index}); + end +end + +if ~isempty(data.objectCoordinates.cart) + sofaObj.ReceiverPosition = data.objectCoordinates.cart; +end + +end + + + function sofaObj = createSofaHRTF(sofaObj,data,userDataFields) if ~isa(data,'itaHRTF') -- GitLab