Loading tests/test_be_for_jbm_neutral_dly_profile.py +125 −55 Original line number Diff line number Diff line Loading @@ -14,69 +14,73 @@ DTX_ON = "DTX_ON" DTX_OFF = "DTX_OFF" # TODO: Clarify if this should also be tested with DTX, see #1122 TESTCASES = [ # testcases where DTX is supported TESTCASES_WITH_DTX = [ # stereo ["stereo", 32000, "EXT", "DTX_OFF"], ["stereo", 48000, "MONO", "DTX_OFF"], ["stereo", 16400, "5_1", "DTX_OFF"], ["stereo", 256000, "7_1_4", "DTX_OFF"], ["stereo", 32000, "EXT"], ["stereo", 48000, "MONO"], ["stereo", 16400, "5_1"], ["stereo", 256000, "7_1_4"], # param ISM ["ISM4", 32000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["ISM3", 24400, "STEREO", "DTX_OFF"], ["ISM4", 24400, "5_1_2", "DTX_OFF"], ["ISM3", 32000, "HOA2", "DTX_OFF"], ["ISM4", 32000, "BINAURAL_ROOM_REVERB"], ["ISM3", 24400, "STEREO"], ["ISM4", 24400, "5_1_2"], ["ISM3", 32000, "HOA2"], # discrete ISM ["ISM3", 64000, "BINAURAL", "DTX_OFF"], ["ISM1", 32000, "BINAURAL_ROOM_IR", "DTX_OFF"], ["ISM2", 96000, "7_1", "DTX_OFF"], ["ISM1", 80000, "MONO", "DTX_OFF"], ["ISM4", 128000, "FOA", "DTX_OFF"], ["ISM3", 64000, "BINAURAL"], ["ISM2", 96000, "7_1"], ["ISM1", 80000, "MONO"], ["ISM4", 128000, "FOA"], # MASA ["MASA1TC", 24400, "BINAURAL_ROOM_IR", "DTX_OFF"], ["MASA2TC", 80000, "stereo", "DTX_OFF"], ["MASA1TC", 16400, "7_1_4", "DTX_OFF"], ["MASA2TC", 256000, "HOA3", "DTX_OFF"], ["MASA1TC", 128000, "EXT", "DTX_OFF"], ["MASA1TC", 24400, "BINAURAL_ROOM_IR"], ["MASA2TC", 80000, "stereo"], ["MASA1TC", 16400, "7_1_4"], ["MASA2TC", 256000, "HOA3"], ["MASA1TC", 128000, "EXT"], # SBA ["HOA3", 64000, "BINAURAL"], ["HOA2", 80000, "EXT"], ["FOA", 13200, "stereo"], ] # testcases with no DTX support TESTCASES_NO_DTX = [ # SBA ["FOA", 256000, "BINAURAL_ROOM_REVERB"], ["HOA3", 512000, "5_1_4"], # MC # McMasa ["MC_5_1", 16400, "BINAURAL_ROOM_IR", "DTX_OFF"], ["MC_7_1_4", 80000, "mono", "DTX_OFF"], ["MC_5_1_2", 24400, "EXT", "DTX_OFF"], ["MC_5_1", 16400, "BINAURAL_ROOM_IR"], ["MC_7_1_4", 80000, "mono"], ["MC_5_1_2", 24400, "EXT"], # paramMC ["MC_5_1_2", 48000, "BINAURAL", "DTX_OFF"], ["MC_7_1", 80000, "EXT", "DTX_OFF"], ["MC_7_1_4", 128000, "FOA", "DTX_OFF"], ["MC_5_1_2", 48000, "BINAURAL"], ["MC_7_1", 80000, "EXT"], ["MC_7_1_4", 128000, "FOA"], # paramUpmix ["MC_7_1_4", 160000, "stereo", "DTX_OFF"], ["MC_7_1_4", 160000, "stereo"], # discrete MC ["MC_5_1_2", 512000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["MC_7_1", 128000, "EXT", "DTX_OFF"], ["MC_7_1_4", 256000, "5_1", "DTX_OFF"], # SBA ["HOA3", 64000, "BINAURAL", "DTX_OFF"], ["FOA", 256000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["HOA2", 80000, "EXT", "DTX_OFF"], ["HOA3", 512000, "5_1_4", "DTX_OFF"], ["FOA", 80000, "stereo", "DTX_OFF"], ["MC_5_1_2", 512000, "BINAURAL_ROOM_REVERB"], ["MC_7_1", 128000, "EXT"], ["MC_7_1_4", 256000, "5_1"], # OMASA ["OMASA_ISM1", 512000, "BINAURAL", "DTX_OFF"], ["OMASA_ISM2", 24400, "MONO", "DTX_OFF"], ["OMASA_ISM3", 80000, "7_1_4", "DTX_OFF"], ["OMASA_ISM4", 64000, "HOA3", "DTX_OFF"], ["OMASA_ISM2", 32000, "EXT", "DTX_OFF"], ["OMASA_ISM1", 512000, "BINAURAL"], ["OMASA_ISM2", 24400, "MONO"], ["OMASA_ISM3", 80000, "7_1_4"], ["OMASA_ISM4", 64000, "HOA3"], ["OMASA_ISM2", 32000, "EXT"], # OSBA ["OSBA_ISM2_HOA2", 64000, "BINAURAL_ROOM_IR", "DTX_OFF"], ["OSBA_ISM4_FOA", 512000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["OSBA_ISM3_HOA3", 128000, "EXT", "DTX_OFF"], ["OSBA_ISM2_HOA3", 96000, "5_1", "DTX_OFF"], ["OSBA_ISM1_HOA2", 32000, "mono", "DTX_OFF"], ["OSBA_ISM2_HOA2", 64000, "BINAURAL_ROOM_IR"], ["OSBA_ISM4_FOA", 512000, "BINAURAL_ROOM_REVERB"], ["OSBA_ISM3_HOA3", 128000, "EXT"], ["OSBA_ISM2_HOA3", 96000, "5_1"], ["OSBA_ISM1_HOA2", 32000, "mono"], ] DLY_PROFILE = SCRIPTS_DIR.joinpath("dly_error_profiles/dly_error_profile_0.dat") JBM_NEUTRAL_DELAY_MS = 60 def get_options(in_format, bitrate, dtx): def get_options(in_format, dtx): options = list() if dtx: Loading Loading @@ -147,19 +151,82 @@ INPUT_FILES = { "OSBA_ISM1_HOA2": "stvOSBA_1ISM_2OA48c.wav", } OUTPUT_FOLDER_IF_KEEP_FILES = pathlib.Path(__file__).parent.joinpath("output-jbm-be") OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM = OUTPUT_FOLDER_IF_KEEP_FILES.joinpath("no-jbm") OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL = OUTPUT_FOLDER_IF_KEEP_FILES.joinpath( "neutral-profile" ) @pytest.mark.parametrize( "in_format,bitrate,out_format", TESTCASES_NO_DTX + TESTCASES_WITH_DTX ) def test_be_for_jbm_neutral_dly_profile_no_dtx( in_format, bitrate, out_format, dut_encoder_frontend, dut_decoder_frontend, keep_files, ): run_test( in_format, bitrate, out_format, DTX_OFF, dut_encoder_frontend, dut_decoder_frontend, keep_files, ) @pytest.mark.parametrize("in_format,bitrate,out_format,dtx", TESTCASES) def test_be_for_jbm_neutral_dly_profile( in_format, bitrate, out_format, dtx, dut_encoder_frontend, dut_decoder_frontend @pytest.mark.parametrize("in_format,bitrate,out_format", TESTCASES_WITH_DTX) def test_be_for_jbm_neutral_dly_profile_with_dtx( in_format, bitrate, out_format, dut_encoder_frontend, dut_decoder_frontend, keep_files, ): run_test( in_format, bitrate, out_format, DTX_ON, dut_encoder_frontend, dut_decoder_frontend, keep_files, ) def run_test( in_format, bitrate, out_format, dtx, dut_encoder_frontend, dut_decoder_frontend, keep_files, ): if keep_files: OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL.mkdir(exist_ok=True, parents=True) OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM.mkdir(exist_ok=True, parents=True) with TemporaryDirectory() as tmp_dir: tmp_dir = pathlib.Path(tmp_dir) output_dir_no_jbm = ( OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM if keep_files else tmp_dir ) output_dir_neutral = ( OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL if keep_files else tmp_dir ) # run encoder bitstream_file = tmp_dir.joinpath(f"{in_format}.192").absolute() sampling_rate_khz = 48 input_file = TESTV_DIR.joinpath(INPUT_FILES[in_format]) options = get_options(in_format, bitrate, dtx == DTX_ON) options = get_options(in_format, dtx == DTX_ON) dut_encoder_frontend.run( bitrate, sampling_rate_khz, Loading @@ -170,11 +237,13 @@ def test_be_for_jbm_neutral_dly_profile( ) # run decoder without network simulation output = tmp_dir.joinpath(f"{in_format}-{bitrate}-{out_format}.wav").absolute() output = output_dir_no_jbm.joinpath( f"{in_format}-{bitrate}-{out_format}.wav" ).absolute() dut_decoder_frontend.run(out_format, sampling_rate_khz, bitstream_file, output) # run decoder with network simulation output_jbm = output.with_suffix(".jbm-0.wav") output_jbm = output_dir_neutral.joinpath(output.with_suffix(".jbm-0.wav").name) dut_decoder_frontend.run( out_format, sampling_rate_khz, Loading @@ -188,7 +257,6 @@ def test_be_for_jbm_neutral_dly_profile( x_jbm, _ = audiofile.readfile(output_jbm) # strip jbm delay # TODO: this may need to be adapted to handle variable offsets based on outcome of #1122 cmp_result = audioarray.compare( x, x_jbm, Loading @@ -197,4 +265,6 @@ def test_be_for_jbm_neutral_dly_profile( test_start_offset_ms=JBM_NEUTRAL_DELAY_MS, ) if not cmp_result["bitexact"]: pytest.fail(f"Difference between no jbm and zero-delay jbm decoding found! Max abs diff: {cmp_result['max_abs_diff']}") pytest.fail( f"Difference between no jbm and zero-delay jbm decoding found! Max abs diff: {cmp_result['max_abs_diff']}" ) Loading
tests/test_be_for_jbm_neutral_dly_profile.py +125 −55 Original line number Diff line number Diff line Loading @@ -14,69 +14,73 @@ DTX_ON = "DTX_ON" DTX_OFF = "DTX_OFF" # TODO: Clarify if this should also be tested with DTX, see #1122 TESTCASES = [ # testcases where DTX is supported TESTCASES_WITH_DTX = [ # stereo ["stereo", 32000, "EXT", "DTX_OFF"], ["stereo", 48000, "MONO", "DTX_OFF"], ["stereo", 16400, "5_1", "DTX_OFF"], ["stereo", 256000, "7_1_4", "DTX_OFF"], ["stereo", 32000, "EXT"], ["stereo", 48000, "MONO"], ["stereo", 16400, "5_1"], ["stereo", 256000, "7_1_4"], # param ISM ["ISM4", 32000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["ISM3", 24400, "STEREO", "DTX_OFF"], ["ISM4", 24400, "5_1_2", "DTX_OFF"], ["ISM3", 32000, "HOA2", "DTX_OFF"], ["ISM4", 32000, "BINAURAL_ROOM_REVERB"], ["ISM3", 24400, "STEREO"], ["ISM4", 24400, "5_1_2"], ["ISM3", 32000, "HOA2"], # discrete ISM ["ISM3", 64000, "BINAURAL", "DTX_OFF"], ["ISM1", 32000, "BINAURAL_ROOM_IR", "DTX_OFF"], ["ISM2", 96000, "7_1", "DTX_OFF"], ["ISM1", 80000, "MONO", "DTX_OFF"], ["ISM4", 128000, "FOA", "DTX_OFF"], ["ISM3", 64000, "BINAURAL"], ["ISM2", 96000, "7_1"], ["ISM1", 80000, "MONO"], ["ISM4", 128000, "FOA"], # MASA ["MASA1TC", 24400, "BINAURAL_ROOM_IR", "DTX_OFF"], ["MASA2TC", 80000, "stereo", "DTX_OFF"], ["MASA1TC", 16400, "7_1_4", "DTX_OFF"], ["MASA2TC", 256000, "HOA3", "DTX_OFF"], ["MASA1TC", 128000, "EXT", "DTX_OFF"], ["MASA1TC", 24400, "BINAURAL_ROOM_IR"], ["MASA2TC", 80000, "stereo"], ["MASA1TC", 16400, "7_1_4"], ["MASA2TC", 256000, "HOA3"], ["MASA1TC", 128000, "EXT"], # SBA ["HOA3", 64000, "BINAURAL"], ["HOA2", 80000, "EXT"], ["FOA", 13200, "stereo"], ] # testcases with no DTX support TESTCASES_NO_DTX = [ # SBA ["FOA", 256000, "BINAURAL_ROOM_REVERB"], ["HOA3", 512000, "5_1_4"], # MC # McMasa ["MC_5_1", 16400, "BINAURAL_ROOM_IR", "DTX_OFF"], ["MC_7_1_4", 80000, "mono", "DTX_OFF"], ["MC_5_1_2", 24400, "EXT", "DTX_OFF"], ["MC_5_1", 16400, "BINAURAL_ROOM_IR"], ["MC_7_1_4", 80000, "mono"], ["MC_5_1_2", 24400, "EXT"], # paramMC ["MC_5_1_2", 48000, "BINAURAL", "DTX_OFF"], ["MC_7_1", 80000, "EXT", "DTX_OFF"], ["MC_7_1_4", 128000, "FOA", "DTX_OFF"], ["MC_5_1_2", 48000, "BINAURAL"], ["MC_7_1", 80000, "EXT"], ["MC_7_1_4", 128000, "FOA"], # paramUpmix ["MC_7_1_4", 160000, "stereo", "DTX_OFF"], ["MC_7_1_4", 160000, "stereo"], # discrete MC ["MC_5_1_2", 512000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["MC_7_1", 128000, "EXT", "DTX_OFF"], ["MC_7_1_4", 256000, "5_1", "DTX_OFF"], # SBA ["HOA3", 64000, "BINAURAL", "DTX_OFF"], ["FOA", 256000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["HOA2", 80000, "EXT", "DTX_OFF"], ["HOA3", 512000, "5_1_4", "DTX_OFF"], ["FOA", 80000, "stereo", "DTX_OFF"], ["MC_5_1_2", 512000, "BINAURAL_ROOM_REVERB"], ["MC_7_1", 128000, "EXT"], ["MC_7_1_4", 256000, "5_1"], # OMASA ["OMASA_ISM1", 512000, "BINAURAL", "DTX_OFF"], ["OMASA_ISM2", 24400, "MONO", "DTX_OFF"], ["OMASA_ISM3", 80000, "7_1_4", "DTX_OFF"], ["OMASA_ISM4", 64000, "HOA3", "DTX_OFF"], ["OMASA_ISM2", 32000, "EXT", "DTX_OFF"], ["OMASA_ISM1", 512000, "BINAURAL"], ["OMASA_ISM2", 24400, "MONO"], ["OMASA_ISM3", 80000, "7_1_4"], ["OMASA_ISM4", 64000, "HOA3"], ["OMASA_ISM2", 32000, "EXT"], # OSBA ["OSBA_ISM2_HOA2", 64000, "BINAURAL_ROOM_IR", "DTX_OFF"], ["OSBA_ISM4_FOA", 512000, "BINAURAL_ROOM_REVERB", "DTX_OFF"], ["OSBA_ISM3_HOA3", 128000, "EXT", "DTX_OFF"], ["OSBA_ISM2_HOA3", 96000, "5_1", "DTX_OFF"], ["OSBA_ISM1_HOA2", 32000, "mono", "DTX_OFF"], ["OSBA_ISM2_HOA2", 64000, "BINAURAL_ROOM_IR"], ["OSBA_ISM4_FOA", 512000, "BINAURAL_ROOM_REVERB"], ["OSBA_ISM3_HOA3", 128000, "EXT"], ["OSBA_ISM2_HOA3", 96000, "5_1"], ["OSBA_ISM1_HOA2", 32000, "mono"], ] DLY_PROFILE = SCRIPTS_DIR.joinpath("dly_error_profiles/dly_error_profile_0.dat") JBM_NEUTRAL_DELAY_MS = 60 def get_options(in_format, bitrate, dtx): def get_options(in_format, dtx): options = list() if dtx: Loading Loading @@ -147,19 +151,82 @@ INPUT_FILES = { "OSBA_ISM1_HOA2": "stvOSBA_1ISM_2OA48c.wav", } OUTPUT_FOLDER_IF_KEEP_FILES = pathlib.Path(__file__).parent.joinpath("output-jbm-be") OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM = OUTPUT_FOLDER_IF_KEEP_FILES.joinpath("no-jbm") OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL = OUTPUT_FOLDER_IF_KEEP_FILES.joinpath( "neutral-profile" ) @pytest.mark.parametrize( "in_format,bitrate,out_format", TESTCASES_NO_DTX + TESTCASES_WITH_DTX ) def test_be_for_jbm_neutral_dly_profile_no_dtx( in_format, bitrate, out_format, dut_encoder_frontend, dut_decoder_frontend, keep_files, ): run_test( in_format, bitrate, out_format, DTX_OFF, dut_encoder_frontend, dut_decoder_frontend, keep_files, ) @pytest.mark.parametrize("in_format,bitrate,out_format,dtx", TESTCASES) def test_be_for_jbm_neutral_dly_profile( in_format, bitrate, out_format, dtx, dut_encoder_frontend, dut_decoder_frontend @pytest.mark.parametrize("in_format,bitrate,out_format", TESTCASES_WITH_DTX) def test_be_for_jbm_neutral_dly_profile_with_dtx( in_format, bitrate, out_format, dut_encoder_frontend, dut_decoder_frontend, keep_files, ): run_test( in_format, bitrate, out_format, DTX_ON, dut_encoder_frontend, dut_decoder_frontend, keep_files, ) def run_test( in_format, bitrate, out_format, dtx, dut_encoder_frontend, dut_decoder_frontend, keep_files, ): if keep_files: OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL.mkdir(exist_ok=True, parents=True) OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM.mkdir(exist_ok=True, parents=True) with TemporaryDirectory() as tmp_dir: tmp_dir = pathlib.Path(tmp_dir) output_dir_no_jbm = ( OUTPUT_FOLDER_IF_KEEP_FILES_NO_JBM if keep_files else tmp_dir ) output_dir_neutral = ( OUTPUT_FOLDER_IF_KEEP_FILES_NEUTRAL if keep_files else tmp_dir ) # run encoder bitstream_file = tmp_dir.joinpath(f"{in_format}.192").absolute() sampling_rate_khz = 48 input_file = TESTV_DIR.joinpath(INPUT_FILES[in_format]) options = get_options(in_format, bitrate, dtx == DTX_ON) options = get_options(in_format, dtx == DTX_ON) dut_encoder_frontend.run( bitrate, sampling_rate_khz, Loading @@ -170,11 +237,13 @@ def test_be_for_jbm_neutral_dly_profile( ) # run decoder without network simulation output = tmp_dir.joinpath(f"{in_format}-{bitrate}-{out_format}.wav").absolute() output = output_dir_no_jbm.joinpath( f"{in_format}-{bitrate}-{out_format}.wav" ).absolute() dut_decoder_frontend.run(out_format, sampling_rate_khz, bitstream_file, output) # run decoder with network simulation output_jbm = output.with_suffix(".jbm-0.wav") output_jbm = output_dir_neutral.joinpath(output.with_suffix(".jbm-0.wav").name) dut_decoder_frontend.run( out_format, sampling_rate_khz, Loading @@ -188,7 +257,6 @@ def test_be_for_jbm_neutral_dly_profile( x_jbm, _ = audiofile.readfile(output_jbm) # strip jbm delay # TODO: this may need to be adapted to handle variable offsets based on outcome of #1122 cmp_result = audioarray.compare( x, x_jbm, Loading @@ -197,4 +265,6 @@ def test_be_for_jbm_neutral_dly_profile( test_start_offset_ms=JBM_NEUTRAL_DELAY_MS, ) if not cmp_result["bitexact"]: pytest.fail(f"Difference between no jbm and zero-delay jbm decoding found! Max abs diff: {cmp_result['max_abs_diff']}") pytest.fail( f"Difference between no jbm and zero-delay jbm decoding found! Max abs diff: {cmp_result['max_abs_diff']}" )