Commit 3581197f authored by Jan Brouwer's avatar Jan Brouwer
Browse files

update text_to_binary_payload.py, add example input file

parent c96d46d3
Loading
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
[frequencyGrid:0]
method = individualFrequencies
frequencies = [
        20.0, 25.0, 31.5, 40.0,
        50.0, 63.0, 80.0, 100.0,
        125.0, 160.0, 200.0, 250.0,
        315.0, 400.0, 500.0, 630.0,
        800.0, 1000.0, 1250.0, 1600.0,
        2000.0, 2500.0, 3150.0, 4000.0,
        5000.0, 6300.0, 8000.0, 10000.0,
        12500.0, 16000.0, 20000.0]

[acousticEnvironment:0]
id = 0
frequencyGridIndex = 0
predelay = 0.1
rt60 = [
        1.3622, 1.4486, 1.3168, 1.5787,
        1.4766, 1.3954, 1.2889, 1.3462,
        1.0759, 1.0401, 1.0970, 1.0850,
        1.0910, 1.0404, 1.0499, 1.0699,
        1.1028, 1.1714, 1.1027, 1.0666,
        1.0550, 1.0553, 1.0521, 1.0569,
        1.0421, 0.97822, 0.80487, 0.75944,
        0.71945, 0.61682, 0.60031]

dsr = [
        1.9952632e-08, 1.9952632e-08, 1.2589251e-08, 1.5848926e-08, 1.2589251e-08, 1.9952632e-08, 2.511887e-08, 3.9810708e-08, 1e-07, 1.9952633e-07,
        3.981071e-07, 6.3095763e-07, 7.943284e-07, 6.3095763e-07, 5.01187e-07, 5.01187e-07, 6.3095763e-07, 6.3095763e-07, 7.943284e-07, 6.3095763e-07,
        5.01187e-07, 6.3095763e-07, 6.3095763e-07, 6.3095763e-07, 5.01187e-07, 2.511887e-07, 1.2589251e-07, 1e-07, 6.309576e-08, 3.1622776e-08,
        2.511887e-08]

+33 −31
Original line number Diff line number Diff line
@@ -194,7 +194,7 @@ def get_frequency_code(f):


