1/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.media;
18
19
20
21/**
22 * This class provides methods to play DTMF tones (ITU-T Recommendation Q.23),
23 * call supervisory tones (3GPP TS 22.001, CEPT) and proprietary tones (3GPP TS 31.111).
24 * Depending on call state and routing options, tones are mixed to the downlink audio
25 * or output to the speaker phone or headset.
26 * This API is not for generating tones over the uplink audio path.
27 */
28public class ToneGenerator
29{
30
31    /* Values for toneType parameter of ToneGenerator() constructor */
32    /*
33     * List of all available tones: These constants must be kept consistant with
34     * the enum in ToneGenerator C++ class.     */
35
36    /**
37     * Default value for an unknown or unspecified tone.
38     * @hide
39     */
40    public static final int TONE_UNKNOWN = -1;
41
42    /**
43     * DTMF tone for key 0: 1336Hz, 941Hz, continuous</p>
44     *
45     * @see #ToneGenerator(int, int)
46     */
47    public static final int TONE_DTMF_0 = 0;
48    /**
49     * DTMF tone for key 1: 1209Hz, 697Hz, continuous
50     *
51     * @see #ToneGenerator(int, int)
52     */
53    public static final int TONE_DTMF_1 = 1;
54    /**
55     * DTMF tone for key 2: 1336Hz, 697Hz, continuous
56     *
57     * @see #ToneGenerator(int, int)
58     */
59    public static final int TONE_DTMF_2 = 2;
60    /**
61     * DTMF tone for key 3: 1477Hz, 697Hz, continuous
62     *
63     * @see #ToneGenerator(int, int)
64     */
65    public static final int TONE_DTMF_3 = 3;
66    /**
67     * DTMF tone for key 4: 1209Hz, 770Hz, continuous
68     *
69     * @see #ToneGenerator(int, int)
70     */
71    public static final int TONE_DTMF_4 = 4;
72    /**
73     * DTMF tone for key 5: 1336Hz, 770Hz, continuous
74     *
75     * @see #ToneGenerator(int, int)
76     */
77    public static final int TONE_DTMF_5 = 5;
78    /**
79     * DTMF tone for key 6: 1477Hz, 770Hz, continuous
80     *
81     * @see #ToneGenerator(int, int)
82     */
83    public static final int TONE_DTMF_6 = 6;
84    /**
85     * DTMF tone for key 7: 1209Hz, 852Hz, continuous
86     *
87     * @see #ToneGenerator(int, int)
88     */
89    public static final int TONE_DTMF_7 = 7;
90    /**
91     * DTMF tone for key 8: 1336Hz, 852Hz, continuous
92     *
93     * @see #ToneGenerator(int, int)
94     */
95    public static final int TONE_DTMF_8 = 8;
96    /**
97     * DTMF tone for key 9: 1477Hz, 852Hz, continuous
98     *
99     * @see #ToneGenerator(int, int)
100     */
101    public static final int TONE_DTMF_9 = 9;
102    /**
103     * DTMF tone for key *: 1209Hz, 941Hz, continuous
104     *
105     * @see #ToneGenerator(int, int)
106     */
107    public static final int TONE_DTMF_S = 10;
108    /**
109     * DTMF tone for key #: 1477Hz, 941Hz, continuous
110     *
111     * @see #ToneGenerator(int, int)
112     */
113    public static final int TONE_DTMF_P = 11;
114    /**
115     * DTMF tone for key A: 1633Hz, 697Hz, continuous
116     *
117     * @see #ToneGenerator(int, int)
118     */
119    public static final int TONE_DTMF_A = 12;
120    /**
121     * DTMF tone for key B: 1633Hz, 770Hz, continuous
122     *
123     * @see #ToneGenerator(int, int)
124     */
125    public static final int TONE_DTMF_B = 13;
126    /**
127     * DTMF tone for key C: 1633Hz, 852Hz, continuous
128     *
129     * @see #ToneGenerator(int, int)
130     */
131    public static final int TONE_DTMF_C = 14;
132    /**
133     * DTMF tone for key D: 1633Hz, 941Hz, continuous
134     *
135     * @see #ToneGenerator(int, int)
136     */
137    public static final int TONE_DTMF_D = 15;
138    /**
139     * Call supervisory tone, Dial tone:
140     *      CEPT:           425Hz, continuous
141     *      ANSI (IS-95):   350Hz+440Hz, continuous
142     *      JAPAN:          400Hz, continuous
143     *
144     * @see #ToneGenerator(int, int)
145     */
146    public static final int TONE_SUP_DIAL = 16;
147    /**
148     * Call supervisory tone, Busy:
149     *      CEPT:           425Hz, 500ms ON, 500ms OFF...
150     *      ANSI (IS-95):   480Hz+620Hz, 500ms ON, 500ms OFF...
151     *      JAPAN:          400Hz, 500ms ON, 500ms OFF...
152     *
153     * @see #ToneGenerator(int, int)
154     */
155    public static final int TONE_SUP_BUSY = 17;
156    /**
157     * Call supervisory tone, Congestion:
158     *      CEPT, JAPAN:    425Hz, 200ms ON, 200ms OFF...
159     *      ANSI (IS-95):   480Hz+620Hz, 250ms ON, 250ms OFF...
160     *
161     * @see #ToneGenerator(int, int)
162     */
163    public static final int TONE_SUP_CONGESTION = 18;
164    /**
165     * Call supervisory tone, Radio path acknowlegment :
166     *      CEPT, ANSI:    425Hz, 200ms ON
167     *      JAPAN:         400Hz, 1s ON, 2s OFF...
168     *
169     * @see #ToneGenerator(int, int)
170     */
171    public static final int TONE_SUP_RADIO_ACK = 19;
172    /**
173     * Call supervisory tone, Radio path not available: 425Hz, 200ms ON, 200 OFF 3 bursts
174     *
175     * @see #ToneGenerator(int, int)
176     */
177    public static final int TONE_SUP_RADIO_NOTAVAIL = 20;
178    /**
179     * Call supervisory tone, Error/Special info: 950Hz+1400Hz+1800Hz, 330ms ON, 1s OFF...
180     *
181     * @see #ToneGenerator(int, int)
182     */
183    public static final int TONE_SUP_ERROR = 21;
184    /**
185     * Call supervisory tone, Call Waiting:
186     *      CEPT, JAPAN:    425Hz, 200ms ON, 600ms OFF, 200ms ON, 3s OFF...
187     *      ANSI (IS-95):   440 Hz, 300 ms ON, 9.7 s OFF,
188     *                      (100 ms ON, 100 ms OFF, 100 ms ON, 9.7s OFF ...)
189     *
190     * @see #ToneGenerator(int, int)
191     */
192    public static final int TONE_SUP_CALL_WAITING = 22;
193    /**
194     * Call supervisory tone, Ring Tone:
195     *      CEPT, JAPAN:    425Hz, 1s ON, 4s OFF...
196     *      ANSI (IS-95):   440Hz + 480Hz, 2s ON, 4s OFF...
197     *
198     * @see #ToneGenerator(int, int)
199     */
200    public static final int TONE_SUP_RINGTONE = 23;
201    /**
202     * Proprietary tone, general beep: 400Hz+1200Hz, 35ms ON
203     *
204     * @see #ToneGenerator(int, int)
205     */
206    public static final int TONE_PROP_BEEP = 24;
207    /**
208     * Proprietary tone, positive acknowlegement: 1200Hz, 100ms ON, 100ms OFF 2 bursts
209     *
210     * @see #ToneGenerator(int, int)
211     */
212    public static final int TONE_PROP_ACK = 25;
213    /**
214     * Proprietary tone, negative acknowlegement: 300Hz+400Hz+500Hz, 400ms ON
215     *
216     * @see #ToneGenerator(int, int)
217     */
218    public static final int TONE_PROP_NACK = 26;
219    /**
220     * Proprietary tone, prompt tone: 400Hz+1200Hz, 200ms ON
221     *
222     * @see #ToneGenerator(int, int)
223     */
224    public static final int  TONE_PROP_PROMPT = 27;
225    /**
226     * Proprietary tone, general double beep: twice 400Hz+1200Hz, 35ms ON, 200ms OFF, 35ms ON
227     *
228     * @see #ToneGenerator(int, int)
229     */
230    public static final int TONE_PROP_BEEP2 = 28;
231    /**
232     * Call supervisory tone (IS-95), intercept tone: alternating 440 Hz and 620 Hz tones,
233     * each on for 250 ms
234     *
235     * @see #ToneGenerator(int, int)
236     */
237    public static final int TONE_SUP_INTERCEPT = 29;
238    /**
239     * Call supervisory tone (IS-95), abbreviated intercept: intercept tone limited to 4 seconds
240     *
241     * @see #ToneGenerator(int, int)
242     */
243    public static final int TONE_SUP_INTERCEPT_ABBREV = 30;
244    /**
245     * Call supervisory tone (IS-95), abbreviated congestion: congestion tone limited to 4 seconds
246     *
247     * @see #ToneGenerator(int, int)
248     */
249    public static final int TONE_SUP_CONGESTION_ABBREV = 31;
250    /**
251     * Call supervisory tone (IS-95), confirm tone: a 350 Hz tone added to a 440 Hz tone
252     * repeated 3 times in a 100 ms on, 100 ms off cycle
253     *
254     * @see #ToneGenerator(int, int)
255     */
256    public static final int TONE_SUP_CONFIRM = 32;
257    /**
258     * Call supervisory tone (IS-95), pip tone: four bursts of 480 Hz tone (0.1 s on, 0.1 s off).
259     *
260     * @see #ToneGenerator(int, int)
261     */
262    public static final int TONE_SUP_PIP = 33;
263    /**
264     *  CDMA Dial tone : 425Hz  continuous
265     *
266     * @see #ToneGenerator(int, int)
267     */
268    public static final int TONE_CDMA_DIAL_TONE_LITE = 34;
269    /**
270     * CDMA USA Ringback: 440Hz+480Hz 2s ON, 4000 OFF ...
271     *
272     * @see #ToneGenerator(int, int)
273     */
274    public static final int TONE_CDMA_NETWORK_USA_RINGBACK = 35;
275    /**
276     *  CDMA Intercept tone: 440Hz 250ms ON, 620Hz 250ms ON ...
277     *
278     * @see #ToneGenerator(int, int)
279     */
280    public static final int TONE_CDMA_INTERCEPT = 36;
281    /**
282     * CDMA Abbr Intercept tone: 440Hz 250ms ON, 620Hz 250ms ON
283     *
284     * @see #ToneGenerator(int, int)
285     */
286    public static final int TONE_CDMA_ABBR_INTERCEPT = 37;
287    /**
288     * CDMA Reorder tone: 480Hz+620Hz 250ms ON, 250ms OFF...
289     *
290     * @see #ToneGenerator(int, int)
291     */
292    public static final int TONE_CDMA_REORDER = 38;
293    /**
294     *
295     * CDMA Abbr Reorder tone: 480Hz+620Hz 250ms ON, 250ms OFF repeated for 8 times
296     * @see #ToneGenerator(int, int)
297     */
298    public static final int TONE_CDMA_ABBR_REORDER = 39;
299    /**
300     * CDMA Network Busy tone: 480Hz+620Hz 500ms ON, 500ms OFF continuous
301     *
302     * @see #ToneGenerator(int, int)
303     */
304    public static final int TONE_CDMA_NETWORK_BUSY = 40;
305    /**
306     * CDMA Confirm tone: 350Hz+440Hz 100ms ON, 100ms OFF repeated for 3 times
307     *
308     * @see #ToneGenerator(int, int)
309     */
310    public static final int TONE_CDMA_CONFIRM = 41;
311    /**
312     *
313     * CDMA answer tone: silent tone - defintion Frequency 0, 0ms ON, 0ms OFF
314     * @see #ToneGenerator(int, int)
315     */
316    public static final int TONE_CDMA_ANSWER = 42;
317    /**
318     *
319     * CDMA Network Callwaiting tone: 440Hz 300ms ON
320     * @see #ToneGenerator(int, int)
321     */
322    public static final int TONE_CDMA_NETWORK_CALLWAITING = 43;
323    /**
324     * CDMA PIP tone: 480Hz 100ms ON, 100ms OFF repeated for 4 times
325     *
326     * @see #ToneGenerator(int, int)
327     */
328    public static final int TONE_CDMA_PIP = 44;
329    /**
330     *  ISDN Call Signal Normal tone: {2091Hz 32ms ON, 2556 64ms ON} 20 times,
331     *  2091 32ms ON, 2556 48ms ON, 4s OFF
332     *
333     * @see #ToneGenerator(int, int)
334     */
335    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL = 45;
336    /**
337     *  ISDN Call Signal Intergroup tone: {2091Hz 32ms ON, 2556 64ms ON} 8 times,
338     * 2091Hz 32ms ON, 400ms OFF, {2091Hz 32ms ON, 2556Hz 64ms ON} times,
339     * 2091Hz 32ms ON, 4s OFF.
340     *
341     * @see #ToneGenerator(int, int)
342     */
343    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP = 46;
344    /**
345     * ISDN Call Signal SP PRI tone:{2091Hz 32ms ON, 2556 64ms ON} 4 times
346     * 2091Hz 16ms ON, 200ms OFF, {2091Hz 32ms ON, 2556Hz 64ms ON} 4 times,
347     * 2091Hz 16ms ON, 200ms OFF
348     *
349     * @see #ToneGenerator(int, int)
350     */
351    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI = 47;
352    /**
353     * ISDN Call sign PAT3 tone: silent tone
354     *
355     * @see #ToneGenerator(int, int)
356     */
357    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT3 = 48;
358    /**
359     * ISDN Ping Ring tone: {2091Hz 32ms ON, 2556Hz 64ms ON} 5 times
360     * 2091Hz 20ms ON
361     *
362     * @see #ToneGenerator(int, int)
363     */
364    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING = 49;
365    /**
366     *
367     * ISDN Pat5 tone: silent tone
368     * @see #ToneGenerator(int, int)
369     */
370    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT5 = 50;
371    /**
372     *
373     * ISDN Pat6 tone: silent tone
374     * @see #ToneGenerator(int, int)
375     */
376    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT6 = 51;
377    /**
378     * ISDN Pat7 tone: silent tone
379     *
380     * @see #ToneGenerator(int, int)
381     */
382    public static final int TONE_CDMA_CALL_SIGNAL_ISDN_PAT7 = 52;
383    /**
384     * TONE_CDMA_HIGH_L tone: {3700Hz 25ms, 4000Hz 25ms} 40 times
385     * 4000ms OFF, Repeat ....
386     *
387     * @see #ToneGenerator(int, int)
388     */
389    public static final int TONE_CDMA_HIGH_L = 53;
390    /**
391     * TONE_CDMA_MED_L tone: {2600Hz 25ms, 2900Hz 25ms} 40 times
392     * 4000ms OFF, Repeat ....
393     *
394     * @see #ToneGenerator(int, int)
395     */
396    public static final int TONE_CDMA_MED_L = 54;
397    /**
398     * TONE_CDMA_LOW_L tone: {1300Hz 25ms, 1450Hz 25ms} 40 times,
399     * 4000ms OFF, Repeat ....
400     *
401     * @see #ToneGenerator(int, int)
402     */
403    public static final int TONE_CDMA_LOW_L = 55;
404    /**
405     * CDMA HIGH SS tone: {3700Hz 25ms, 4000Hz 25ms} repeat 16 times,
406     * 400ms OFF, repeat ....
407     *
408     * @see #ToneGenerator(int, int)
409     */
410    public static final int TONE_CDMA_HIGH_SS = 56;
411    /**
412     * CDMA MED SS tone: {2600Hz 25ms, 2900Hz 25ms} repeat 16 times,
413     * 400ms OFF, repeat ....
414     *
415     * @see #ToneGenerator(int, int)
416     */
417    public static final int TONE_CDMA_MED_SS = 57;
418    /**
419     * CDMA LOW SS tone: {1300z 25ms, 1450Hz 25ms} repeat 16 times,
420     * 400ms OFF, repeat ....
421     *
422     * @see #ToneGenerator(int, int)
423     */
424    public static final int TONE_CDMA_LOW_SS = 58;
425    /**
426     * CDMA HIGH SSL tone: {3700Hz 25ms, 4000Hz 25ms} 8 times,
427     * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} repeat 8 times,
428     * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} repeat 16 times,
429     * 4000ms OFF, repeat ...
430     *
431     * @see #ToneGenerator(int, int)
432     */
433    public static final int TONE_CDMA_HIGH_SSL = 59;
434    /**
435     * CDMA MED SSL tone: {2600Hz 25ms, 2900Hz 25ms} 8 times,
436     * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} repeat 8 times,
437     * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} repeat 16 times,
438     * 4000ms OFF, repeat ...
439     *
440     * @see #ToneGenerator(int, int)
441     */
442    public static final int TONE_CDMA_MED_SSL = 60;
443    /**
444     * CDMA LOW SSL tone: {1300Hz 25ms, 1450Hz 25ms} 8 times,
445     * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} repeat 8 times,
446     * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} repeat 16 times,
447     * 4000ms OFF, repeat ...
448     *
449     * @see #ToneGenerator(int, int)
450     */
451    public static final int TONE_CDMA_LOW_SSL = 61;
452    /**
453     * CDMA HIGH SS2 tone: {3700Hz 25ms, 4000Hz 25ms} 20 times,
454     * 1000ms OFF, {3700Hz 25ms, 4000Hz 25ms} 20 times,
455     * 3000ms OFF, repeat ....
456     *
457     * @see #ToneGenerator(int, int)
458     */
459    public static final int TONE_CDMA_HIGH_SS_2 = 62;
460    /**
461     * CDMA MED SS2 tone: {2600Hz 25ms, 2900Hz 25ms} 20 times,
462     * 1000ms OFF, {2600Hz 25ms, 2900Hz 25ms} 20 times,
463     * 3000ms OFF, repeat ....
464     *
465     * @see #ToneGenerator(int, int)
466     */
467    public static final int TONE_CDMA_MED_SS_2 = 63;
468    /**
469     * CDMA LOW SS2 tone: {1300Hz 25ms, 1450Hz 25ms} 20 times,
470     * 1000ms OFF, {1300Hz 25ms, 1450Hz 25ms} 20 times,
471     * 3000ms OFF, repeat ....
472     *
473     * @see #ToneGenerator(int, int)
474     */
475    public static final int TONE_CDMA_LOW_SS_2 = 64;
476    /**
477     *  CDMA HIGH SLS tone: {3700Hz 25ms, 4000Hz 25ms} 10 times,
478     *  500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 20 times, 500ms OFF,
479     *  {3700Hz 25ms, 4000Hz 25ms} 10 times, 3000ms OFF, REPEAT
480     *
481     * @see #ToneGenerator(int, int)
482     */
483    public static final int TONE_CDMA_HIGH_SLS = 65;
484    /**
485     *  CDMA MED  SLS tone: {2600Hz 25ms, 2900Hz 25ms} 10 times,
486     *  500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 20 times, 500ms OFF,
487     *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 3000ms OFF, REPEAT
488     *
489     *
490     * @see #ToneGenerator(int, int)
491     */
492    public static final int TONE_CDMA_MED_SLS = 66;
493    /**
494     *  CDMA LOW SLS tone: {1300Hz 25ms, 1450Hz 25ms} 10 times,
495     *  500ms OFF, {1300Hz 25ms, 1450Hz 25ms} 20 times, 500ms OFF,
496     *  {1300Hz 25ms, 1450Hz 25ms} 10 times, 3000ms OFF, REPEAT
497     *
498     * @see #ToneGenerator(int, int)
499     */
500    public static final int TONE_CDMA_LOW_SLS = 67;
501    /**
502     *  CDMA HIGH S X4 tone: {3700Hz 25ms, 4000Hz 25ms} 10 times,
503     *  500ms OFF, {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF,
504     *  {3700Hz 25ms, 4000Hz 25ms} 10 times, 500ms OFF,
505     *  {3700Hz 25ms, 4000Hz 25ms} 10 times, 2500ms OFF, REPEAT....
506     *
507     * @see #ToneGenerator(int, int)
508     */
509    public static final int TONE_CDMA_HIGH_S_X4 = 68;
510    /**
511     *  CDMA MED S X4 tone: {2600Hz 25ms, 2900Hz 25ms} 10 times,
512     *  500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
513     *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
514     *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 2500ms OFF, REPEAT....
515     *
516     * @see #ToneGenerator(int, int)
517     */
518    public static final int TONE_CDMA_MED_S_X4 = 69;
519    /**
520     *  CDMA LOW  S X4 tone: {2600Hz 25ms, 2900Hz 25ms} 10 times,
521     *  500ms OFF, {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
522     *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 500ms OFF,
523     *  {2600Hz 25ms, 2900Hz 25ms} 10 times, 2500ms OFF, REPEAT....
524     *
525     *
526     * @see #ToneGenerator(int, int)
527     */
528    public static final int TONE_CDMA_LOW_S_X4 = 70;
529    /**
530     * CDMA HIGH PBX L: {3700Hz 25ms, 4000Hz 25ms}20 times,
531     * 2000ms OFF,  REPEAT....
532     *
533     * @see #ToneGenerator(int, int)
534     */
535    public static final int TONE_CDMA_HIGH_PBX_L = 71;
536    /**
537     *  CDMA MED PBX L: {2600Hz 25ms, 2900Hz 25ms}20 times,
538     * 2000ms OFF,  REPEAT....
539     *
540     * @see #ToneGenerator(int, int)
541     */
542    public static final int TONE_CDMA_MED_PBX_L = 72;
543    /**
544     * CDMA LOW PBX L: {1300Hz 25ms,1450Hz 25ms}20 times,
545     * 2000ms OFF,  REPEAT....
546     *
547     * @see #ToneGenerator(int, int)
548     */
549    public static final int TONE_CDMA_LOW_PBX_L = 73;
550    /**
551     * CDMA HIGH PBX SS tone: {3700Hz 25ms, 4000Hz 25ms} 8 times
552     * 200 ms OFF, {3700Hz 25ms 4000Hz 25ms}8 times,
553     * 2000ms OFF, REPEAT....
554     *
555     * @see #ToneGenerator(int, int)
556     */
557    public static final int TONE_CDMA_HIGH_PBX_SS = 74;
558    /**
559     * CDMA MED PBX SS tone: {2600Hz 25ms, 2900Hz 25ms} 8 times
560     * 200 ms OFF, {2600Hz 25ms 2900Hz 25ms}8 times,
561     * 2000ms OFF, REPEAT....
562     *
563     * @see #ToneGenerator(int, int)
564     */
565    public static final int TONE_CDMA_MED_PBX_SS = 75;
566    /**
567     * CDMA LOW PBX SS tone: {1300Hz 25ms, 1450Hz 25ms} 8 times
568     * 200 ms OFF, {1300Hz 25ms 1450Hz 25ms}8 times,
569     * 2000ms OFF, REPEAT....
570     *
571     * @see #ToneGenerator(int, int)
572     */
573    public static final int TONE_CDMA_LOW_PBX_SS = 76;
574    /**
575     * CDMA HIGH PBX SSL tone:{3700Hz 25ms, 4000Hz 25ms} 8 times
576     * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 8 times, 200ms OFF,
577     * {3700Hz 25ms, 4000Hz 25ms} 16 times, 1000ms OFF, REPEAT....
578     *
579     * @see #ToneGenerator(int, int)
580     */
581    public static final int TONE_CDMA_HIGH_PBX_SSL = 77;
582    /**
583     * CDMA MED PBX SSL tone:{2600Hz 25ms, 2900Hz 25ms} 8 times
584     * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 8 times, 200ms OFF,
585     * {2600Hz 25ms, 2900Hz 25ms} 16 times, 1000ms OFF, REPEAT....
586     *
587     * @see #ToneGenerator(int, int)
588     */
589    public static final int TONE_CDMA_MED_PBX_SSL = 78;
590    /**
591     * CDMA LOW PBX SSL tone:{1300Hz 25ms, 1450Hz 25ms} 8 times
592     * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 8 times, 200ms OFF,
593     * {1300Hz 25ms, 1450Hz 25ms} 16 times, 1000ms OFF, REPEAT....
594     *
595     *
596     * @see #ToneGenerator(int, int)
597     */
598    public static final int TONE_CDMA_LOW_PBX_SSL = 79;
599    /**
600     * CDMA HIGH PBX SSL tone:{3700Hz 25ms, 4000Hz 25ms} 8 times
601     * 200ms OFF, {3700Hz 25ms, 4000Hz 25ms} 16 times, 200ms OFF,
602     * {3700Hz 25ms, 4000Hz 25ms} 8 times, 1000ms OFF, REPEAT....
603     *
604     * @see #ToneGenerator(int, int)
605     */
606    public static final int TONE_CDMA_HIGH_PBX_SLS = 80;
607    /**
608     * CDMA HIGH PBX SLS tone:{2600Hz 25ms, 2900Hz 25ms} 8 times
609     * 200ms OFF, {2600Hz 25ms, 2900Hz 25ms} 16 times, 200ms OFF,
610     * {2600Hz 25ms, 2900Hz 25ms} 8 times, 1000ms OFF, REPEAT....
611     *
612     * @see #ToneGenerator(int, int)
613     */
614    public static final int TONE_CDMA_MED_PBX_SLS = 81;
615    /**
616     * CDMA HIGH PBX SLS tone:{1300Hz 25ms, 1450Hz 25ms} 8 times
617     * 200ms OFF, {1300Hz 25ms, 1450Hz 25ms} 16 times, 200ms OFF,
618     * {1300Hz 25ms, 1450Hz 25ms} 8 times, 1000ms OFF, REPEAT....
619     *
620     * @see #ToneGenerator(int, int)
621     */
622    public static final int TONE_CDMA_LOW_PBX_SLS = 82;
623    /**
624     * CDMA HIGH PBX X S4 tone: {3700Hz 25ms 4000Hz 25ms} 8 times,
625     * 200ms OFF, {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF,
626     * {3700Hz 25ms 4000Hz 25ms} 8 times, 200ms OFF,
627     * {3700Hz 25ms 4000Hz 25ms} 8 times, 800ms OFF, REPEAT...
628     *
629     * @see #ToneGenerator(int, int)
630     */
631    public static final int TONE_CDMA_HIGH_PBX_S_X4 = 83;
632    /**
633     * CDMA MED PBX X S4 tone: {2600Hz 25ms 2900Hz 25ms} 8 times,
634     * 200ms OFF, {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF,
635     * {2600Hz 25ms 2900Hz 25ms} 8 times, 200ms OFF,
636     * {2600Hz 25ms 2900Hz 25ms} 8 times, 800ms OFF, REPEAT...
637     *
638     * @see #ToneGenerator(int, int)
639     */
640    public static final int TONE_CDMA_MED_PBX_S_X4 = 84;
641    /**
642     * CDMA LOW PBX X S4 tone: {1300Hz 25ms 1450Hz 25ms} 8 times,
643     * 200ms OFF, {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF,
644     * {1300Hz 25ms 1450Hz 25ms} 8 times, 200ms OFF,
645     * {1300Hz 25ms 1450Hz 25ms} 8 times, 800ms OFF, REPEAT...
646     *
647     * @see #ToneGenerator(int, int)
648     */
649    public static final int TONE_CDMA_LOW_PBX_S_X4 = 85;
650    /**
651     * CDMA Alert Network Lite tone: 1109Hz 62ms ON, 784Hz 62ms ON, 740Hz 62ms ON
652     * 622Hz 62ms ON, 1109Hz 62ms ON
653     *
654     * @see #ToneGenerator(int, int)
655     */
656    public static final int    TONE_CDMA_ALERT_NETWORK_LITE = 86;
657    /**
658     * CDMA Alert Auto Redial tone: {1245Hz 62ms ON, 659Hz 62ms ON} 3 times,
659     * 1245 62ms ON
660     *
661     * @see #ToneGenerator(int, int)
662     */
663    public static final int    TONE_CDMA_ALERT_AUTOREDIAL_LITE = 87;
664    /**
665     * CDMA One Min Beep tone: 1150Hz+770Hz 400ms ON
666     *
667     * @see #ToneGenerator(int, int)
668     */
669    public static final int    TONE_CDMA_ONE_MIN_BEEP = 88;
670    /**
671     *
672     * CDMA KEYPAD Volume key lite tone: 941Hz+1477Hz 120ms ON
673     * @see #ToneGenerator(int, int)
674     */
675    public static final int    TONE_CDMA_KEYPAD_VOLUME_KEY_LITE = 89;
676    /**
677     * CDMA PRESSHOLDKEY LITE tone: 587Hz 375ms ON, 1175Hz 125ms ON
678     *
679     * @see #ToneGenerator(int, int)
680     */
681    public static final int    TONE_CDMA_PRESSHOLDKEY_LITE = 90;
682    /**
683     * CDMA ALERT INCALL LITE tone: 587Hz 62ms, 784 62ms, 831Hz 62ms,
684     * 784Hz 62ms, 1109 62ms, 784Hz 62ms, 831Hz 62ms, 784Hz 62ms
685     *
686     * @see #ToneGenerator(int, int)
687     */
688    public static final int    TONE_CDMA_ALERT_INCALL_LITE = 91;
689    /**
690     * CDMA EMERGENCY RINGBACK tone: {941Hz 125ms ON, 10ms OFF} 3times
691     * 4990ms OFF, REPEAT...
692     *
693     * @see #ToneGenerator(int, int)
694     */
695    public static final int    TONE_CDMA_EMERGENCY_RINGBACK = 92;
696    /**
697     * CDMA ALERT CALL GUARD tone: {1319Hz 125ms ON, 125ms OFF} 3 times
698     *
699     * @see #ToneGenerator(int, int)
700     */
701    public static final int    TONE_CDMA_ALERT_CALL_GUARD = 93;
702    /**
703     * CDMA SOFT ERROR LITE  tone: 1047Hz 125ms ON, 370Hz 125ms
704     *
705     * @see #ToneGenerator(int, int)
706     */
707    public static final int    TONE_CDMA_SOFT_ERROR_LITE = 94;
708    /**
709     * CDMA CALLDROP LITE tone: 1480Hz 125ms, 1397Hz 125ms, 784Hz 125ms
710     *
711     * @see #ToneGenerator(int, int)
712     */
713    public static final int    TONE_CDMA_CALLDROP_LITE = 95;
714    /**
715     * CDMA_NETWORK_BUSY_ONE_SHOT tone: 425Hz 500ms ON, 500ms OFF.
716     *
717     * @see #ToneGenerator(int, int)
718     */
719    public static final int    TONE_CDMA_NETWORK_BUSY_ONE_SHOT = 96;
720    /**
721     * CDMA_ABBR_ALERT tone: 1150Hz+770Hz 400ms ON
722     * @see #ToneGenerator(int, int)
723     */
724    public static final int    TONE_CDMA_ABBR_ALERT = 97;
725    /**
726     * CDMA_SIGNAL_OFF - silent tone
727     *
728     * @see #ToneGenerator(int, int)
729     */
730    public static final int TONE_CDMA_SIGNAL_OFF = 98;
731
732    /** Maximum volume, for use with {@link #ToneGenerator(int,int)} */
733    public static final int MAX_VOLUME = 100;
734    /** Minimum volume setting, for use with {@link #ToneGenerator(int,int)} */
735    public static final int MIN_VOLUME = 0;
736
737
738    /**
739     * ToneGenerator class contructor specifying output stream type and volume.
740     *
741     * @param streamType The streame type used for tone playback (e.g. STREAM_MUSIC).
742     * @param volume     The volume of the tone, given in percentage of maximum volume (from 0-100).
743     *
744     */
745    public ToneGenerator(int streamType, int volume) {
746        native_setup(streamType, volume);
747    }
748
749    /**
750     * This method starts the playback of a tone of the specified type.
751     * only one tone can play at a time: if a tone is playing while this method is called,
752     * this tone is stopped and replaced by the one requested.
753     * @param toneType   The type of tone generated chosen from the following list:
754     * <ul>
755     * <li>{@link #TONE_DTMF_0}
756     * <li>{@link #TONE_DTMF_1}
757     * <li>{@link #TONE_DTMF_2}
758     * <li>{@link #TONE_DTMF_3}
759     * <li>{@link #TONE_DTMF_4}
760     * <li>{@link #TONE_DTMF_5}
761     * <li>{@link #TONE_DTMF_6}
762     * <li>{@link #TONE_DTMF_7}
763     * <li>{@link #TONE_DTMF_8}
764     * <li>{@link #TONE_DTMF_9}
765     * <li>{@link #TONE_DTMF_A}
766     * <li>{@link #TONE_DTMF_B}
767     * <li>{@link #TONE_DTMF_C}
768     * <li>{@link #TONE_DTMF_D}
769     * <li>{@link #TONE_SUP_DIAL}
770     * <li>{@link #TONE_SUP_BUSY}
771     * <li>{@link #TONE_SUP_CONGESTION}
772     * <li>{@link #TONE_SUP_RADIO_ACK}
773     * <li>{@link #TONE_SUP_RADIO_NOTAVAIL}
774     * <li>{@link #TONE_SUP_ERROR}
775     * <li>{@link #TONE_SUP_CALL_WAITING}
776     * <li>{@link #TONE_SUP_RINGTONE}
777     * <li>{@link #TONE_PROP_BEEP}
778     * <li>{@link #TONE_PROP_ACK}
779     * <li>{@link #TONE_PROP_NACK}
780     * <li>{@link #TONE_PROP_PROMPT}
781     * <li>{@link #TONE_PROP_BEEP2}
782     * <li>{@link #TONE_SUP_INTERCEPT}
783     * <li>{@link #TONE_SUP_INTERCEPT_ABBREV}
784     * <li>{@link #TONE_SUP_CONGESTION_ABBREV}
785     * <li>{@link #TONE_SUP_CONFIRM}
786     * <li>{@link #TONE_SUP_PIP}
787     * <li>{@link #TONE_CDMA_DIAL_TONE_LITE}
788     * <li>{@link #TONE_CDMA_NETWORK_USA_RINGBACK}
789     * <li>{@link #TONE_CDMA_INTERCEPT}
790     * <li>{@link #TONE_CDMA_ABBR_INTERCEPT}
791     * <li>{@link #TONE_CDMA_REORDER}
792     * <li>{@link #TONE_CDMA_ABBR_REORDER}
793     * <li>{@link #TONE_CDMA_NETWORK_BUSY}
794     * <li>{@link #TONE_CDMA_CONFIRM}
795     * <li>{@link #TONE_CDMA_ANSWER}
796     * <li>{@link #TONE_CDMA_NETWORK_CALLWAITING}
797     * <li>{@link #TONE_CDMA_PIP}
798     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_NORMAL}
799     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_INTERGROUP}
800     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_SP_PRI}
801     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT3}
802     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PING_RING}
803     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT5}
804     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT6}
805     * <li>{@link #TONE_CDMA_CALL_SIGNAL_ISDN_PAT7}
806     * <li>{@link #TONE_CDMA_HIGH_L}
807     * <li>{@link #TONE_CDMA_MED_L}
808     * <li>{@link #TONE_CDMA_LOW_L}
809     * <li>{@link #TONE_CDMA_HIGH_SS}
810     * <li>{@link #TONE_CDMA_MED_SS}
811     * <li>{@link #TONE_CDMA_LOW_SS}
812     * <li>{@link #TONE_CDMA_HIGH_SSL}
813     * <li>{@link #TONE_CDMA_MED_SSL}
814     * <li>{@link #TONE_CDMA_LOW_SSL}
815     * <li>{@link #TONE_CDMA_HIGH_SS_2}
816     * <li>{@link #TONE_CDMA_MED_SS_2}
817     * <li>{@link #TONE_CDMA_LOW_SS_2}
818     * <li>{@link #TONE_CDMA_HIGH_SLS}
819     * <li>{@link #TONE_CDMA_MED_SLS}
820     * <li>{@link #TONE_CDMA_LOW_SLS}
821     * <li>{@link #TONE_CDMA_HIGH_S_X4}
822     * <li>{@link #TONE_CDMA_MED_S_X4}
823     * <li>{@link #TONE_CDMA_LOW_S_X4}
824     * <li>{@link #TONE_CDMA_HIGH_PBX_L}
825     * <li>{@link #TONE_CDMA_MED_PBX_L}
826     * <li>{@link #TONE_CDMA_LOW_PBX_L}
827     * <li>{@link #TONE_CDMA_HIGH_PBX_SS}
828     * <li>{@link #TONE_CDMA_MED_PBX_SS}
829     * <li>{@link #TONE_CDMA_LOW_PBX_SS}
830     * <li>{@link #TONE_CDMA_HIGH_PBX_SSL}
831     * <li>{@link #TONE_CDMA_MED_PBX_SSL}
832     * <li>{@link #TONE_CDMA_LOW_PBX_SSL}
833     * <li>{@link #TONE_CDMA_HIGH_PBX_SLS}
834     * <li>{@link #TONE_CDMA_MED_PBX_SLS}
835     * <li>{@link #TONE_CDMA_LOW_PBX_SLS}
836     * <li>{@link #TONE_CDMA_HIGH_PBX_S_X4}
837     * <li>{@link #TONE_CDMA_MED_PBX_S_X4}
838     * <li>{@link #TONE_CDMA_LOW_PBX_S_X4}
839     * <li>{@link #TONE_CDMA_ALERT_NETWORK_LITE}
840     * <li>{@link #TONE_CDMA_ALERT_AUTOREDIAL_LITE}
841     * <li>{@link #TONE_CDMA_ONE_MIN_BEEP}
842     * <li>{@link #TONE_CDMA_KEYPAD_VOLUME_KEY_LITE}
843     * <li>{@link #TONE_CDMA_PRESSHOLDKEY_LITE}
844     * <li>{@link #TONE_CDMA_ALERT_INCALL_LITE}
845     * <li>{@link #TONE_CDMA_EMERGENCY_RINGBACK}
846     * <li>{@link #TONE_CDMA_ALERT_CALL_GUARD}
847     * <li>{@link #TONE_CDMA_SOFT_ERROR_LITE}
848     * <li>{@link #TONE_CDMA_CALLDROP_LITE}
849     * <li>{@link #TONE_CDMA_NETWORK_BUSY_ONE_SHOT}
850     * <li>{@link #TONE_CDMA_ABBR_ALERT}
851     * <li>{@link #TONE_CDMA_SIGNAL_OFF}
852     * </ul>
853     * @see #ToneGenerator(int, int)
854    */
855    public boolean startTone(int toneType) {
856        return startTone(toneType, -1);
857    }
858
859    /**
860     * This method starts the playback of a tone of the specified type for the specified duration.
861     * @param toneType   The type of tone generated @see {@link #startTone(int)}.
862     * @param durationMs  The tone duration in milliseconds. If the tone is limited in time by definition,
863     * the actual duration will be the minimum of durationMs and the defined tone duration. Setting durationMs to -1,
864     * is equivalent to calling {@link #startTone(int)}.
865    */
866    public native boolean startTone(int toneType, int durationMs);
867
868    /**
869     * This method stops the tone currently playing playback.
870     * @see #ToneGenerator(int, int)
871     */
872    public native void stopTone();
873
874    /**
875     * Releases resources associated with this ToneGenerator object. It is good
876     * practice to call this method when you're done using the ToneGenerator.
877     */
878    public native void release();
879
880    private native final void native_setup(int streamType, int volume);
881
882    private native final void native_finalize();
883
884    /**
885    * Returns the audio session ID.
886    *
887    * @return the ID of the audio session this ToneGenerator belongs to or 0 if an error
888    * occured.
889    */
890    public native final int getAudioSessionId();
891
892    @Override
893    protected void finalize() { native_finalize(); }
894
895    @SuppressWarnings("unused")
896    private long mNativeContext; // accessed by native methods
897}
898