Commit 9bf79145 authored by emerit's avatar emerit
Browse files

update

parent 46e15627
Loading
Loading
Loading
Loading
Loading
+78 −18
Original line number Diff line number Diff line
@@ -41,7 +41,18 @@ clc;
%% Add path to routines needed scripts
addpath('./matlab_hrir_generation_scripts/');

% mc_mode 5.1    = MCMASA  MCMASA MCMASA MCMASA PARAMMC  PARAMMC  PARAMMC   MCT       MCT      MCT      MCT     MCT     MCT     MCT 
% renderer       = param   param  param  param  fastconv fastconv fastconv  crend     crend    crend    crend   crend   crend   crend
% mc_mode 7.1    = MCMASA  MCMASA MCMASA MCMASA PARAMMC  PARAMMC  PARAMMC   MCT       MCT      MCT      MCT     MCT     MCT     MCT 
% renderer       = param   param  param  param  fastconv fastconv fastconv  fastconv  crend    crend    crend   crend   crend   crend
% mc_mode 7.1.4  = MCMASA  MCMASA MCMASA MCMASA PARAMMC  PARAMMC  PARAMMC   MCT       MCT      MCT      MCT     MCT     MCT     MCT 
% renderer       = param   param  param  param  param    param    param     param     fastconv fastconv crend   crend   crend   crend
% sba renderer   = param   param  param  param  param    param    param     fastconv  fastconv fastconv fastconv fastconv   fastconv   fastconv
     bitrates   = [13200,  16400, 24400, 32000, 48000,   64000,   80000,    96000,    128000,  160000,  192000, 256000, 384000, 512000];
bitrates_MC_5_1 = [32000,80000, 256000];
bitrates_MC_7_1_4 = [80000, 160000,256000];
bitrates_MC_TDREND = [128000, 256000];
bitrates_SBA = [80000, 96000];


inFilesPath = {
@@ -56,34 +67,83 @@ inFilesPath = {
    {'5_1','../testv/6_Channel_ID_48khz_pn_duplicated.wav'},...
    {'5_1','../testv/6_Channel_ID_48khz_pn_different.wav'},...
    {'5_1','../testv/6_Channel_ID_48khz.wav'},...
    {'7_1_4','../testv/FL_FR_C_LFE_Lss_Rss_Ls_Rs_Lv_Rv_Lvr_Rvr_714_48k.wav'},...
    {'5_1', '../testv/6_Channel_ID_48khz_pn.wav'}, ...
    {'5_1', '../testv/stv51MC48c.wav'}, ...
    {'7_1_4','../testv/FL_FR_C_LFE_Lss_Rss_Ls_Rs_Lv_Rv_Lvr_Rvr_714_48k.wav'},...
    {'7_1_4', '../testv/stv714MC48c.wav'}};
                                                                                            

    level_hrir = zeros(size(inFilesPath,2),size(bitrates,2));
    level_hrir_bin = zeros(size(inFilesPath,2),size(bitrates,2));
    gain_hrir = zeros(size(inFilesPath,2),size(bitrates,2));
    gain_hrir_bin = zeros(size(inFilesPath,2),size(bitrates,2));
    level_hoa2bin = zeros(3,size(bitrates_SBA,2));
    level_hoa2bin_bin = zeros(3,size(bitrates_SBA,2));
    gain_hoa2bin = zeros(3,size(bitrates_SBA,2));
    gain_hoa2bin_bin = zeros(3,size(bitrates_SBA,2));

% sba parambin fastconv

for ind=1:size(inFilesPath,2)
    if (contains(inFilesPath{ind}{1}, 'OA'))
        [level_hoa2bin_bin(ind,:), level_hoa2bin(ind,:), gain_hoa2bin(ind,:), gain_hoa2bin_bin(ind,:)]= levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates_SBA, 'BINAURAL');
    %    disp("levels hrir " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{3}{1}) + " " + num2str(inFilesPath{ind}{3}{2})+ " " + num2str(inFilesPath{ind}{3}{3})+ " " + num2str(inFilesPath{ind}{3}{4}));
        disp("levels hoa2bin               " + inFilesPath{ind}{2} + " : " + num2str(level_hoa2bin(ind,:)));
        disp("levels hoa2bin with bin corr " + inFilesPath{ind}{2} + " : " + num2str(level_hoa2bin_bin(ind,:)));
    end