def get_frequency_hop_code(index):
    assert 0 <= index < 7
    assert 0 <= index <= 6
    return [
        '0010',       # 2^(1/12)
        '0011',       # 2^(1/6)
@@ -243,7 +243,7 @@ def get_default_grid_nr_bands(code):
    return [10, 10, 31, 5, 6, 3, 41, 21, 25][code]


def get_distance_code(distance, isSmallScene = True):
def get_distance_code(distance, isSmallScene):
    # 0, 1, ... 99
    metersCode = [
          '111101',   '110010',   '110011',   '110000',   '110001',   '110110',   '110111',   '110100',   '110101',   '001010',
@@ -336,7 +336,8 @@ def concatenate(function, data):


def test():
    # generate binary output which can be compared with the Matlab implementation output
    # exercise encoding functions over their supported ranges
    # save binary output to file so it can be compared against Matlab / C implementations
    string = ''

    # count or index encoding
@@ -380,7 +381,7 @@ def generate_reverb_payload_equivalent_to_rend_config_renderer_cfg():
    # based on config_renderer.cfg
    # note that because of encoding, resolution is lost and behaviour may not be bit-exact compared to .cfg file based values
    data = bitarray(
        '1'                                       # hasAcEnv
        '1'                                       # hasAcEnv (see IVAS acoustic environment payload syntax document)
        + get_count_or_index_code(1)              # fgdNrGrids
        + fgdMethod.Individual_Frequencies.value  #   fgdMethod
        + get_count_or_index_code(31)             #     fgdNrBands
@@ -439,7 +440,7 @@ def generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_re
                                            
        + get_count_or_index_code(1)              # AcousticEnvCount
        + get_id_code(0)                          #   ID
        + get_count_or_index_code(1)              #   FreqGridID
        + get_count_or_index_code(0)              #   FreqGridID
        + get_duration_code(0.1)                  #   (input)Predelay

        + concatenate(get_duration_code,          #     RT60
@@ -449,20 +450,20 @@ def generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_re
              0.60031 ])

        + concatenate(get_dsr_code,               #     DSR
            [ 1.8811e-08, 2.1428e-08, 1.3972e-08,   1.51e-08,  1.287e-08, 1.8747e-08,  2.413e-08, 3.9927e-08, 8.9719e-08,  1.902e-07,
               3.702e-07, 6.1341e-07, 7.1432e-07, 6.5331e-07, 4.6094e-07, 5.4683e-07, 7.0134e-07,  6.856e-07,  7.114e-07, 6.9604e-07,
              5.2939e-07,  5.699e-07, 6.1773e-07, 5.7488e-07, 4.7748e-07, 2.7213e-07, 1.3681e-07, 1.0941e-07, 6.2001e-08, 2.8483e-08,
              2.6267e-08 ])
            [ 1.9952632e-08, 1.9952632e-08, 1.2589251e-08, 1.5848926e-08, 1.2589251e-08, 1.9952632e-08, 2.511887e-08, 3.9810708e-08, 1e-07, 1.9952633e-07,
              3.981071e-07, 6.3095763e-07, 7.943284e-07, 6.3095763e-07, 5.01187e-07, 5.01187e-07, 6.3095763e-07, 6.3095763e-07, 7.943284e-07, 6.3095763e-07,
              5.01187e-07, 6.3095763e-07, 6.3095763e-07, 6.3095763e-07, 5.01187e-07, 2.511887e-07, 1.2589251e-07, 1e-07, 6.309576e-08, 3.1622776e-08,
              2.511887e-08 ])

        + '1'                                     #   hasEarlyReflections
        + concatenate(lambda d : get_distance_code(d, True),
            [ 3.0, 4.0, 2.5 ])                    #     room dimensions
            [ 3.0, 4.0, 2.5 ])                    #     erSize (room dimensions)
        
        + get_count_or_index_code(0)              #     FreqGridID
        + concatenate(get_absorption_code,        #     absorptionCode
        + get_count_or_index_code(0)              #     erFreqGridIdx
        + concatenate(get_absorption_code,        #     erAbsCoeff
            [ 0.8, 0.8, 0.8, 0.8, 0.2, 0.6 ])

        + '0'                                     #     listener origin flag
        + '0'                                     #     hasListenerOrigin

        , endian='big')

@@ -496,7 +497,7 @@ def generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_re
                                            
        + get_count_or_index_code(1)              # AcousticEnvCount
        + get_id_code(0)                          #   ID
        + get_count_or_index_code(1)              #   FreqGridID
        + get_count_or_index_code(0)              #   FreqGridID
        + get_duration_code(0.1)                  #   (input)Predelay

        + concatenate(get_duration_code,          #     RT60
@@ -506,24 +507,24 @@ def generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_re
              0.60031 ])

        + concatenate(get_dsr_code,               #     DSR
            [ 1.8811e-08, 2.1428e-08, 1.3972e-08,   1.51e-08,  1.287e-08, 1.8747e-08,  2.413e-08, 3.9927e-08, 8.9719e-08,  1.902e-07,
               3.702e-07, 6.1341e-07, 7.1432e-07, 6.5331e-07, 4.6094e-07, 5.4683e-07, 7.0134e-07,  6.856e-07,  7.114e-07, 6.9604e-07,
              5.2939e-07,  5.699e-07, 6.1773e-07, 5.7488e-07, 4.7748e-07, 2.7213e-07, 1.3681e-07, 1.0941e-07, 6.2001e-08, 2.8483e-08,
              2.6267e-08 ])
            [ 1.9952632e-08, 1.9952632e-08, 1.2589251e-08, 1.5848926e-08, 1.2589251e-08, 1.9952632e-08, 2.511887e-08, 3.9810708e-08, 1e-07, 1.9952633e-07,
              3.981071e-07, 6.3095763e-07, 7.943284e-07, 6.3095763e-07, 5.01187e-07, 5.01187e-07, 6.3095763e-07, 6.3095763e-07, 7.943284e-07, 6.3095763e-07,
              5.01187e-07, 6.3095763e-07, 6.3095763e-07, 6.3095763e-07, 5.01187e-07, 2.511887e-07, 1.2589251e-07, 1e-07, 6.309576e-08, 3.1622776e-08,
              2.511887e-08 ])

        + '1'                                     #   hasEarlyReflections
        + concatenate(lambda code : get_distance_code(code, True),
            [ 3.0, 4.0, 2.5 ])                    #     room dimensions
            [ 3.0, 4.0, 2.5 ])                    #     erSize (room dimensions)

        + get_count_or_index_code(0)              #     FreqGridID
        + concatenate(get_absorption_code,        #     absorptionCode
        + get_count_or_index_code(0)              #     erFreqGridIdx
        + concatenate(get_absorption_code,        #     erAbsCoeff
            [ 0.8, 0.8, 0.8, 0.8, 0.2, 0.6 ])

        + '1'                                     #     listener origin flag
        + '1'                                     #     is possitive x
        + '0'                                     #     is possitive y
        + '1'                                     #     hasListenerOrigin
        + '1'                                     #       isPositiveX 
        + '0'                                     #       isPositiveY 
        + concatenate(lambda d : get_distance_code(d, True),
            [ 0.5, 0.5, 1.5 ])                    #     listener origin (x, y, z)
            [ 0.5, 0.5, 1.5 ])                    #       erListenerOrigin (x, y, z)

        , endian='big')

