/*
 *  Copyright (c) 2012 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.
 */

// This class provides a generator for DTMF tones. The tone generation is based
// on a sinusoid recursion. Each sinusoid is generated using a recursion
// formula; x[n] = a * x[n-1] - x[n-2], where the coefficient
// a = 2*cos(2*pi*f/fs). The recursion is started with x[-1] = 0 and
// x[-2] = sin(2*pi*f/fs). (Note that with this initialization, the resulting
// sinusoid gets a "negative" rotation; x[n] = sin(-2*pi*f/fs * n + phi), but
// kept this way due to historical reasons.)
// TODO(hlundin): Change to positive rotation?
//
// Each key on the telephone keypad corresponds to an "event", 0-15. Each event
// is mapped to a tone pair, with a low and a high frequency. There are four
// low and four high frequencies, each corresponding to a row and column,
// respectively, on the keypad as illustrated below.
//
//          1209 Hz  1336 Hz  1477 Hz  1633 Hz
// 697 Hz      1        2        3       12
// 770 Hz      4        5        6       13
// 852 Hz      7        8        9       14
// 941 Hz     10        0       11       15

#include "webrtc/modules/audio_coding/neteq/dtmf_tone_generator.h"

#include "webrtc/base/arraysize.h"
#include "webrtc/base/checks.h"