end

    % td rend
    level_tdrend = zeros(10,size(bitrates_MC_TDREND,2));
    level_tdrend_bin = zeros(10,size(bitrates_MC_TDREND,2));
    gain_tdrend = zeros(10,size(bitrates_MC_TDREND,2));
    gain_tdrend_bin = zeros(10,size(bitrates_MC_TDREND,2));

for ind=1:size(inFilesPath,2)
    if (contains(inFilesPath{ind}{1}, '5_1'))
        [level_tdrend_bin(ind,:), level_tdrend(ind,:), gain_tdrend_bin(ind,:), gain_tdrend(ind,:)]= levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates_MC_TDREND, '-t ../testv/headRot_no_rot.csv BINAURAL');
    %    disp("levels hrir " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{3}{1}) + " " + num2str(inFilesPath{ind}{3}{2})+ " " + num2str(inFilesPath{ind}{3}{3})+ " " + num2str(inFilesPath{ind}{3}{4}));
        disp("levels tdrend hrir               " + inFilesPath{ind}{2} + " : " + num2str(level_tdrend(ind,:)));
        disp("levels tdrend hrir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(level_tdrend_bin(ind,:)));
    end
end

% parambin fastconv crend
level_hrir = zeros(12,size(bitrates_MC_5_1,2));
level_hrir_bin = zeros(12,size(bitrates_MC_5_1,2));
gain_hrir = zeros(12,size(bitrates_MC_5_1,2));
gain_hrir_bin = zeros(12,size(bitrates_MC_5_1,2));

for ind=1:size(inFilesPath,2)
    [inFilesPath{ind}{3}{1},inFilesPath{ind}{3}{2},inFilesPath{ind}{3}{3},inFilesPath{ind}{3}{4}]= levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates, 'BINAURAL');
    if (contains(inFilesPath{ind}{1}, '7_1_4'))
        [level_hrir_bin(ind,:), level_hrir(ind,:), gain_hrir_bin(ind,:), gain_hrir(ind,:)]= levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates_MC_7_1_4, 'BINAURAL');
    %    disp("levels hrir " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{3}{1}) + " " + num2str(inFilesPath{ind}{3}{2})+ " " + num2str(inFilesPath{ind}{3}{3})+ " " + num2str(inFilesPath{ind}{3}{4}));
        disp("levels hrir               " + inFilesPath{ind}{2} + " : " + num2str(level_hrir(ind,:)));
        disp("levels hrir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(level_hrir_bin(ind,:)));
    end
    if (contains(inFilesPath{ind}{1}, '5_1'))
        [level_hrir_bin(ind,:), level_hrir(ind,:), gain_hrir_bin(ind,:), gain_hrir(ind,:)]= levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates_MC_5_1, 'BINAURAL');
    %    disp("levels hrir " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{3}{1}) + " " + num2str(inFilesPath{ind}{3}{2})+ " " + num2str(inFilesPath{ind}{3}{3})+ " " + num2str(inFilesPath{ind}{3}{4}));
    disp("levels hrir               " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{3}{2}));
    disp("levels hrir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{3}{1}));
        disp("levels hrir               " + inFilesPath{ind}{2} + " : " + num2str(level_hrir(ind,:)));
        disp("levels hrir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(level_hrir_bin(ind,:)));        
    end
end

    level_brir = zeros(size(inFilesPath,2),size(bitrates_MC_5_1,2));
    level_brir_bin = zeros(size(inFilesPath,2),size(bitrates_MC_5_1,2));
    gain_brir = zeros(size(inFilesPath,2),size(bitrates_MC_5_1,2));
    gain_brir_bin = zeros(size(inFilesPath,2),size(bitrates_MC_5_1,2));

    level_brir = zeros(size(inFilesPath,2),size(bitrates,2));
    level_brir_bin = zeros(size(inFilesPath,2),size(bitrates,2));
    gain_brir = zeros(size(inFilesPath,2),size(bitrates,2));
    gain_brir_bin = zeros(size(inFilesPath,2),size(bitrates,2));

for ind=1:size(inFilesPath,2)
    [inFilesPath{ind}{4}{1},inFilesPath{ind}{4}{2},inFilesPath{ind}{4}{3},inFilesPath{ind}{4}{4}] = levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates, 'BINAURAL_ROOM_IR');
    if (contains(inFilesPath{ind}{1}, '7_1_4'))
        [level_brir_bin(ind,:), level_brir(ind,:), gain_brir_bin(ind,:), gain_brir(ind,:)] = levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates_MC_7_1_4, 'BINAURAL_ROOM_IR');
    %    disp("levels brir " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{4}{1}) + " " + num2str(inFilesPath{ind}{4}{2})+ " " + num2str(inFilesPath{ind}{4}{3})+ " " + num2str(inFilesPath{ind}{4}{4}));
    disp("levels brir               " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{4}{2}));
    disp("levels brir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{4}{1}));
        disp("levels brir               " + inFilesPath{ind}{2} + " : " + num2str(level_brir(ind,:)));
        disp("levels brir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(level_brir_bin(ind,:)));
    end
    if (contains(inFilesPath{ind}{1}, '5_1'))
        [level_brir_bin(ind,:), level_brir(ind,:), gain_brir_bin(ind,:), gain_brir(ind,:)] = levelsBinauralizeAudioWithIvas(inFilesPath{ind}{2}, inFilesPath{ind}{1},bitrates_MC_5_1, 'BINAURAL_ROOM_IR');
    %    disp("levels brir " + inFilesPath{ind}{2} + " : " + num2str(inFilesPath{ind}{4}{1}) + " " + num2str(inFilesPath{ind}{4}{2})+ " " + num2str(inFilesPath{ind}{4}{3})+ " " + num2str(inFilesPath{ind}{4}{4}));
        disp("levels brir               " + inFilesPath{ind}{2} + " : " + num2str(level_brir(ind,:)));
        disp("levels brir with bin corr " + inFilesPath{ind}{2} + " : " + num2str(level_brir_bin(ind,:)));
    end
end

+3 −1
Original line number Diff line number Diff line
function [binauralSignal, gain_bin, gain] = binauralizeAudio(audioFile, matFile )
function [level_bin, level, gain_bin, gain] = levelsBinauralizeAudio(audioFile, matFile )

    debug = 0;

@@ -163,6 +163,8 @@ function [binauralSignal, gain_bin, gain] = binauralizeAudio(audioFile, matFile
    delete(pcm_in);
    delete(pcm_out);    
    
    level_bin = lev_out_bin;
    level = lev_out;
    gain = 20*log10(fac_output);
    gain_bin = 20*log10(fac_output_bin);
        
+119 −0
Original line number Diff line number Diff line
function [gain_bin, gain] = binauralizeAudio(audioFile,spk_layout )
function [level_bin, level, gain_bin, gain] = levelsBinauralizeAudioWithIvas(audioFile,spk_layout, bitRates, output_format )

    BINAURAL_LFE_GAIN = 10 ^ (5.5 / 20);
    BINAURAL_LFE_GAIN = 0;
@@ -48,7 +48,9 @@ function [gain_bin, gain] = binauralizeAudio(audioFile,spk_layout )
    [audioMulticanal, Fs] = audioread(audioFile);

    % put lfe to zero
    if spk_config.lfe_index >= 0
        audioMulticanal(:,spk_config.lfe_index) = zeros(1,size(audioMulticanal,1));
    end

    audioMulticanal = audioMulticanal * fac_input;

@@ -56,31 +58,25 @@ function [gain_bin, gain] = binauralizeAudio(audioFile,spk_layout )
    audiowrite(inputFile, audioMulticanal, Fs);

    numChannels = size(audioMulticanal, 2);
    switch spk_layout
        case {'mono_l', 'MONO_L', 'mono_r', 'MONO_C','mono_ls', 'MONO_LS'}
            expectedChannels = 1; %
        case {'5.1', '5_1'}
            expectedChannels = 6; % 7.1
        case {'7.1', '7_1'}
            expectedChannels = 8; % 7.1
        case {'5.1.2', '5_1_2'}
            expectedChannels = 8; % 5.1.2
        case {'5.1.4', '5_1_4'}
            expectedChannels = 10; % 5.1.4
        case {'7.1.4', '7_1_4'}
            expectedChannels = 12; % 7.1.4
        otherwise
            error('audio format not supported.');
    end

    expectedChannels = spk_config.nb_channel;
    
    if numChannels ~= expectedChannels
        error('number of channels of audio file and matfile not consistent.');
    end

    bitrate = 512000;
    coded_file = [erase(inputFile,'.wav') '.bin'];
    command = ['..' filesep() '..' filesep() 'IVAS_cod' ' -MC ' spk_layout ' ' ...
                   num2str(bitrate) ' 48 ' inputFile  ' ' coded_file];
    input_format = '';

    if spk_config.sba_order > 0
        input_format = ['-SBA ' num2str(spk_config.sba_order)];
    else
        input_format = ['-MC ' spk_layout];
    end
    
    for ind = 1 : size(bitRates,2)
        coded_file = [erase(inputFile,'.wav')  '.' num2str(bitRates(ind))];
        command = ['..' filesep() '..' filesep() 'IVAS_cod ' input_format ' ' ...
                       num2str(bitRates(ind)) ' 48 ' inputFile  ' ' coded_file];
    
        [status, cmdout] = system(command);
            if status ~= 0
@@ -88,10 +84,9 @@ function [gain_bin, gain] = binauralizeAudio(audioFile,spk_layout )
                return
            end
    
    delete(inputFile);
        outputFile = [erase(inputFile,'.wav') '_-26LKFS_bin.wav'];
    
    command = ['..' filesep() '..' filesep() 'IVAS_dec' ' BINAURAL 48 ' coded_file ' ' outputFile];
        command = ['..' filesep() '..' filesep() 'IVAS_dec ' output_format ' 48 ' coded_file ' ' outputFile];
    
        [status, cmdout] = system(command);
            if status ~= 0
@@ -106,12 +101,18 @@ function [gain_bin, gain] = binauralizeAudio(audioFile,spk_layout )
        
        pcm_out = [erase(pcm_in,'.pcm') '_out.pcm'];
    
    [lev_out,lev_out_output,fac_output] = bs1770(pcm_in,pcm_out,2, target_lev, '00');
    [lev_out_bin,lev_out_output_bin,fac_output_bin] = bs1770(pcm_in,pcm_out,2, target_lev, '00', true);
        [lev_out(ind),lev_out_output(ind),fac_output(ind)] = bs1770(pcm_in,pcm_out,2, target_lev, '00');
        [lev_out_bin(ind),lev_out_output_bin(ind),fac_output_bin(ind)] = bs1770(pcm_in,pcm_out,2, target_lev, '00', true);
    
        delete(pcm_in);
        delete(pcm_out);    

    end
    
    delete(inputFile);
    
    level_bin = lev_out_bin;
    level = lev_out;
    gain = 20*log10(fac_output);
    gain_bin = 20*log10(fac_output_bin);