Loading ivas_processing_scripts/processing/processing_splitting_scaling.py +40 −14 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ from ivas_processing_scripts.processing.processing import Processing, remove_pre from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import write, read from ivas_processing_scripts.audiotools.wrappers.bs1770 import loudness_norm from ivas_processing_scripts.audiotools.metadata import write_ISM_metadata_in_file class Processing_splitting_scaling(Processing): Loading @@ -61,21 +62,24 @@ class Processing_splitting_scaling(Processing): out_file_noerror = Path(f"{out_file.with_suffix('')}.noerror.wav") x_noerror, _ = read(in_file_noerror, nchannels=num_channels, fs=self.fs) # read metadata if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): meta_arrays = [] for meta in in_meta: meta_arrays.append(np.genfromtxt(meta, delimiter=",")) else: meta_arrays = None # cut preamble and split file out_files, file_splits, out_meta, meta_splits = self.revert_preamble_concatenation(x, fs, in_file, out_file, meta_arrays, False, logger) if self.tx_condition: in_meta_noerror = None # TODO out_files_noerror, file_splits_noerror, meta_splits_noerror = self.revert_preamble_concatenation(x_noerror, fs, in_file_noerror, out_file_noerror, in_meta_noerror, True) out_files_noerror, file_splits_noerror, out_meta_noerror, meta_splits_noerror = self.revert_preamble_concatenation(x_noerror, fs, in_file_noerror, out_file_noerror, in_meta_noerror, True) # scale splitted files if self.loudness: if self.tx_condition: # do special scaling -> measure noerror loudness and apply scaling to signal with error scaling_splits = measure_loudness(file_splits_noerror, self.out_fmt, fs, self.loudness, self.loudness_fmt, meta_splits, logger) scaling_splits = measure_loudness(file_splits_noerror, self.out_fmt, fs, self.loudness, self.loudness_fmt, meta_splits_noerror, logger) file_splits = [f*loud for f, loud in zip(file_splits, scaling_splits)] else: file_splits = adjust_loudness(file_splits, self.out_fmt, fs, self.loudness, self.loudness_fmt, meta_splits, logger) Loading @@ -91,16 +95,24 @@ class Processing_splitting_scaling(Processing): else: f_out = Path(str(f).replace(tmp_name, out_name).replace(".processing_splitting_scaling.", ".")) out_out_files.append(f_out) if meta_splits: # TODO ISM pass if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): out_out_meta = [] for f in out_out_files: oom = [] for idx in range(num_channels): f_out = f.with_suffix(f".wav.{idx}.csv") oom.append(f_out) out_out_meta.append(oom) else: out_out_meta = repeat(None) # write file(s) in tmp and output folder for of, oof, file_s, meta_s in zip(out_files, out_out_files, file_splits, meta_splits): for of, oof, file_s, om, oom, meta_s in zip(out_files, out_out_files, file_splits, out_meta, out_out_meta, meta_splits): write(of, file_s, fs) write(oof, file_s, fs) if meta_s: pass # TODO ISM if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): write_ISM_metadata_in_file(meta_s, om) write_ISM_metadata_in_file(meta_s, oom) def revert_preamble_concatenation(self, x, fs, in_file, out_file, in_meta, noerror=False, logger=None): # remove preamble and first half of signal due to repetition Loading @@ -123,14 +135,28 @@ class Processing_splitting_scaling(Processing): # set new out_files out_files = [in_file.parent.joinpath(sn).with_suffix(f".{self.name}.wav") for sn in split_names] out_meta = [in_file.parent.joinpath(sn).with_suffix(f".{self.name}.wav") for sn in split_names] # TODO ISM if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): out_meta = [] for of in out_files: of_list = [] for idx in range(x.shape[1]): of_list.append(of.with_suffix(f".wav.{idx}.csv")) out_meta.append(of_list) else: out_meta = repeat(None) if self.tx_condition: file_splits_noerror, meta_splits_noerror = concat_teardown(x, splits, self.out_fmt, fs, split_fs, logger) else: out_files = [out_file] file_splits = [x] meta_splits = repeat(None) # TODO out_meta = repeat(None) # TODO if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): meta_splits = [in_meta] out_meta = [[out_file.with_suffix(f".wav.{idx}.csv") for idx in range(x.shape[1])]] else: meta_splits = repeat(None) out_meta = repeat(None) if self.tx_condition: file_splits_noerror = None # TODO meta_splits_noerror = None # TODO Loading Loading
ivas_processing_scripts/processing/processing_splitting_scaling.py +40 −14 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ from ivas_processing_scripts.processing.processing import Processing, remove_pre from ivas_processing_scripts.audiotools import audio from ivas_processing_scripts.audiotools.audiofile import write, read from ivas_processing_scripts.audiotools.wrappers.bs1770 import loudness_norm from ivas_processing_scripts.audiotools.metadata import write_ISM_metadata_in_file class Processing_splitting_scaling(Processing): Loading @@ -61,21 +62,24 @@ class Processing_splitting_scaling(Processing): out_file_noerror = Path(f"{out_file.with_suffix('')}.noerror.wav") x_noerror, _ = read(in_file_noerror, nchannels=num_channels, fs=self.fs) # read metadata if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): meta_arrays = [] for meta in in_meta: meta_arrays.append(np.genfromtxt(meta, delimiter=",")) else: meta_arrays = None # cut preamble and split file out_files, file_splits, out_meta, meta_splits = self.revert_preamble_concatenation(x, fs, in_file, out_file, meta_arrays, False, logger) if self.tx_condition: in_meta_noerror = None # TODO out_files_noerror, file_splits_noerror, meta_splits_noerror = self.revert_preamble_concatenation(x_noerror, fs, in_file_noerror, out_file_noerror, in_meta_noerror, True) out_files_noerror, file_splits_noerror, out_meta_noerror, meta_splits_noerror = self.revert_preamble_concatenation(x_noerror, fs, in_file_noerror, out_file_noerror, in_meta_noerror, True) # scale splitted files if self.loudness: if self.tx_condition: # do special scaling -> measure noerror loudness and apply scaling to signal with error scaling_splits = measure_loudness(file_splits_noerror, self.out_fmt, fs, self.loudness, self.loudness_fmt, meta_splits, logger) scaling_splits = measure_loudness(file_splits_noerror, self.out_fmt, fs, self.loudness, self.loudness_fmt, meta_splits_noerror, logger) file_splits = [f*loud for f, loud in zip(file_splits, scaling_splits)] else: file_splits = adjust_loudness(file_splits, self.out_fmt, fs, self.loudness, self.loudness_fmt, meta_splits, logger) Loading @@ -91,16 +95,24 @@ class Processing_splitting_scaling(Processing): else: f_out = Path(str(f).replace(tmp_name, out_name).replace(".processing_splitting_scaling.", ".")) out_out_files.append(f_out) if meta_splits: # TODO ISM pass if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): out_out_meta = [] for f in out_out_files: oom = [] for idx in range(num_channels): f_out = f.with_suffix(f".wav.{idx}.csv") oom.append(f_out) out_out_meta.append(oom) else: out_out_meta = repeat(None) # write file(s) in tmp and output folder for of, oof, file_s, meta_s in zip(out_files, out_out_files, file_splits, meta_splits): for of, oof, file_s, om, oom, meta_s in zip(out_files, out_out_files, file_splits, out_meta, out_out_meta, meta_splits): write(of, file_s, fs) write(oof, file_s, fs) if meta_s: pass # TODO ISM if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): write_ISM_metadata_in_file(meta_s, om) write_ISM_metadata_in_file(meta_s, oom) def revert_preamble_concatenation(self, x, fs, in_file, out_file, in_meta, noerror=False, logger=None): # remove preamble and first half of signal due to repetition Loading @@ -123,14 +135,28 @@ class Processing_splitting_scaling(Processing): # set new out_files out_files = [in_file.parent.joinpath(sn).with_suffix(f".{self.name}.wav") for sn in split_names] out_meta = [in_file.parent.joinpath(sn).with_suffix(f".{self.name}.wav") for sn in split_names] # TODO ISM if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): out_meta = [] for of in out_files: of_list = [] for idx in range(x.shape[1]): of_list.append(of.with_suffix(f".wav.{idx}.csv")) out_meta.append(of_list) else: out_meta = repeat(None) if self.tx_condition: file_splits_noerror, meta_splits_noerror = concat_teardown(x, splits, self.out_fmt, fs, split_fs, logger) else: out_files = [out_file] file_splits = [x] meta_splits = repeat(None) # TODO out_meta = repeat(None) # TODO if isinstance(audio.fromtype(self.out_fmt), audio.ObjectBasedAudio): meta_splits = [in_meta] out_meta = [[out_file.with_suffix(f".wav.{idx}.csv") for idx in range(x.shape[1])]] else: meta_splits = repeat(None) out_meta = repeat(None) if self.tx_condition: file_splits_noerror = None # TODO meta_splits_noerror = None # TODO Loading