diff --git a/ivas_processing_scripts/audiotools/convert/__init__.py b/ivas_processing_scripts/audiotools/convert/__init__.py index f1e56c430e53ad048e0d8b6c62d330bac611378c..80f0ef6a580b3a939d31a6d9f57da130fbc11c11 100755 --- a/ivas_processing_scripts/audiotools/convert/__init__.py +++ b/ivas_processing_scripts/audiotools/convert/__init__.py @@ -163,9 +163,7 @@ def convert_file( # write output audio write(out_file, output.audio, output.fs) # write metadata - if isinstance(output, audio.ObjectBasedAudio) or isinstance( - output, audio.OSBAAudio - ): + if isinstance(output, (audio.ObjectBasedAudio, audio.OSBAAudio)): write_ISM_metadata_in_file(output.object_pos, [out_file], automatic_naming=True) elif isinstance(output, audio.MetadataAssistedSpatialAudio) and in_fmt == out_fmt: # audio objects point to same MD file, create new one with default naming for output @@ -292,16 +290,26 @@ def process_audio( """delay audio""" if delay is not None: - if isinstance(x, audio.ObjectBasedAudio): - raise ValueError("Delay not possible for ISM input") + if isinstance( + x, + ( + audio.ObjectBasedAudio, + audio.MetadataAssistedSpatialAudio, + audio.OMASAAudio, + audio.OSBAAudio, + ), + ): + raise ValueError("Delay not possible for ISM, MASA, OMASA and OSBA inputs") if logger: logger.debug(f"Delaying audio by {delay} ms") x.audio = audioarray.delay(x.audio, x.fs, delay) """trim or pad audio""" if trim is not None: - if isinstance(x, audio.ObjectBasedAudio): - # metadata concatenation necessary for ISM + if isinstance(x, (audio.MetadataAssistedSpatialAudio, audio.OMASAAudio)): + raise ValueError("Trimming not possible for MASA and OMASA inputs") + elif isinstance(x, (audio.ObjectBasedAudio, audio.OSBAAudio)): + # metadata concatenation necessary for ISM/OSBA metadata.trim_meta(x, tuple(trim), pad_noise) else: x.audio = audioarray.trim(x.audio, x.fs, tuple(trim), pad_noise) @@ -388,12 +396,11 @@ def format_conversion( # validation # check for MASA/OMASA as output if isinstance(output, audio.MetadataAssistedSpatialAudio) and not ( - isinstance(input, audio.SceneBasedAudio) - or isinstance(input, audio.MetadataAssistedSpatialAudio) + isinstance(input, (audio.MetadataAssistedSpatialAudio, audio.SceneBasedAudio)) ): raise NotImplementedError("Can only convert to MASA from SBA") if isinstance(output, audio.OMASAAudio) and not ( - isinstance(input, audio.OSBAAudio) or isinstance(input, audio.OMASAAudio) + isinstance(input, (audio.OSBAAudio, audio.OMASAAudio)) ): raise NotImplementedError("Can only convert to OMASA from OSBA") @@ -402,10 +409,8 @@ def format_conversion( raise NotImplementedError( "ISM is not supported as an output for rendering! Only usable as pass-through" ) - if isinstance(output, audio.OMASAAudio) or isinstance(output, audio.OSBAAudio): - if not ( - isinstance(input, audio.OMASAAudio) or isinstance(input, audio.OSBAAudio) - ): + if isinstance(output, (audio.OMASAAudio, audio.OSBAAudio)): + if not isinstance(input, (audio.OMASAAudio, audio.OSBAAudio)): raise NotImplementedError( "OMASA and OSBA only possible as output if input is OMASA or OSBA" ) diff --git a/ivas_processing_scripts/audiotools/wrappers/bs1770.py b/ivas_processing_scripts/audiotools/wrappers/bs1770.py index e538802335b68e9cfd6009ba0636253407b6adbf..92dcda19f42b10096b29a162fc8cc53d59607110 100755 --- a/ivas_processing_scripts/audiotools/wrappers/bs1770.py +++ b/ivas_processing_scripts/audiotools/wrappers/bs1770.py @@ -89,9 +89,7 @@ def bs1770demo( 'A bs1770demo executable without RMS support (cmdl option "-rms") was detected. Please update the bs1770demo executable. See bin/README.md for details.' ) - if not isinstance(input, audio.BinauralAudio) and not isinstance( - input, audio.ChannelBasedAudio - ): + if not isinstance(input, (audio.BinauralAudio, audio.ChannelBasedAudio)): raise NotImplementedError( f"{input.name} is unsupported in ITU-R BS.1770-4. Ensure loudness format was set correctly in CLI/YAML." ) @@ -194,14 +192,12 @@ def get_loudness( if loudness_format is None: # for some formats rendering is necessary prior to loudness measurement - if isinstance(input, audio.SceneBasedAudio) or isinstance( - input, audio.MetadataAssistedSpatialAudio + if isinstance( + input, (audio.SceneBasedAudio, audio.MetadataAssistedSpatialAudio) ): loudness_format = "7_1_4" - elif ( - isinstance(input, audio.ObjectBasedAudio) - or isinstance(input, audio.OMASAAudio) - or isinstance(input, audio.OSBAAudio) + elif isinstance( + input, (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio) ): loudness_format = "BINAURAL" elif hasattr(input, "layout_file"): diff --git a/ivas_processing_scripts/processing/ivas.py b/ivas_processing_scripts/processing/ivas.py index c13d5e1167a8ae597072079fdc6df83d47dca89b..e55045fa8511a231613afc761ec6d7efeac1e086 100755 --- a/ivas_processing_scripts/processing/ivas.py +++ b/ivas_processing_scripts/processing/ivas.py @@ -152,9 +152,7 @@ class IVAS(Processing): if isinstance(self.in_fmt, audio.MetadataAssistedSpatialAudio): md_file = in_file.parent / (in_file.name + ".met") metadata_files.append(md_file) - elif isinstance(self.in_fmt, audio.ObjectBasedAudio) or isinstance( - self.in_fmt, audio.OSBAAudio - ): + elif isinstance(self.in_fmt, (audio.ObjectBasedAudio, audio.OSBAAudio)): metadata_files = in_meta elif isinstance(self.in_fmt, audio.OMASAAudio): metadata_files = in_meta diff --git a/ivas_processing_scripts/processing/preprocessing_2.py b/ivas_processing_scripts/processing/preprocessing_2.py index dbfbe831cc01a695542cd7599518c635f71db7f7..017d209c4ecf8ba37bc18fc3e83b95462e5427fe 100644 --- a/ivas_processing_scripts/processing/preprocessing_2.py +++ b/ivas_processing_scripts/processing/preprocessing_2.py @@ -64,8 +64,8 @@ class Preprocessing2(Processing): self.in_fmt, in_file, fs=self.in_fs, in_meta=in_meta ) - if isinstance(audio_object, audio.MetadataAssistedSpatialAudio) or isinstance( - audio_object, audio.OMASAAudio + if isinstance( + audio_object, (audio.MetadataAssistedSpatialAudio, audio.OMASAAudio) ): if self.preamble > 0 or self.background_noise or self.repeat_signal: raise ValueError( diff --git a/ivas_processing_scripts/processing/processing_splitting_scaling.py b/ivas_processing_scripts/processing/processing_splitting_scaling.py index bb1dd604dec8628f0d2665f296d2fcae3b35ab5b..98aec520ee2a37d0a334babd62c1b4f15749ad62 100644 --- a/ivas_processing_scripts/processing/processing_splitting_scaling.py +++ b/ivas_processing_scripts/processing/processing_splitting_scaling.py @@ -60,7 +60,10 @@ class Processing_splitting_scaling(Processing): # read file and metadata x, fs = read(in_file, nchannels=num_channels, fs=self.fs) - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): meta_arrays = [] for meta in in_meta: meta_arrays.append(np.genfromtxt(meta, delimiter=",")) @@ -72,7 +75,10 @@ class Processing_splitting_scaling(Processing): in_file_noerror = Path(f"{in_file.with_suffix('')}.noerror.wav") out_file_noerror = Path(f"{out_file.with_suffix('')}.noerror.wav") x_noerror, _ = read(in_file_noerror, nchannels=num_channels, fs=self.fs) - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): meta_arrays_noerror = [] for meta in in_meta: path_parts = str(meta).split(".") @@ -153,7 +159,10 @@ class Processing_splitting_scaling(Processing): str(f).replace(tmp_name, out_name).replace(f".{self.name}.", ".") ) out_out_files.append(f_out) - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): out_out_meta = [] for f in out_out_files: oom = [] @@ -170,7 +179,10 @@ class Processing_splitting_scaling(Processing): ): write(of, file_s, fs) write(oof, file_s, fs) - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): write_ISM_metadata_in_file(meta_s, om) write_ISM_metadata_in_file(meta_s, oom) # write noerror files in tmp folder @@ -182,7 +194,10 @@ class Processing_splitting_scaling(Processing): meta_splits_noerror, ): write(ofne, file_sne, fs) - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): write_ISM_metadata_in_file(meta_sne, omne) def revert_preamble_concatenation( @@ -257,7 +272,10 @@ class Processing_splitting_scaling(Processing): for sn in split_names ] - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): out_meta = [] for of in out_files: of_list = [] @@ -271,7 +289,10 @@ class Processing_splitting_scaling(Processing): # set output values out_files = [out_file] file_splits = [x] - if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): + if isinstance( + audio.fromtype(self.out_fmt), + (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio), + ): meta_splits = [in_meta] out_meta = [ [ @@ -305,7 +326,9 @@ def adjust_loudness( scaled_signals = [] for f, m in zip(file_splits, meta): audio_object = audio.fromarray(fmt=out_fmt, x=f, fs=fs) - if isinstance(audio_object, audio.ObjectBasedAudio): + if isinstance( + audio_object, (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio) + ): audio_object.object_pos = m scaled_signal, _ = loudness_norm( audio_object, loudness, loudness_fmt, logger=logger @@ -322,7 +345,9 @@ def measure_loudness(file_splits, out_fmt, fs, loudness, loudness_fmt, meta, log scaling_splits = [] for f, m in zip(file_splits, meta): audio_object = audio.fromarray(fmt=out_fmt, x=f, fs=fs) - if isinstance(audio_object, audio.ObjectBasedAudio): + if isinstance( + audio_object, (audio.ObjectBasedAudio, audio.OMASAAudio, audio.OSBAAudio) + ): audio_object.object_pos = m _, scale_factor = loudness_norm( audio_object, loudness, loudness_fmt, logger=logger