namespace webrtc {

// The filter coefficient a = 2*cos(2*pi*f/fs) for the low frequency tone, for
// sample rates fs = {8000, 16000, 32000, 48000} Hz, and events 0 through 15.
// Values are in Q14.
const int DtmfToneGenerator::kCoeff1[4][16] = {
    { 24219, 27980, 27980, 27980, 26956, 26956, 26956, 25701, 25701, 25701,
      24219, 24219, 27980, 26956, 25701, 24219 },
    { 30556, 31548, 31548, 31548, 31281, 31281, 31281, 30951, 30951, 30951,
      30556, 30556, 31548, 31281, 30951, 30556 },
    { 32210, 32462, 32462, 32462, 32394, 32394, 32394, 32311, 32311, 32311,
      32210, 32210, 32462, 32394, 32311, 32210 },
    { 32520, 32632, 32632, 32632, 32602, 32602, 32602, 32564, 32564, 32564,
      32520, 32520, 32632, 32602, 32564, 32520 } };

// The filter coefficient a = 2*cos(2*pi*f/fs) for the high frequency tone, for
// sample rates fs = {8000, 16000, 32000, 48000} Hz, and events 0 through 15.
// Values are in Q14.
const int DtmfToneGenerator::kCoeff2[4][16] = {
    { 16325, 19073, 16325, 13085, 19073, 16325, 13085, 19073, 16325, 13085,
      19073, 13085, 9315, 9315, 9315, 9315},
    { 28361, 29144, 28361, 27409, 29144, 28361, 27409, 29144, 28361, 27409,
      29144, 27409, 26258, 26258, 26258, 26258},
    { 31647, 31849, 31647, 31400, 31849, 31647, 31400, 31849, 31647, 31400,
      31849, 31400, 31098, 31098, 31098, 31098},
    { 32268, 32359, 32268, 32157, 32359, 32268, 32157, 32359, 32268, 32157,
      32359, 32157, 32022, 32022, 32022, 32022} };

// The initialization value x[-2] = sin(2*pi*f/fs) for the low frequency tone,
// for sample rates fs = {8000, 16000, 32000, 48000} Hz, and events 0-15.
// Values are in Q14.
const int DtmfToneGenerator::kInitValue1[4][16] = {
    { 11036, 8528, 8528, 8528, 9315, 9315, 9315, 10163, 10163, 10163, 11036,
      11036, 8528, 9315, 10163, 11036},
    { 5918, 4429, 4429, 4429, 4879, 4879, 4879, 5380, 5380, 5380, 5918, 5918,
      4429, 4879, 5380, 5918},
    { 3010, 2235, 2235, 2235, 2468, 2468, 2468, 2728, 2728, 2728, 3010, 3010,
      2235, 2468, 2728, 3010},
    { 2013, 1493, 1493, 1493, 1649, 1649, 1649, 1823, 1823, 1823, 2013, 2013,
      1493, 1649, 1823, 2013 } };

// The initialization value x[-2] = sin(2*pi*f/fs) for the high frequency tone,
// for sample rates fs = {8000, 16000, 32000, 48000} Hz, and events 0-15.
// Values are in Q14.
const int DtmfToneGenerator::kInitValue2[4][16] = {
    { 14206, 13323, 14206, 15021, 13323, 14206, 15021, 13323, 14206, 15021,
      13323, 15021, 15708, 15708, 15708, 15708},
    { 8207, 7490, 8207, 8979, 7490, 8207, 8979, 7490, 8207, 8979, 7490, 8979,
      9801, 9801, 9801, 9801},
    { 4249, 3853, 4249, 4685, 3853, 4249, 4685, 3853, 4249, 4685, 3853, 4685,
      5164, 5164, 5164, 5164},
    { 2851, 2582, 2851, 3148, 2582, 2851, 3148, 2582, 2851, 3148, 2582, 3148,
      3476, 3476, 3476, 3476} };

// Amplitude multipliers for volume values 0 through 63, corresponding to
// 0 dBm0 through -63 dBm0. Values are in Q14.
// for a in range(0, 64):
//   print round(16141.0 * 10**(-float(a)/20))
const int DtmfToneGenerator::kAmplitude[64] = {
    16141, 14386, 12821, 11427, 10184, 9077, 8090, 7210, 6426, 5727, 5104, 4549,
    4054, 3614, 3221, 2870, 2558, 2280, 2032, 1811, 1614, 1439, 1282, 1143,
    1018, 908, 809, 721, 643, 573, 510, 455, 405, 361, 322, 287, 256, 228, 203,
    181, 161, 144, 128, 114, 102, 91, 81, 72, 64, 57, 51, 45, 41, 36, 32, 29,
    26, 23, 20, 18, 16, 14, 13, 11 };

// Constructor.
DtmfToneGenerator::DtmfToneGenerator()
    : initialized_(false),
      coeff1_(0),
      coeff2_(0),
      amplitude_(0) {
}

// Initialize the DTMF generator with sample rate fs Hz (8000, 16000, 32000,
// 48000), event (0-15) and attenuation (0-36 dB).
// Returns 0 on success, otherwise an error code.
int DtmfToneGenerator::Init(int fs, int event, int attenuation) {
  initialized_ = false;
  size_t fs_index;
  if (fs == 8000) {
    fs_index = 0;
  } else if (fs == 16000) {
    fs_index = 1;
  } else if (fs == 32000) {
    fs_index = 2;
  } else if (fs == 48000) {
    fs_index = 3;
  } else {
    RTC_NOTREACHED();
    fs_index = 1;  // Default to 8000 Hz.
  }

  if (event < 0 || event > 15) {
    return kParameterError;  // Invalid event number.
  }

  if (attenuation < 0 || attenuation > 63) {
    return kParameterError;  // Invalid attenuation.
  }

  // Look up oscillator coefficient for low and high frequencies.
  RTC_DCHECK_LE(0, fs_index);
  RTC_DCHECK_GT(arraysize(kCoeff1), fs_index);
  RTC_DCHECK_GT(arraysize(kCoeff2), fs_index);
  RTC_DCHECK_LE(0, event);
  RTC_DCHECK_GT(arraysize(kCoeff1[fs_index]), event);
  RTC_DCHECK_GT(arraysize(kCoeff2[fs_index]), event);
  coeff1_ = kCoeff1[fs_index][event];
  coeff2_ = kCoeff2[fs_index][event];

  // Look up amplitude multiplier.
  RTC_DCHECK_LE(0, attenuation);
  RTC_DCHECK_GT(arraysize(kAmplitude), attenuation);
  amplitude_ = kAmplitude[attenuation];

  // Initialize sample history.
  RTC_DCHECK_LE(0, fs_index);
  RTC_DCHECK_GT(arraysize(kInitValue1), fs_index);
  RTC_DCHECK_GT(arraysize(kInitValue2), fs_index);
  RTC_DCHECK_LE(0, event);
  RTC_DCHECK_GT(arraysize(kInitValue1[fs_index]), event);
  RTC_DCHECK_GT(arraysize(kInitValue2[fs_index]), event);
  sample_history1_[0] = kInitValue1[fs_index][event];
  sample_history1_[1] = 0;
  sample_history2_[0] = kInitValue2[fs_index][event];
  sample_history2_[1] = 0;

  initialized_ = true;
  return 0;
}

// Reset tone generator to uninitialized state.
void DtmfToneGenerator::Reset() {
  initialized_ = false;
}

// Generate num_samples of DTMF signal and write to |output|.
int DtmfToneGenerator::Generate(size_t num_samples,
                                AudioMultiVector* output) {
  if (!initialized_) {
    return kNotInitialized;
  }

  if (!output) {
    return kParameterError;
  }

  output->AssertSize(num_samples);
  for (size_t i = 0; i < num_samples; ++i) {
    // Use recursion formula y[n] = a * y[n - 1] - y[n - 2].
    int16_t temp_val_low = ((coeff1_ * sample_history1_[1] + 8192) >> 14)
        - sample_history1_[0];
    int16_t temp_val_high = ((coeff2_ * sample_history2_[1] + 8192) >> 14)
        - sample_history2_[0];

    // Update recursion memory.
    sample_history1_[0] = sample_history1_[1];
    sample_history1_[1] = temp_val_low;
    sample_history2_[0] = sample_history2_[1];
    sample_history2_[1] = temp_val_high;

    // Attenuate the low frequency tone 3 dB.
    int32_t temp_val =
        kAmpMultiplier * temp_val_low + temp_val_high * (1 << 15);
    // Normalize the signal to Q14 with proper rounding.
    temp_val = (temp_val + 16384) >> 15;
    // Scale the signal to correct volume.
    (*output)[0][i] =
        static_cast<int16_t>((temp_val * amplitude_ + 8192) >> 14);
  }
  // Copy first channel to all other channels.
  for (size_t channel = 1; channel < output->Channels(); ++channel) {
    output->CopyChannel(0, channel);
  }

  return static_cast<int>(num_samples);
}

bool DtmfToneGenerator::initialized() const {
  return initialized_;
}

}  // namespace webrtc
