Commit eef2a425 authored by kinuthia's avatar kinuthia
Browse files

fix binary parsing of directivity with no roomaccoustics

- update script to parse config file containing only directivity parameters
- fix crash when no config file contains no directivity parameters
- update config_directivity.cfg
parent ee40262a
Loading
Loading
Loading
Loading
Loading
+304 −294
Original line number Diff line number Diff line
@@ -1429,13 +1429,18 @@ static ivas_error RenderConfigReader_readBinary(
    {
        return error;
    }

#ifndef CONTROL_METADATA_DIRECTIVITY
    /* Just return in case no acoustic environment data available */
    if ( value == false )
    {
        return IVAS_ERR_OK;
    }

#endif
#ifdef CONTROL_METADATA_DIRECTIVITY
    /* acoustic environment data available */
    if ( value == true )
    {
#endif
        /****************************/
        /* Read the frequency grids */
        /****************************/
@@ -1810,8 +1815,8 @@ static ivas_error RenderConfigReader_readBinary(
            }
#endif
        }

#ifdef CONTROL_METADATA_DIRECTIVITY
    }
    /**********************************/
    /* Read the directivity patterns */
    /**********************************/
@@ -1880,12 +1885,6 @@ static ivas_error RenderConfigReader_readBinary(
            }
        }
    }
    else
    {
        pRenderConfigReader->pDP[n].pDirectivity[0] = 360.0f;
        pRenderConfigReader->pDP[n].pDirectivity[1] = 360.0f;
        pRenderConfigReader->pDP[n].pDirectivity[2] = 1.0f;
    }
#endif

    /* Cleanup */
@@ -2975,11 +2974,22 @@ ivas_error RenderConfigReader_getDirectivity(
    {
        return IVAS_ERR_UNEXPECTED_NULL_POINTER;
    }

    if (pRenderConfigReader->pDP == NULL)
    {
        for ( n = 0; n < MAX_NUM_OBJECTS; n++ )
        {
            directivity[n * 3] = 360.0f;
            directivity[n * 3 + 1] = 360.0f;
            directivity[n * 3 + 2] = 1.0f;
        }
    }
    else
    {
        for ( n = 0; n < MAX_NUM_OBJECTS; n++ )
        {
            mvr2r( pRenderConfigReader->pDP[id[n]].pDirectivity, directivity + ( n * 3 ), 3 );
        }
    }
    return IVAS_ERR_OK;
}

+17 −0
Original line number Diff line number Diff line
@@ -620,6 +620,22 @@ def generate_reverb_payload_equivalent_to_rend_config_renderer_directivity_cfg()
    data.tofile(file)
    file.close()

def generate_reverb_payload_equivalent_to_config_directivity_cfg():
    # based on config_directivity_cfg.cfg
    # note that because of encoding, resolution is lost and behaviour may not be bit-exact compared to .cfg file based values
    data = bitarray(
        '0'                                       #   hasAcEnv
        + '1'                                     #   hasDirectivity
        + get_id_code(1)                          #   Number of directivity patterns
        + get_id_code(0)                          #   directivity ID
        + get_angle_code(0.0)
        + get_angle_code(360.0)
        + get_outer_attenuation_code(0.2512)
        , endian='big')

    file = open('config_directivity.dat', 'wb')
    data.tofile(file)
    file.close()

def generate_reverb_payload_equivalent_to_rend_config_hospital_patientroom_cfg():
    # based on config_hospital_patientroom.cfg
@@ -709,6 +725,7 @@ if __name__ == "__main__":
    generate_reverb_payload_equivalent_to_rend_config_hospital_patientroom_cfg()
    generate_reverb_payload_equivalent_to_rend_config_recreation_cfg()
    generate_reverb_payload_equivalent_to_rend_config_renderer_directivity_cfg()
    generate_reverb_payload_equivalent_to_config_directivity_cfg()
    

    #generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_reflections_no_listener_origin()
+60 −54
Original line number Diff line number Diff line
@@ -86,16 +86,22 @@ def parse_reverb_text_configuration_and_generate_binary_payload(file):
            sections[section_name] = config[section_name]

    # parse room acoustics
    if 'roomAcoustics' in sections:
    if sections['roomAcoustics']:
        frequencyGridCount = eval_option(sections['roomAcoustics']['frequencyGridCount'])
        acousticEnvironmentCount = eval_option(sections['roomAcoustics']['acousticEnvironmentCount'])
        assert frequencyGridCount == len(sections['frequencyGrid'])
        assert acousticEnvironmentCount == len(sections['acousticEnvironment'])

    hasAcEnv = len(sections['roomAcoustics']) > 0                       # hasAcEnv (see IVAS acoustic environment payload syntax document)
    if hasAcEnv:
        data = bitarray('1', endian='big')
    else:
        data = bitarray('0', endian='big')

    if hasAcEnv:
        # parse frequency grids
        data = bitarray(
          '1'                                                                       # hasAcEnv (see IVAS acoustic environment payload syntax document)
        + get_count_or_index_code(len(sections['frequencyGrid'])),                  # fgdNrGrids
            get_count_or_index_code(len(sections['frequencyGrid'])),                  # fgdNrGrids
            endian='big')
        for _, fg in sections['frequencyGrid'].items():
            method = eval_option(fg['method'])
+7 −2
Original line number Diff line number Diff line
[general]
directivity = [0.0, 360.0, 0.2512];
[directivitySetting]
directivityCount = 1;

[directivityPattern:0]
directivity = [0.0, 360.0, 0.2512]

[general]
reverbFile = config_directivity.dat;