Commit 74016ebc authored by Jan Kiene's avatar Jan Kiene
Browse files

add postamble to be added after concatenation

parent de60c3bb
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -184,6 +184,8 @@ def get_preprocessing_2(cfg: TestConfig) -> dict:
                "concatenation_order": pre2_cfg.get("concatenation_order", None),
                "preamble": pre2_cfg.get("preamble", 0),
                "pad_noise_preamble": pre2_cfg.get("preamble_noise", False),
                "postamble": pre2_cfg.get("postamble", 0),
                "pad_noise_postamble": pre2_cfg.get("preamble_noise", False),
                "background_noise": background,
                "in_mask": pre2_cfg.get("mask", None),
                "multiprocessing": cfg.multiprocessing,
@@ -495,6 +497,7 @@ def get_processing_chain(
                "out_fmt": post_fmt,  # no rendering here
                "concatenate_input": pre2_cfg.get("concatenate_input", False),
                "preamble": pre2_cfg.get("preamble", 0),
                "postamble": pre2_cfg.get("postamble", 0),
                "repeat_signal": pre2_cfg.get("repeat_signal", False),
                "loudness": post_cfg.get("loudness", None),
                "loudness_fmt": post_cfg.get("loudness_fmt", None),
+12 −2
Original line number Diff line number Diff line
@@ -85,9 +85,9 @@ class Preprocessing2(Processing):
            audio_object.metadata_files = meta_files
            audio_object.obect_pos = metadata

        if self.preamble:
        # add preamble
        if self.preamble > 0:
            logger.debug(f"Add preamble of length {self.preamble}ms")
            # add preamble to actual signal
            audio_object.audio = trim(
                audio_object.audio,
                audio_object.fs,
@@ -111,6 +111,16 @@ class Preprocessing2(Processing):
                (audio_object.audio, audio_object.audio), axis=0
            )

        # add postamble - do ater signal repetition as this is just for ensuring equal lengths between in- and output signals
        if self.postamble > 0:
            logger.debug(f"Add postamble of length {self.postamble}ms")
            audio_object.audio = trim(
                audio_object.audio,
                audio_object.fs,
                (0, -self.postamble),
                self.pad_noise_postamble,
            )

        # save file
        write(out_file, audio_object.audio, fs=audio_object.fs)

+20 −14
Original line number Diff line number Diff line
@@ -161,7 +161,7 @@ def concat_setup(cfg: TestConfig, chain, logger: logging.Logger):
    logger.info(f"Splits written to file {splits_info_file}")


def concat_teardown(x, splits, out_fmt, fs, in_fs, meta, logger: logging.Logger):
def concat_teardown(x, splits, out_fmt, fs, in_fs, meta, len_postamble_ms, logger: logging.Logger):
    if not splits:
        raise ValueError("Splitting not possible without split marker")

@@ -182,9 +182,12 @@ def concat_teardown(x, splits, out_fmt, fs, in_fs, meta, logger: logging.Logger)
        raise ValueError(
            f"Last split index {splits[-1]} is larger than the signal length {len(x)}"
        )
    elif splits[-1] < len(x):
    elif splits[-1] < len(x) - (postamble_len_samples := (len_postamble_ms * fs_old) // 1000):
        msg_file_len = len(x)
        if len_postamble_ms > 0:
            msg_file_len = f"(minus postamble length of {postamble_len_samples}): {len(x) - postamble_len_samples}"
        warn(
            f"Last split index {splits[-1]} is smaller that the signal length {len(x)}"
            f"Last split index {splits[-1]} is smaller than the signal length {msg_file_len}"
        )

    split_old = 0
@@ -397,7 +400,7 @@ def process_item(
                copyfile(ppm, out_meta[idx])


def remove_preamble(x, out_fmt, fs, repeat_signal, preamble, meta, logger):
def remove_preamble(x, out_fmt, fs, repeat_signal, preamble_len_ms, postamble_len_ms, meta, logger):
    # remove preamble for ISM metadata
    if out_fmt.startswith("ISM"):
        # cut first half of the metadata
@@ -405,20 +408,23 @@ def remove_preamble(x, out_fmt, fs, repeat_signal, preamble, meta, logger):
            meta = [m[int(len(m) / 2) :, :] for m in meta]

        # remove preamble
        if preamble:
            meta = add_remove_preamble(meta, preamble, add=False)
        if preamble_len_ms > 0:
            meta = add_remove_preamble(meta, preamble_len_ms, add=False)

    # remove first half of signal
    # get number of samples to cut from start
    trim_len_samples = (preamble_len_ms * fs) // 1000
    if repeat_signal:
        if logger:
            logger.debug("Remove first half of signal")
        x = x[int(len(x) / 2) :, :]
        
    # remove preamble
    if preamble:
        if logger:
        # need to subtract the postamble length before getting half of signal length - it was added after concatenation
        postamble_len_samples = (postamble_len_ms * fs) // 1000
        trim_len_samples += (len(x) - postamble_len_samples) // 2

    if trim_len_samples > 0 and logger:
        logger.debug("Remove preamble")
        x = trim(x, fs, (preamble, 0))
    
    x = trim(x, fs, (trim_len_samples, 0), samples=True)

    return x, meta

+2 −1
Original line number Diff line number Diff line
@@ -198,6 +198,7 @@ class Processing_splitting_scaling(Processing):
                self.fs,
                self.repeat_signal,
                self.preamble,
                self.postamble,
                in_meta,
                logger,
            )
@@ -214,7 +215,7 @@ class Processing_splitting_scaling(Processing):

            # split file
            file_splits, meta_splits = concat_teardown(
                x, splits, self.out_fmt, fs, split_fs, in_meta, logger
                x, splits, self.out_fmt, fs, split_fs, in_meta, self.postamble, logger
            )

            # set new out_files