content: /*
   * Copyright (C) 2008 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package android.media;
  
  import android.annotation.UnsupportedAppUsage;
  
  
  
  /**
   * This class provides methods to play DTMF tones (ITU-T Recommendation Q.23),
   * call supervisory tones (3GPP TS 22.001, CEPT) and proprietary tones (3GPP TS 31.111).
   * Depending on call state and routing options, tones are mixed to the downlink audio
   * or output to the speaker phone or headset.
   * This API is not for generating tones over the uplink audio path.
   */
  public class ToneGenerator
  {
  
      /* Values for toneType parameter of ToneGenerator() constructor */
      /*
       * List of all available tones: These constants must be kept consistant with
       * the enum in ToneGenerator C++ class.     */
  
      /**
       * Default value for an unknown or unspecified tone.
       * @hide
       */
      public static final int TONE_UNKNOWN = -1;
  
      /**
       * DTMF tone for key 0: 1336Hz, 941Hz, continuous</p>
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_0 = 0;
      /**
       * DTMF tone for key 1: 1209Hz, 697Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_1 = 1;
      /**
       * DTMF tone for key 2: 1336Hz, 697Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_2 = 2;
      /**
       * DTMF tone for key 3: 1477Hz, 697Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_3 = 3;
      /**
       * DTMF tone for key 4: 1209Hz, 770Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_4 = 4;
      /**
       * DTMF tone for key 5: 1336Hz, 770Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_5 = 5;
      /**
       * DTMF tone for key 6: 1477Hz, 770Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_6 = 6;
      /**
       * DTMF tone for key 7: 1209Hz, 852Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_7 = 7;
      /**
       * DTMF tone for key 8: 1336Hz, 852Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_8 = 8;
      /**
       * DTMF tone for key 9: 1477Hz, 852Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_9 = 9;
      /**
       * DTMF tone for key *: 1209Hz, 941Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_S = 10;
      /**
       * DTMF tone for key #: 1477Hz, 941Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_P = 11;
      /**
       * DTMF tone for key A: 1633Hz, 697Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_A = 12;
      /**
       * DTMF tone for key B: 1633Hz, 770Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_B = 13;
      /**
       * DTMF tone for key C: 1633Hz, 852Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_C = 14;
      /**
       * DTMF tone for key D: 1633Hz, 941Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_DTMF_D = 15;
      /**
       * Call supervisory tone, Dial tone:
       *      CEPT:           425Hz, continuous
       *      ANSI (IS-95):   350Hz+440Hz, continuous
       *      JAPAN:          400Hz, continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_DIAL = 16;
      /**
       * Call supervisory tone, Busy:
       *      CEPT:           425Hz, 500ms ON, 500ms OFF...
       *      ANSI (IS-95):   480Hz+620Hz, 500ms ON, 500ms OFF...
       *      JAPAN:          400Hz, 500ms ON, 500ms OFF...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_BUSY = 17;
      /**
       * Call supervisory tone, Congestion:
       *      CEPT, JAPAN:    425Hz, 200ms ON, 200ms OFF...
       *      ANSI (IS-95):   480Hz+620Hz, 250ms ON, 250ms OFF...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_CONGESTION = 18;
      /**
       * Call supervisory tone, Radio path acknowlegment :
       *      CEPT, ANSI:    425Hz, 200ms ON
       *      JAPAN:         400Hz, 1s ON, 2s OFF...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_RADIO_ACK = 19;
      /**
       * Call supervisory tone, Radio path not available: 425Hz, 200ms ON, 200 OFF 3 bursts
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_RADIO_NOTAVAIL = 20;
      /**
       * Call supervisory tone, Error/Special info: 950Hz+1400Hz+1800Hz, 330ms ON, 1s OFF...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_ERROR = 21;
      /**
       * Call supervisory tone, Call Waiting:
       *      CEPT, JAPAN:    425Hz, 200ms ON, 600ms OFF, 200ms ON, 3s OFF...
       *      ANSI (IS-95):   440 Hz, 300 ms ON, 9.7 s OFF,
       *                      (100 ms ON, 100 ms OFF, 100 ms ON, 9.7s OFF ...)
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_CALL_WAITING = 22;
      /**
       * Call supervisory tone, Ring Tone:
       *      CEPT, JAPAN:    425Hz, 1s ON, 4s OFF...
       *      ANSI (IS-95):   440Hz + 480Hz, 2s ON, 4s OFF...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_RINGTONE = 23;
      /**
       * Proprietary tone, general beep: 400Hz+1200Hz, 35ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_PROP_BEEP = 24;
      /**
       * Proprietary tone, positive acknowlegement: 1200Hz, 100ms ON, 100ms OFF 2 bursts
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_PROP_ACK = 25;
      /**
       * Proprietary tone, negative acknowlegement: 300Hz+400Hz+500Hz, 400ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_PROP_NACK = 26;
      /**
       * Proprietary tone, prompt tone: 400Hz+1200Hz, 200ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int  TONE_PROP_PROMPT = 27;
      /**
       * Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_PROP_BEEP2 = 28;
      /**
       * Call supervisory tone (IS-95), intercept tone: alternating 440 Hz and 620 Hz tones,
       * each on for 250 ms
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_INTERCEPT = 29;
      /**
       * Call supervisory tone (IS-95), abbreviated intercept: intercept tone limited to 4 seconds
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_INTERCEPT_ABBREV = 30;
      /**
       * Call supervisory tone (IS-95), abbreviated congestion: congestion tone limited to 4 seconds
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_CONGESTION_ABBREV = 31;
      /**
       * Call supervisory tone (IS-95), confirm tone: a 350 Hz tone added to a 440 Hz tone
       * repeated 3 times in a 100 ms on, 100 ms off cycle
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_CONFIRM = 32;
      /**
       * Call supervisory tone (IS-95), pip tone: four bursts of 480 Hz tone (0.1 s on, 0.1 s off).
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_SUP_PIP = 33;
      /**
       *  CDMA Dial tone : 425Hz  continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_DIAL_TONE_LITE = 34;
      /**
       * CDMA USA Ringback: 440Hz+480Hz 2s ON, 4000 OFF ...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_NETWORK_USA_RINGBACK = 35;
      /**
       *  CDMA Intercept tone: 440Hz 250ms ON, 620Hz 250ms ON ...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_INTERCEPT = 36;
      /**
       * CDMA Abbr Intercept tone: 440Hz 250ms ON, 620Hz 250ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_ABBR_INTERCEPT = 37;
      /**
       * CDMA Reorder tone: 480Hz+620Hz 250ms ON, 250ms OFF...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_REORDER = 38;
      /**
       *
       * CDMA Abbr Reorder tone: 480Hz+620Hz 250ms ON, 250ms OFF repeated for 8 times
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_ABBR_REORDER = 39;
      /**
       * CDMA Network Busy tone: 480Hz+620Hz 500ms ON, 500ms OFF continuous
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_NETWORK_BUSY = 40;
      /**
       * CDMA Confirm tone: 350Hz+440Hz 100ms ON, 100ms OFF repeated for 3 times
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CONFIRM = 41;
      /**
       *
       * CDMA answer tone: silent tone - defintion Frequency 0, 0ms ON, 0ms OFF
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_ANSWER = 42;
      /**
       *
       * CDMA Network Callwaiting tone: 440Hz 300ms ON
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_NETWORK_CALLWAITING = 43;
      /**
       * CDMA PIP tone: 480Hz 100ms ON, 100ms OFF repeated for 4 times
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_PIP = 44;
      /**
       *  ISDN Call Signal Normal tone: {2091Hz 32ms ON, 2556 64ms ON} 20 times,
       *  2091 32ms ON, 2556 48ms ON, 4s OFF
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL = 45;
      /**
       *  ISDN Call Signal Intergroup tone: {2091Hz 32ms ON, 2556 64ms ON} 8 times,
       * 2091Hz 32ms ON, 400ms OFF, {2091Hz 32ms ON, 2556Hz 64ms ON} times,
       * 2091Hz 32ms ON, 4s OFF.
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP = 46;
      /**
       * ISDN Call Signal SP PRI tone:{2091Hz 32ms ON, 2556 64ms ON} 4 times
       * 2091Hz 16ms ON, 200ms OFF, {2091Hz 32ms ON, 2556Hz 64ms ON} 4 times,
       * 2091Hz 16ms ON, 200ms OFF
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI = 47;
      /**
       * ISDN Call sign PAT3 tone: silent tone
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 = 48;
      /**
       * ISDN Ping Ring tone: {2091Hz 32ms ON, 2556Hz 64ms ON} 5 times
       * 2091Hz 20ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING = 49;
      /**
       *
       * ISDN Pat5 tone: silent tone
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 = 50;
      /**
       *
       * ISDN Pat6 tone: silent tone
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 = 51;
      /**
       * ISDN Pat7 tone: silent tone
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 = 52;
      /**
       * TONE_CDMA_HIGH_L tone: {3700Hz 25ms, 4000Hz 25ms} 40 times
       * 4000ms OFF, Repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_L = 53;
      /**
       * TONE_CDMA_MED_L tone: {2600Hz 25ms, 2900Hz 25ms} 40 times
       * 4000ms OFF, Repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_L = 54;
      /**
       * TONE_CDMA_LOW_L tone: {1300Hz 25ms, 1450Hz 25ms} 40 times,
       * 4000ms OFF, Repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_L = 55;
      /**
       * CDMA HIGH SS tone: {3700Hz 25ms, 4000Hz 25ms} repeat 16 times,
       * 400ms OFF, repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_SS = 56;
      /**
       * CDMA MED SS tone: {2600Hz 25ms, 2900Hz 25ms} repeat 16 times,
       * 400ms OFF, repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_SS = 57;
      /**
       * CDMA LOW SS tone: {1300z 25ms, 1450Hz 25ms} repeat 16 times,
       * 400ms OFF, repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_SS = 58;
      /**
       * CDMA HIGH SSL tone: {3700Hz 25ms, 4000Hz 25ms} 8 times,
       * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} repeat 8 times,
       * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} repeat 16 times,
       * 4000ms OFF, repeat ...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_SSL = 59;
      /**
       * CDMA MED SSL tone: {2600Hz 25ms, 2900Hz 25ms} 8 times,
       * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} repeat 8 times,
       * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} repeat 16 times,
       * 4000ms OFF, repeat ...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_SSL = 60;
      /**
       * CDMA LOW SSL tone: {1300Hz 25ms, 1450Hz 25ms} 8 times,
       * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} repeat 8 times,
       * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} repeat 16 times,
       * 4000ms OFF, repeat ...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_SSL = 61;
      /**
       * CDMA HIGH SS2 tone: {3700Hz 25ms, 4000Hz 25ms} 20 times,
       * 1000ms OFF, {3700Hz 25ms, 4000Hz 25ms} 20 times,
       * 3000ms OFF, repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_SS_2 = 62;
      /**
       * CDMA MED SS2 tone: {2600Hz 25ms, 2900Hz 25ms} 20 times,
       * 1000ms OFF, {2600Hz 25ms, 2900Hz 25ms} 20 times,
       * 3000ms OFF, repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_SS_2 = 63;
      /**
       * CDMA LOW SS2 tone: {1300Hz 25ms, 1450Hz 25ms} 20 times,
       * 1000ms OFF, {1300Hz 25ms, 1450Hz 25ms} 20 times,
       * 3000ms OFF, repeat ....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_SS_2 = 64;
      /**
       *  CDMA HIGH SLS tone: {3700Hz 25ms, 4000Hz 25ms} 10 times,
       *  500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 20 times, 500ms OFF,
       *  {3700Hz 25ms, 4000Hz 25ms} 10 times, 3000ms OFF, REPEAT
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_SLS = 65;
      /**
       *  CDMA MED  SLS tone: {2600Hz 25ms, 2900Hz 25ms} 10 times,
       *  500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 20 times, 500ms OFF,
       *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 3000ms OFF, REPEAT
       *
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_SLS = 66;
      /**
       *  CDMA LOW SLS tone: {1300Hz 25ms, 1450Hz 25ms} 10 times,
       *  500ms OFF, {1300Hz 25ms, 1450Hz 25ms} 20 times, 500ms OFF,
       *  {1300Hz 25ms, 1450Hz 25ms} 10 times, 3000ms OFF, REPEAT
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_SLS = 67;
      /**
       *  CDMA HIGH S X4 tone: {3700Hz 25ms, 4000Hz 25ms} 10 times,
       *  500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF,
       *  {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF,
       *  {3700Hz 25ms, 4000Hz 25ms} 10 times, 2500ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_S_X4 = 68;
      /**
       *  CDMA MED S X4 tone: {2600Hz 25ms, 2900Hz 25ms} 10 times,
       *  500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
       *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
       *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 2500ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_S_X4 = 69;
      /**
       *  CDMA LOW  S X4 tone: {2600Hz 25ms, 2900Hz 25ms} 10 times,
       *  500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
       *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
       *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 2500ms OFF, REPEAT....
       *
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_S_X4 = 70;
      /**
       * CDMA HIGH PBX L: {3700Hz 25ms, 4000Hz 25ms}20 times,
       * 2000ms OFF,  REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_PBX_L = 71;
      /**
       *  CDMA MED PBX L: {2600Hz 25ms, 2900Hz 25ms}20 times,
       * 2000ms OFF,  REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_PBX_L = 72;
      /**
       * CDMA LOW PBX L: {1300Hz 25ms,1450Hz 25ms}20 times,
       * 2000ms OFF,  REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_PBX_L = 73;
      /**
       * CDMA HIGH PBX SS tone: {3700Hz 25ms, 4000Hz 25ms} 8 times
       * 200 ms OFF, {3700Hz 25ms 4000Hz 25ms}8 times,
       * 2000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_PBX_SS = 74;
      /**
       * CDMA MED PBX SS tone: {2600Hz 25ms, 2900Hz 25ms} 8 times
       * 200 ms OFF, {2600Hz 25ms 2900Hz 25ms}8 times,
       * 2000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_PBX_SS = 75;
      /**
       * CDMA LOW PBX SS tone: {1300Hz 25ms, 1450Hz 25ms} 8 times
       * 200 ms OFF, {1300Hz 25ms 1450Hz 25ms}8 times,
       * 2000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_PBX_SS = 76;
      /**
       * CDMA HIGH PBX SSL tone:{3700Hz 25ms, 4000Hz 25ms} 8 times
       * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 8 times, 200ms OFF,
       * {3700Hz 25ms, 4000Hz 25ms} 16 times, 1000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_PBX_SSL = 77;
      /**
       * CDMA MED PBX SSL tone:{2600Hz 25ms, 2900Hz 25ms} 8 times
       * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 8 times, 200ms OFF,
       * {2600Hz 25ms, 2900Hz 25ms} 16 times, 1000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_PBX_SSL = 78;
      /**
       * CDMA LOW PBX SSL tone:{1300Hz 25ms, 1450Hz 25ms} 8 times
       * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 8 times, 200ms OFF,
       * {1300Hz 25ms, 1450Hz 25ms} 16 times, 1000ms OFF, REPEAT....
       *
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_PBX_SSL = 79;
      /**
       * CDMA HIGH PBX SSL tone:{3700Hz 25ms, 4000Hz 25ms} 8 times
       * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 16 times, 200ms OFF,
       * {3700Hz 25ms, 4000Hz 25ms} 8 times, 1000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_PBX_SLS = 80;
      /**
       * CDMA HIGH PBX SLS tone:{2600Hz 25ms, 2900Hz 25ms} 8 times
       * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 16 times, 200ms OFF,
       * {2600Hz 25ms, 2900Hz 25ms} 8 times, 1000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_PBX_SLS = 81;
      /**
       * CDMA HIGH PBX SLS tone:{1300Hz 25ms, 1450Hz 25ms} 8 times
       * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 16 times, 200ms OFF,
       * {1300Hz 25ms, 1450Hz 25ms} 8 times, 1000ms OFF, REPEAT....
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_PBX_SLS = 82;
      /**
       * CDMA HIGH PBX X S4 tone: {3700Hz 25ms 4000Hz 25ms} 8 times,
       * 200ms OFF, {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF,
       * {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF,
       * {3700Hz 25ms 4000Hz 25ms} 8 times, 800ms OFF, REPEAT...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_HIGH_PBX_S_X4 = 83;
      /**
       * CDMA MED PBX X S4 tone: {2600Hz 25ms 2900Hz 25ms} 8 times,
       * 200ms OFF, {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF,
       * {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF,
       * {2600Hz 25ms 2900Hz 25ms} 8 times, 800ms OFF, REPEAT...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_MED_PBX_S_X4 = 84;
      /**
       * CDMA LOW PBX X S4 tone: {1300Hz 25ms 1450Hz 25ms} 8 times,
       * 200ms OFF, {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF,
       * {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF,
       * {1300Hz 25ms 1450Hz 25ms} 8 times, 800ms OFF, REPEAT...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_LOW_PBX_S_X4 = 85;
      /**
       * CDMA Alert Network Lite tone: 1109Hz 62ms ON, 784Hz 62ms ON, 740Hz 62ms ON
       * 622Hz 62ms ON, 1109Hz 62ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_ALERT_NETWORK_LITE = 86;
      /**
       * CDMA Alert Auto Redial tone: {1245Hz 62ms ON, 659Hz 62ms ON} 3 times,
       * 1245 62ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_ALERT_AUTOREDIAL_LITE = 87;
      /**
       * CDMA One Min Beep tone: 1150Hz+770Hz 400ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_ONE_MIN_BEEP = 88;
      /**
       *
       * CDMA KEYPAD Volume key lite tone: 941Hz+1477Hz 120ms ON
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_KEYPAD_VOLUME_KEY_LITE = 89;
      /**
       * CDMA PRESSHOLDKEY LITE tone: 587Hz 375ms ON, 1175Hz 125ms ON
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_PRESSHOLDKEY_LITE = 90;
      /**
       * CDMA ALERT INCALL LITE tone: 587Hz 62ms, 784 62ms, 831Hz 62ms,
       * 784Hz 62ms, 1109 62ms, 784Hz 62ms, 831Hz 62ms, 784Hz 62ms
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_ALERT_INCALL_LITE = 91;
      /**
       * CDMA EMERGENCY RINGBACK tone: {941Hz 125ms ON, 10ms OFF} 3times
       * 4990ms OFF, REPEAT...
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_EMERGENCY_RINGBACK = 92;
      /**
       * CDMA ALERT CALL GUARD tone: {1319Hz 125ms ON, 125ms OFF} 3 times
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_ALERT_CALL_GUARD = 93;
      /**
       * CDMA SOFT ERROR LITE  tone: 1047Hz 125ms ON, 370Hz 125ms
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_SOFT_ERROR_LITE = 94;
      /**
       * CDMA CALLDROP LITE tone: 1480Hz 125ms, 1397Hz 125ms, 784Hz 125ms
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_CALLDROP_LITE = 95;
      /**
       * CDMA_NETWORK_BUSY_ONE_SHOT tone: 425Hz 500ms ON, 500ms OFF.
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_NETWORK_BUSY_ONE_SHOT = 96;
      /**
       * CDMA_ABBR_ALERT tone: 1150Hz+770Hz 400ms ON
       * @see #ToneGenerator(int, int)
       */
      public static final int    TONE_CDMA_ABBR_ALERT = 97;
      /**
       * CDMA_SIGNAL_OFF - silent tone
       *
       * @see #ToneGenerator(int, int)
       */
      public static final int TONE_CDMA_SIGNAL_OFF = 98;
  
      /** Maximum volume, for use with {@link #ToneGenerator(int,int)} */
      public static final int MAX_VOLUME = 100;
      /** Minimum volume setting, for use with {@link #ToneGenerator(int,int)} */
      public static final int MIN_VOLUME = 0;
  
  
      /**
       * ToneGenerator class contructor specifying output stream type and volume.
       *
       * @param streamType The streame type used for tone playback (e.g. STREAM_MUSIC).
       * @param volume     The volume of the tone, given in percentage of maximum volume (from 0-100).
       *
       */
      public ToneGenerator(int streamType, int volume) {
          native_setup(streamType, volume);
      }
  
      /**
       * This method starts the playback of a tone of the specified type.
       * only one tone can play at a time: if a tone is playing while this method is called,
       * this tone is stopped and replaced by the one requested.
       * @param toneType   The type of tone generated chosen from the following list:
       * <ul>
       * <li>{@link #TONE_DTMF_0}
       * <li>{@link #TONE_DTMF_1}
       * <li>{@link #TONE_DTMF_2}
       * <li>{@link #TONE_DTMF_3}
       * <li>{@link #TONE_DTMF_4}
       * <li>{@link #TONE_DTMF_5}
       * <li>{@link #TONE_DTMF_6}
       * <li>{@link #TONE_DTMF_7}
       * <li>{@link #TONE_DTMF_8}
       * <li>{@link #TONE_DTMF_9}
       * <li>{@link #TONE_DTMF_A}
       * <li>{@link #TONE_DTMF_B}
       * <li>{@link #TONE_DTMF_C}
       * <li>{@link #TONE_DTMF_D}
       * <li>{@link #TONE_SUP_DIAL}
       * <li>{@link #TONE_SUP_BUSY}
       * <li>{@link #TONE_SUP_CONGESTION}
       * <li>{@link #TONE_SUP_RADIO_ACK}
       * <li>{@link #TONE_SUP_RADIO_NOTAVAIL}
       * <li>{@link #TONE_SUP_ERROR}
       * <li>{@link #TONE_SUP_CALL_WAITING}
       * <li>{@link #TONE_SUP_RINGTONE}
       * <li>{@link #TONE_PROP_BEEP}
       * <li>{@link #TONE_PROP_ACK}
       * <li>{@link #TONE_PROP_NACK}
       * <li>{@link #TONE_PROP_PROMPT}
       * <li>{@link #TONE_PROP_BEEP2}
       * <li>{@link #TONE_SUP_INTERCEPT}
       * <li>{@link #TONE_SUP_INTERCEPT_ABBREV}
       * <li>{@link #TONE_SUP_CONGESTION_ABBREV}
       * <li>{@link #TONE_SUP_CONFIRM}
       * <li>{@link #TONE_SUP_PIP}
       * <li>{@link #TONE_CDMA_DIAL_TONE_LITE}
       * <li>{@link #TONE_CDMA_NETWORK_USA_RINGBACK}
       * <li>{@link #TONE_CDMA_INTERCEPT}
       * <li>{@link #TONE_CDMA_ABBR_INTERCEPT}
       * <li>{@link #TONE_CDMA_REORDER}
       * <li>{@link #TONE_CDMA_ABBR_REORDER}
       * <li>{@link #TONE_CDMA_NETWORK_BUSY}
       * <li>{@link #TONE_CDMA_CONFIRM}
       * <li>{@link #TONE_CDMA_ANSWER}
       * <li>{@link #TONE_CDMA_NETWORK_CALLWAITING}
       * <li>{@link #TONE_CDMA_PIP}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT3}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT5}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT6}
       * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT7}
       * <li>{@link #TONE_CDMA_HIGH_L}
       * <li>{@link #TONE_CDMA_MED_L}
       * <li>{@link #TONE_CDMA_LOW_L}
       * <li>{@link #TONE_CDMA_HIGH_SS}
       * <li>{@link #TONE_CDMA_MED_SS}
       * <li>{@link #TONE_CDMA_LOW_SS}
       * <li>{@link #TONE_CDMA_HIGH_SSL}
       * <li>{@link #TONE_CDMA_MED_SSL}
       * <li>{@link #TONE_CDMA_LOW_SSL}
       * <li>{@link #TONE_CDMA_HIGH_SS_2}
       * <li>{@link #TONE_CDMA_MED_SS_2}
       * <li>{@link #TONE_CDMA_LOW_SS_2}
       * <li>{@link #TONE_CDMA_HIGH_SLS}
       * <li>{@link #TONE_CDMA_MED_SLS}
       * <li>{@link #TONE_CDMA_LOW_SLS}
       * <li>{@link #TONE_CDMA_HIGH_S_X4}
       * <li>{@link #TONE_CDMA_MED_S_X4}
       * <li>{@link #TONE_CDMA_LOW_S_X4}
       * <li>{@link #TONE_CDMA_HIGH_PBX_L}
       * <li>{@link #TONE_CDMA_MED_PBX_L}
       * <li>{@link #TONE_CDMA_LOW_PBX_L}
       * <li>{@link #TONE_CDMA_HIGH_PBX_SS}
       * <li>{@link #TONE_CDMA_MED_PBX_SS}
       * <li>{@link #TONE_CDMA_LOW_PBX_SS}
       * <li>{@link #TONE_CDMA_HIGH_PBX_SSL}
       * <li>{@link #TONE_CDMA_MED_PBX_SSL}
       * <li>{@link #TONE_CDMA_LOW_PBX_SSL}
       * <li>{@link #TONE_CDMA_HIGH_PBX_SLS}
       * <li>{@link #TONE_CDMA_MED_PBX_SLS}
       * <li>{@link #TONE_CDMA_LOW_PBX_SLS}
       * <li>{@link #TONE_CDMA_HIGH_PBX_S_X4}
       * <li>{@link #TONE_CDMA_MED_PBX_S_X4}
       * <li>{@link #TONE_CDMA_LOW_PBX_S_X4}
       * <li>{@link #TONE_CDMA_ALERT_NETWORK_LITE}
       * <li>{@link #TONE_CDMA_ALERT_AUTOREDIAL_LITE}
       * <li>{@link #TONE_CDMA_ONE_MIN_BEEP}
       * <li>{@link #TONE_CDMA_KEYPAD_VOLUME_KEY_LITE}
       * <li>{@link #TONE_CDMA_PRESSHOLDKEY_LITE}
       * <li>{@link #TONE_CDMA_ALERT_INCALL_LITE}
       * <li>{@link #TONE_CDMA_EMERGENCY_RINGBACK}
       * <li>{@link #TONE_CDMA_ALERT_CALL_GUARD}
       * <li>{@link #TONE_CDMA_SOFT_ERROR_LITE}
       * <li>{@link #TONE_CDMA_CALLDROP_LITE}
       * <li>{@link #TONE_CDMA_NETWORK_BUSY_ONE_SHOT}
       * <li>{@link #TONE_CDMA_ABBR_ALERT}
       * <li>{@link #TONE_CDMA_SIGNAL_OFF}
       * </ul>
       * @see #ToneGenerator(int, int)
      */
      public boolean startTone(int toneType) {
          return startTone(toneType, -1);
      }
  
      /**
       * This method starts the playback of a tone of the specified type for the specified duration.
       * @param toneType   The type of tone generated @see {@link #startTone(int)}.
       * @param durationMs  The tone duration in milliseconds. If the tone is limited in time by definition,
       * the actual duration will be the minimum of durationMs and the defined tone duration. Setting durationMs to -1,
       * is equivalent to calling {@link #startTone(int)}.
      */
      public native boolean startTone(int toneType, int durationMs);
  
      /**
       * This method stops the tone currently playing playback.
       * @see #ToneGenerator(int, int)
       */
      public native void stopTone();
  
      /**
       * Releases resources associated with this ToneGenerator object. It is good
       * practice to call this method when you're done using the ToneGenerator.
       */
      public native void release();
  
      private native final void native_setup(int streamType, int volume);
  
      private native final void native_finalize();
  
      /**
      * Returns the audio session ID.
      *
      * @return the ID of the audio session this ToneGenerator belongs to or 0 if an error
      * occured.
      */
      public native final int getAudioSessionId();
  
      @Override
      protected void finalize() { native_finalize(); }
  
      @SuppressWarnings("unused")
      @UnsupportedAppUsage
      private long mNativeContext; // accessed by native methods
  }
  