Loading scripts/config/ivas_modes.json +1383 −1 File changed.Preview size limit exceeded, changes collapsed. Show changes scripts/prepare_combined_format_inputs.py +26 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,13 @@ masa_alts = ({'masa_meta_file': 'stv2MASA2TC48c.met', 'masa_audio_file': 'stv1MASA1TC48c.wav', 'masa_tag': '1MASA1TC'}) sba_alts = ({'sba_audio_file': 'stvFOA48c.wav', 'sba_tag': 'FOA'}, {'sba_audio_file': 'stv2OA48c.wav', 'sba_tag': '2OA'}, {'sba_audio_file': 'stv3OA48c.wav', 'sba_tag': '3OA'}) # files containing 1-4 ISMs as channels ism_files = ('stv1ISM48s.wav', 'stv2ISM48s.wav', 'stv3ISM48s.wav', 'stv4ISM48s.wav') # per-object metadata Loading Loading @@ -100,6 +107,25 @@ for enum_idx, (ism_audio_file, ism_meta_file) in enumerate(zip(ism_files, ism_me if not os.path.exists(masa_meta_name) or force_overwrite: shutil.copyfile(os.path.join(input_dir, masa_item['masa_meta_file']), masa_meta_name) wrote_files.append(masa_meta_name) for sba_item in sba_alts: sba_tag = sba_item['sba_tag'] osba_file_body = f'stvOSBA_{n_isms}ISM_{sba_tag}48c' osba_file = os.path.join(output_dir, f'{osba_file_body}.wav') if not os.path.exists(osba_file) or force_overwrite: audiofile.combinefiles(in_filenames=[os.path.join(input_dir, ism_audio_file), os.path.join(input_dir, sba_item['sba_audio_file'])], out_file=osba_file) wrote_files.append(osba_file) # copy ISM metadata files under names matching the combined file for ism_idx in range(n_isms): ism_file_name = os.path.join(output_dir, f'{osba_file_body}_ISM{ism_idx+1}{os.path.splitext(ism_meta_file)[1]}') if not os.path.exists(ism_file_name) or force_overwrite: shutil.copyfile(os.path.join(input_dir, ism_meta_file), ism_file_name) wrote_files.append(ism_file_name) # info print. helps setting up .gitignore if len(wrote_files) > 0: Loading scripts/pyaudio3dtools/spatialaudioformat.py +145 −0 Original line number Diff line number Diff line Loading @@ -356,6 +356,151 @@ _format_configs = { "lfe_index": [], "altname": "meta", }, # OSBA Formats "OSBA_ISM1_HOA3": { "name": "OSBA_ISM1_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 17, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism1", }, "OSBA_ISM1_HOA2": { "name": "OSBA_ISM1_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 10, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism1", }, "OSBA_ISM1_FOA": { "name": "OSBA_ISM1_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 5, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism1", }, "OSBA_ISM2_HOA3": { "name": "OSBA_ISM2_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 18, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism2", }, "OSBA_ISM2_HOA2": { "name": "OSBA_ISM2_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 11, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism2", }, "OSBA_ISM2_FOA": { "name": "OSBA_ISM2_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 6, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism2", }, "OSBA_ISM3_HOA3": { "name": "OSBA_ISM3_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 19, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism3", }, "OSBA_ISM3_HOA2": { "name": "OSBA_ISM3_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 12, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism3", }, "OSBA_ISM3_FOA": { "name": "OSBA_ISM3_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 7, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism3", }, "OSBA_ISM4_HOA3": { "name": "OSBA_ISM4_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 20, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism4", }, "OSBA_ISM4_HOA2": { "name": "OSBA_ISM4_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 13, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism4", }, "OSBA_ISM4_FOA": { "name": "OSBA_ISM4_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 8, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism4", }, } # Channel indices of planar Ambisonic components of ACN Loading scripts/pyivastest/IvasModeRunner.py +7 −0 Original line number Diff line number Diff line Loading @@ -592,6 +592,13 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector): if config["cmd"]["in_config"] == "SBA": wav_info = af.get_wav_file_info(in_file_name_transformed) in_format = spformat.detect_format(wav_info["channels"]) elif config["cmd"]["in_config"][0:4] == "OSBA": # get number of ISMs expected osba_ism_config = config["cmd"]["in_config"][5:9] osba_ism_format_dict = spformat.get_format_dict(osba_ism_config) wav_info = af.get_wav_file_info(in_file_name_transformed) osba_ambi_config = spformat.detect_format(wav_info["channels"] - osba_ism_format_dict["nchannels"]) in_format = f"OSBA_{osba_ism_config}_{osba_ambi_config}" # save in config as json file in_format_dict = spformat.get_format_dict(in_format) Loading Loading
scripts/config/ivas_modes.json +1383 −1 File changed.Preview size limit exceeded, changes collapsed. Show changes
scripts/prepare_combined_format_inputs.py +26 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,13 @@ masa_alts = ({'masa_meta_file': 'stv2MASA2TC48c.met', 'masa_audio_file': 'stv1MASA1TC48c.wav', 'masa_tag': '1MASA1TC'}) sba_alts = ({'sba_audio_file': 'stvFOA48c.wav', 'sba_tag': 'FOA'}, {'sba_audio_file': 'stv2OA48c.wav', 'sba_tag': '2OA'}, {'sba_audio_file': 'stv3OA48c.wav', 'sba_tag': '3OA'}) # files containing 1-4 ISMs as channels ism_files = ('stv1ISM48s.wav', 'stv2ISM48s.wav', 'stv3ISM48s.wav', 'stv4ISM48s.wav') # per-object metadata Loading Loading @@ -100,6 +107,25 @@ for enum_idx, (ism_audio_file, ism_meta_file) in enumerate(zip(ism_files, ism_me if not os.path.exists(masa_meta_name) or force_overwrite: shutil.copyfile(os.path.join(input_dir, masa_item['masa_meta_file']), masa_meta_name) wrote_files.append(masa_meta_name) for sba_item in sba_alts: sba_tag = sba_item['sba_tag'] osba_file_body = f'stvOSBA_{n_isms}ISM_{sba_tag}48c' osba_file = os.path.join(output_dir, f'{osba_file_body}.wav') if not os.path.exists(osba_file) or force_overwrite: audiofile.combinefiles(in_filenames=[os.path.join(input_dir, ism_audio_file), os.path.join(input_dir, sba_item['sba_audio_file'])], out_file=osba_file) wrote_files.append(osba_file) # copy ISM metadata files under names matching the combined file for ism_idx in range(n_isms): ism_file_name = os.path.join(output_dir, f'{osba_file_body}_ISM{ism_idx+1}{os.path.splitext(ism_meta_file)[1]}') if not os.path.exists(ism_file_name) or force_overwrite: shutil.copyfile(os.path.join(input_dir, ism_meta_file), ism_file_name) wrote_files.append(ism_file_name) # info print. helps setting up .gitignore if len(wrote_files) > 0: Loading
scripts/pyaudio3dtools/spatialaudioformat.py +145 −0 Original line number Diff line number Diff line Loading @@ -356,6 +356,151 @@ _format_configs = { "lfe_index": [], "altname": "meta", }, # OSBA Formats "OSBA_ISM1_HOA3": { "name": "OSBA_ISM1_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 17, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism1", }, "OSBA_ISM1_HOA2": { "name": "OSBA_ISM1_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 10, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism1", }, "OSBA_ISM1_FOA": { "name": "OSBA_ISM1_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 5, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism1", }, "OSBA_ISM2_HOA3": { "name": "OSBA_ISM2_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 18, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism2", }, "OSBA_ISM2_HOA2": { "name": "OSBA_ISM2_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 11, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism2", }, "OSBA_ISM2_FOA": { "name": "OSBA_ISM2_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 6, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism2", }, "OSBA_ISM3_HOA3": { "name": "OSBA_ISM3_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 19, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism3", }, "OSBA_ISM3_HOA2": { "name": "OSBA_ISM3_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 12, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism3", }, "OSBA_ISM3_FOA": { "name": "OSBA_ISM3_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 7, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism3", }, "OSBA_ISM4_HOA3": { "name": "OSBA_ISM4_HOA3", "ambi_order": 3, "isplanar": False, "nchannels": 20, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba3_ism4", }, "OSBA_ISM4_HOA2": { "name": "OSBA_ISM4_HOA2", "ambi_order": 2, "isplanar": False, "nchannels": 13, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba2_ism4", }, "OSBA_ISM4_FOA": { "name": "OSBA_ISM4_FOA", "ambi_order": 1, "isplanar": False, "nchannels": 8, "isloudspeaker": False, "isheadphones": False, "lfe_index": [], "altname": "osba1_ism4", }, } # Channel indices of planar Ambisonic components of ACN Loading
scripts/pyivastest/IvasModeRunner.py +7 −0 Original line number Diff line number Diff line Loading @@ -592,6 +592,13 @@ class IvasModeRunner(IvasModeCollector.IvasModeCollector): if config["cmd"]["in_config"] == "SBA": wav_info = af.get_wav_file_info(in_file_name_transformed) in_format = spformat.detect_format(wav_info["channels"]) elif config["cmd"]["in_config"][0:4] == "OSBA": # get number of ISMs expected osba_ism_config = config["cmd"]["in_config"][5:9] osba_ism_format_dict = spformat.get_format_dict(osba_ism_config) wav_info = af.get_wav_file_info(in_file_name_transformed) osba_ambi_config = spformat.detect_format(wav_info["channels"] - osba_ism_format_dict["nchannels"]) in_format = f"OSBA_{osba_ism_config}_{osba_ambi_config}" # save in config as json file in_format_dict = spformat.get_format_dict(in_format) Loading