| # 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) |