# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. # # Use of this source code is governed by a BSD-style license # that can be found in the LICENSE file in the root of the source # tree. An additional intellectual property rights grant can be found # in the file PATENTS. All contributing project authors may # be found in the AUTHORS file in the root of the source tree. """Input signal creator module. """ from . import exceptions from . import signal_processing class InputSignalCreator(object): """Input signal creator class. """ @classmethod def Create(cls, name, raw_params): """Creates a input signal and its metadata. Args: name: Input signal creator name. raw_params: Tuple of parameters to pass to the specific signal creator. Returns: (AudioSegment, dict) tuple. """ try: signal = {} params = {} if name == 'pure_tone': params['frequency'] = float(raw_params[0]) params['duration'] = int(raw_params[1]) signal = cls._CreatePureTone(params['frequency'], params['duration']) else: raise exceptions.InputSignalCreatorException( 'Invalid input signal creator name') # Complete metadata. params['signal'] = name return signal, params except (TypeError, AssertionError) as e: raise exceptions.InputSignalCreatorException( 'Invalid signal creator parameters: {}'.format(e)) @classmethod def _CreatePureTone(cls, frequency, duration): """ Generates a pure tone at 48000 Hz. Args: frequency: Float in (0-24000] (Hz). duration: Integer (milliseconds). Returns: AudioSegment instance. """ assert 0 < frequency <= 24000 assert duration > 0 template = signal_processing.SignalProcessingUtils.GenerateSilence( duration) return signal_processing.SignalProcessingUtils.GeneratePureTone( template, frequency)