Source code for dcase_util.processors.metadata

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function, absolute_import

from dcase_util.containers import MetaDataContainer
from dcase_util.processors import Processor, ProcessingChainItemType


[docs]class MetadataReadingProcessor(Processor): input_type = ProcessingChainItemType.NONE #: Input data type output_type = ProcessingChainItemType.METADATA #: Output data type
[docs] def __init__(self, *args, **kwargs): """Constructor""" # Run super init to call init of mixins too super(MetadataReadingProcessor, self).__init__(*args, **kwargs)
[docs] def process(self, data=None, filename=None, focus_filename=None, focus_start_seconds=None, focus_stop_seconds=None, focus_duration_seconds=None, zero_time=None, trim=None, store_processing_chain=False, **kwargs): """Meta data reading. Parameters ---------- data : MetaDataContainer Input meta data filename : str Filename of the meta data container to load. focus_start_seconds : float > 0.0 Segment start, seconds focus_stop_seconds : float > 0.0 Segment end, seconds focus_duration_seconds : float Segment duration, seconds focus_filename : str Filename to filter zero_time : bool Convert timestamps in respect to the segment start trim : bool Trim event onsets and offset according to segment start and stop times. store_processing_chain : bool Store processing chain to data container returned Default value False """ if data is None and self.input_type == ProcessingChainItemType.NONE: container = MetaDataContainer() if filename: container.load(filename=filename) if focus_filename is not None: filtered = container.filter(filename=focus_filename) container.update(filtered) if focus_start_seconds is not None and focus_duration_seconds is not None: filtered = container.filter_time_segment( start=focus_start_seconds, duration=focus_duration_seconds, zero_time=zero_time, trim=trim ) container.update(filtered) elif focus_start_seconds is not None and focus_stop_seconds is not None: filtered = container.filter_time_segment( start=focus_start_seconds, stop=focus_stop_seconds, zero_time=zero_time, trim=trim ) container.update(filtered) if store_processing_chain: processing_chain_item = self.get_processing_chain_item() if 'process_parameters' not in processing_chain_item: processing_chain_item['process_parameters'] = {} processing_chain_item['process_parameters']['filename'] = filename processing_chain_item['process_parameters']['focus_filename'] = focus_filename processing_chain_item['process_parameters']['focus_start_seconds'] = focus_start_seconds processing_chain_item['process_parameters']['focus_duration_seconds'] = focus_duration_seconds processing_chain_item['process_parameters']['focus_start_seconds'] = focus_start_seconds processing_chain_item['process_parameters']['focus_stop_seconds'] = focus_stop_seconds # Push chain item into processing chain stored in the container container.push_processing_chain_item(**processing_chain_item) return container else: message = '{name}: Wrong input data type, type required [{input_type}].'.format( name=self.__class__.__name__, input_type=self.input_type) self.logger.exception(message) raise ValueError(message)