def process_corpus(self, corpus, output_path, frame_size=400, hop_size=160, sr=None):
        """
        Process all utterances of the given corpus and save the processed features in a feature-container.
        The utterances are processed in **offline** mode so the full utterance in one go.

        Args:
            corpus (Corpus): The corpus to process the utterances from.
            output_path (str): A path to save the feature-container to.
            frame_size (int): The number of samples per frame.
            hop_size (int): The number of samples between two frames.
            sr (int): Use the given sampling rate. If None uses the native sampling rate from the underlying data.

        Returns:
            FeatureContainer: The feature-container containing the processed features.
        """

        def processing_func(utterance, feat_container, frame_size, hop_size, sr, corpus):
            data = self.process_utterance(utterance, frame_size=frame_size, hop_size=hop_size, sr=sr, corpus=corpus)
            feat_container.set(utterance.idx, data)

        return self._process_corpus(corpus, output_path, processing_func,
                                    frame_size=frame_size, hop_size=hop_size, sr=sr)