@@ -614,10 +615,11 @@ def generate_reverb_payload_equivalent_to_rend_config_recreation_cfg():
    file.close()


if __name__ == "__main__":
    #test()
    generate_reverb_payload_equivalent_to_rend_config_renderer_cfg()
    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_cfg_plus_early_reflections_listener_origin()
    #generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_reflections_no_listener_origin()
    #generate_reverb_payload_equivalent_to_rend_config_renderer_cfg_plus_early_reflections_listener_origin()
+6 −5
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ def parse_reverb_text_configuration_and_generate_binary_payload(file):
    # parse frequency grids
    nr_bands = []
    data = bitarray(
          '1'                                                                       # hasAcEnv
          '1'                                                                       # hasAcEnv (see IVAS acoustic environment payload syntax document)
        + get_count_or_index_code(len(sections['frequencyGrid'])),                  # fgdNrGrids
        endian='big')
    for _, fg in sections['frequencyGrid'].items():
@@ -107,7 +107,7 @@ def parse_reverb_text_configuration_and_generate_binary_payload(file):
                + get_bool_code('defaultGridOffset' in fg))                         # fgdIsSubGrid
            if 'defaultGridOffset' in fg:
                data += bitarray(
                      format(eval_option(fg['defaultGridOffset']), '03b')           # fgdDefaultGridOffset   ## only 3 bits used iso 6 (to offset into max 41 bands), correct?
                      format(eval_option(fg['defaultGridOffset']), '03b')           # fgdDefaultGridOffset
                    + format(eval_option(fg['defaultGridNrBands']), '06b'))         # fgdDefaultGridNrBands
        else:
            assert False, 'unknow frequency grid method'
@@ -132,10 +132,11 @@ def parse_reverb_text_configuration_and_generate_binary_payload(file):
            if 'listenerOrigin' in ae:
                xyz = eval_option(ae['listenerOrigin'])
                assert len(xyz) == 3, 'wrong number of listener origin coordinates'
                assert xyz[2] >= 0, 'listener origin Z >= 0'
                data += bitarray(
                      '1' if xyz[0] >= 0 else '0'                                   # isPositiveX
                    + '1' if xyz[1] >= 0 else '0'                                   # isPositiveY
                    + concatenate(get_distance_code, xyz))                          # erListenerOrigin
                      get_bool_code(xyz[0] >= 0)                                                               # isPositiveX
                    + get_bool_code(xyz[1] >= 0)                                                               # isPositiveY
                    + concatenate(lambda d : get_distance_code(d, True), [abs(v) for v in xyz]))               # erListenerOrigin

    # generate binary file
    data.tofile(open(file.split('.')[0] + '.dat', 'wb'))