# 使用TonePlayerå¼€å‘éŸ³é¢‘æ’æ”¾åŠŸèƒ½(仅对系统应用开放) TonePlayer<sup>9+</sup>æä¾›æ’放和管ç†DTMF(Dual Tone Multi Frequency,åŒéŸ³å¤šé¢‘)音调的方法,包括å„ç§ç³»ç»Ÿç›‘å¬éŸ³è°ƒã€ä¸“有音调,如拨å·éŸ³ã€é€šè¯å›žé“ƒéŸ³ç‰ã€‚主è¦å·¥ä½œæ˜¯å°†éœ€è¦ç”ŸæˆéŸ³è°ƒçš„[ToneType](../../reference/apis-audio-kit/js-apis-audio-sys.md#tonetype9)类型,通过自带算法生æˆå¤šä¸ªä¸åŒé¢‘率的æ£å¼¦æ³¢å åŠ å½¢æˆå£°éŸ³æ•°æ®ï¼Œé€šè¿‡[AudioRenderer](../../reference/apis-audio-kit/js-apis-audio.md#audiorenderer8)è¿›è¡Œæ’æ”¾ï¼ŒåŒæ—¶å¯¹æ’放任务进行管ç†ã€‚包å«åŠ è½½DTMF音调é…ç½®ã€å¯åЍDTMFéŸ³è°ƒæ’æ”¾ã€åœæ¢å½“剿£åœ¨æ’放的音调ã€é‡Šæ”¾ä¸Žæ¤TonePlayer对象关è”的资æºç‰æµç¨‹ã€‚详细API说明请å‚考[TonePlayer API文档](../../reference/apis-audio-kit/js-apis-audio-sys.md#toneplayer9)。 ## 支æŒçš„æ’æ”¾éŸ³è°ƒç±»åž‹ æ’æ”¾éŸ³è°ƒç±»åž‹[ToneType](../../reference/apis-audio-kit/js-apis-audio-sys.md#tonetype9)ä¿¡æ¯ï¼ˆå¦‚下表所示),å¯é€šè¿‡"audio.ToneType.指定类型" ä½œä¸ºå‚æ•°è°ƒç”¨load()æ–¹æ³•åŠ è½½æŒ‡å®šç±»åž‹çš„éŸ³è°ƒèµ„æºã€‚ | æ’æ”¾éŸ³è°ƒç±»åž‹ | 值 | 说明 | | -------- | -------- | -------- | | TONE_TYPE_DIAL_0 | 0 | é”®0çš„DTMF音。 | | TONE_TYPE_DIAL_1 | 1 | é”®1çš„DTMF音。 | | TONE_TYPE_DIAL_2 | 2 | é”®2çš„DTMF音。 | | TONE_TYPE_DIAL_3 | 3 | é”®3çš„DTMF音。 | | TONE_TYPE_DIAL_4 | 4 | é”®4çš„DTMF音。 | | TONE_TYPE_DIAL_5 | 5 | é”®5çš„DTMF音。 | | TONE_TYPE_DIAL_6 | 6 | é”®6çš„DTMF音。 | | TONE_TYPE_DIAL_7 | 7 | é”®7çš„DTMF音。 | | TONE_TYPE_DIAL_8 | 8 | é”®8çš„DTMF音。 | | TONE_TYPE_DIAL_9 | 9 | é”®9çš„DTMF音。 | | TONE_TYPE_DIAL_S | 10 | é”®\*çš„DTMF音。 | | TONE_TYPE_DIAL_P | 11 | é”®\#çš„DTMF音。 | | TONE_TYPE_DIAL_A | 12 | é”®Açš„DTMF音。 | | TONE_TYPE_DIAL_B | 13 | é”®Bçš„DTMF音。 | | TONE_TYPE_DIAL_C | 14 | é”®Cçš„DTMF音。 | | TONE_TYPE_DIAL_D | 15 | é”®Dçš„DTMF音。 | | TONE_TYPE_COMMON_SUPERVISORY_DIAL | 100 | 呼å«ç›‘管音调,拨å·éŸ³ã€‚ | | TONE_TYPE_COMMON_SUPERVISORY_BUSY | 101 | 呼å«ç›‘管音调,忙。 | | TONE_TYPE_COMMON_SUPERVISORY_CONGESTION | 102 | 呼å«ç›‘管音调,拥塞。 | | TONE_TYPE_COMMON_SUPERVISORY_RADIO_ACK | 103 | 呼å«ç›‘ç®¡éŸ³è°ƒï¼Œæ— çº¿ç”µ ACK。 | | TONE_TYPE_COMMON_SUPERVISORY_RADIO_NOT_AVAILABLE | 104 | 呼å«ç›‘ç®¡éŸ³è°ƒï¼Œæ— çº¿ç”µä¸å¯ç”¨ã€‚ | | TONE_TYPE_COMMON_SUPERVISORY_CALL_WAITING | 106 | 呼å«ç›‘管音调,呼å«ç‰å¾…。 | | TONE_TYPE_COMMON_SUPERVISORY_RINGTONE | 107 | 呼å«ç›‘管音调,铃声。 | | TONE_TYPE_COMMON_PROPRIETARY_BEEP | 200 | 专有声调,一般蜂鸣声。 | | TONE_TYPE_COMMON_PROPRIETARY_ACK | 201 | 专有声调,ACK。 | | TONE_TYPE_COMMON_PROPRIETARY_PROMPT | 203 | 专有声调,PROMPT。 | | TONE_TYPE_COMMON_PROPRIETARY_DOUBLE_BEEP | 204 | 专有声调,åŒé‡èœ‚鸣声。 | ## 开呿¥éª¤åŠæ³¨æ„事项 以下æ¥éª¤æè¿°äº†TonePlayer接å£å®žçŽ°æ’æ”¾åŠŸèƒ½æµç¨‹ï¼š 1. 创建DTMFæ’æ”¾å™¨ ,获å–tonePlayer实例。 ```ts import { audio } from '@kit.AudioKit'; let audioRendererInfo: audio.AudioRendererInfo = { usage : audio.StreamUsage.STREAM_USAGE_DTMF, rendererFlags : 0 }; async function createTonePlayer() { let tonePlayerPromise = await audio.createTonePlayer(audioRendererInfo); } ``` 2. åŠ è½½æŒ‡å®šç±»åž‹DTMF音调é…置。 ```ts async function load() { await tonePlayerPromise.load(audio.ToneType.TONE_TYPE_DIAL_0); } ``` 3. å¯åЍDTMFéŸ³è°ƒæ’æ”¾ã€‚ ```ts async function start() { await tonePlayerPromise.start(); } ``` 4. åœæ¢å½“剿£åœ¨æ’放的音调。 ```ts async function stop() { await tonePlayerPromise.stop(); } ``` 5. 释放与æ¤TonePlayer对象关è”的资æºã€‚ ```ts async function release() { await tonePlayerPromise.release(); } ``` åœ¨æŽ¥å£æœªæŒ‰æ¤æ£å¸¸è°ƒç”¨æ—¶åºè°ƒç”¨æ—¶ï¼ŒæŽ¥å£ä¼šè¿”回错误ç 6800301 NAPI_ERR_SYSTEM。 ## 完整示例 å‚è€ƒä»¥ä¸‹ç¤ºä¾‹ï¼Œç‚¹å‡»é”®ç›˜æ‹¨å·æŒ‰é”®ï¼Œå¹¶å¯åŠ¨å¯¹åº”çš„DTMFéŸ³è°ƒæ’æ”¾ã€‚ 为ä¿è¯UI线程ä¸è¢«é˜»å¡žï¼Œå¤§éƒ¨åˆ†TonePlayer调用都是异æ¥çš„。对于æ¯ä¸ªAPIå‡æä¾›äº†callback函数和Promise函数,以下示例å‡é‡‡ç”¨Promise函数,更多方å¼å¯å‚考API文档[TonePlayer](../../reference/apis-audio-kit/js-apis-audio-sys.md#toneplayer9)。 ```ts import { audio } from '@kit.AudioKit'; import { BusinessError } from '@kit.BasicServicesKit'; let timerPro : number; // promiseè°ƒç”¨æ–¹å¼ async function testTonePlayerPromise(type: audio.ToneType) { console.info('testTonePlayerPromise start'); if (timerPro) clearTimeout(timerPro); let tonePlayerPromise: audio.TonePlayer; let audioRendererInfo: audio.AudioRendererInfo = { usage : audio.StreamUsage.STREAM_USAGE_DTMF, rendererFlags : 0 }; timerPro = setTimeout(async () => { try { console.info('testTonePlayerPromise: createTonePlayer'); // 创建DTMFæ’æ”¾å™¨ tonePlayerPromise = await audio.createTonePlayer(audioRendererInfo); console.info('testTonePlayerPromise: createTonePlayer-success'); console.info(`testTonePlayerPromise: load type: ${type}`); // åŠ è½½type类型音调 await tonePlayerPromise.load(type); console.info('testTonePlayerPromise: load-success'); console.info(`testTonePlayerPromise: start type: ${type}`); // å¯åЍDTMFéŸ³è°ƒæ’æ”¾ await tonePlayerPromise.start(); console.info('testTonePlayerPromise: start-success'); console.info(`testTonePlayerPromise: stop type: ${type}`); setTimeout(async()=>{ // åœæ¢å½“剿£åœ¨æ’放的音调 await tonePlayerPromise.stop(); console.info('testTonePlayerPromise: stop-success'); console.info(`testTonePlayerPromise: release type: ${type}`); // 释放与æ¤TonePlayer对象关è”çš„èµ„æº await tonePlayerPromise.release(); console.info('testTonePlayerPromise: release-success'); }, 30) } catch(err) { let error = err as BusinessError; console.error(`testTonePlayerPromise err : ${error}`); } }, 200) }; async function testTonePlayer() { testTonePlayerPromise(audio.ToneType.TONE_TYPE_DIAL_0); } ```