1# 管理麦克风 2<!--Kit: Audio Kit--> 3<!--Subsystem: Multimedia--> 4<!--Owner: @songshenke--> 5<!--Designer: @caixuejiang; @hao-liangfei; @zhanganxiang--> 6<!--Tester: @Filger--> 7<!--Adviser: @zengyawen--> 8 9因为在录制过程中需要使用麦克风录制相关音频数据,所以建议开发者在调用录制接口前查询麦克风状态,并在录制过程中监听麦克风的状态变化,避免影响录制效果。 10 11在音频录制过程中,用户可以将麦克风静音,此时录音过程正常进行,录制生成的数据文件的大小随录制时长递增,但写入文件的数据均为0,即无声数据(空白数据)。 12 13## 开发步骤及注意事项 14 15在AudioVolumeGroupManager中提供了管理麦克风状态的方法,接口的详细说明请参考[API文档](../../reference/apis-audio-kit/arkts-apis-audio-AudioVolumeGroupManager.md)。 16 171. 创建audioVolumeGroupManager对象。 18 19 ```ts 20 import { audio } from '@kit.AudioKit'; 21 22 let audioVolumeGroupManager: audio.AudioVolumeGroupManager; 23 24 // 创建audioVolumeGroupManager对象。 25 async function loadVolumeGroupManager() { 26 const groupid = audio.DEFAULT_VOLUME_GROUP_ID; 27 audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid); 28 console.info('audioVolumeGroupManager create success.'); 29 } 30 ``` 31<!--Del--> 322. **(仅对系统应用开放)** 调用on('micStateChange')监听麦克风状态变化,当麦克风静音状态发生变化时将通知应用。 33 34 目前此订阅接口在单进程多AudioManager实例的使用场景下,仅最后一个实例的订阅生效,其他实例的订阅会被覆盖(即使最后一个实例没有进行订阅),因此推荐使用单一AudioManager实例进行开发。 35 36 ```ts 37 // 监听麦克风状态变化。 38 async function on() { 39 audioVolumeGroupManager.on('micStateChange', (micStateChange: audio.MicStateChangeEvent) => { 40 console.info(`Current microphone status is: ${micStateChange.mute} `); 41 }); 42 } 43 ``` 44<!--DelEnd--> 45 463. 调用isMicrophoneMute查询麦克风当前静音状态,返回true为静音,false为非静音。 47 48 ```ts 49 // 查询麦克风是否静音。 50 async function isMicrophoneMute() { 51 await audioVolumeGroupManager.isMicrophoneMute().then((value: boolean) => { 52 console.info(`isMicrophoneMute is: ${value}.`); 53 }); 54 } 55 ``` 56<!--Del--> 574. **(仅对系统应用开放)** 根据查询结果的实际情况,调用setMicrophoneMute设置麦克风静音状态,入参输入true为静音,false为非静音。 58 59 ```ts 60 // 设置麦克风静音,入参为true。 61 async function setMicrophoneMuteTrue() { 62 await audioVolumeGroupManager.setMicMute(true).then(() => { 63 console.info('setMicrophoneMute to mute.'); 64 }); 65 } 66 67 // 取消麦克风静音,入参为false。 68 async function setMicrophoneMuteFalse() { 69 await audioVolumeGroupManager.setMicMute(false).then(() => { 70 console.info('setMicrophoneMute to not mute.'); 71 }); 72 } 73 ``` 74 75## 完整示例 76 77参考以下示例,完成从设置麦克风静音到取消麦克风静音的过程。 78 79```ts 80 import { audio } from '@kit.AudioKit'; 81 82 let audioVolumeGroupManager: audio.AudioVolumeGroupManager; 83 84 async function loadVolumeGroupManager() { 85 const groupid = audio.DEFAULT_VOLUME_GROUP_ID; 86 audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid); 87 console.info('audioVolumeGroupManager------create-------success.'); 88 } 89 90 // 监听麦克风状态变化。 91 async function on() { 92 await loadVolumeGroupManager(); 93 audioVolumeGroupManager.on('micStateChange', (micStateChange) => { 94 console.info(`Current microphone status is: ${micStateChange.mute} `); 95 }); 96 } 97 98 // 查询麦克风是否静音。 99 async function isMicrophoneMute() { 100 await audioVolumeGroupManager.isMicrophoneMute().then((value) => { 101 console.info(`isMicrophoneMute is: ${value}.`); 102 }); 103 } 104 105 // 设置麦克风静音。 106 async function setMicrophoneMuteTrue() { 107 await loadVolumeGroupManager(); 108 await audioVolumeGroupManager.setMicMute(true).then(() => { 109 console.info('setMicrophoneMute to mute.'); 110 }); 111 } 112 113 // 取消麦克风静音。 114 async function setMicrophoneMuteFalse() { 115 await loadVolumeGroupManager(); 116 await audioVolumeGroupManager.setMicMute(false).then(() => { 117 console.info('setMicrophoneMute to not mute.'); 118 }); 119 } 120 121 async function test(){ 122 await on(); 123 await isMicrophoneMute(); 124 await setMicrophoneMuteTrue(); 125 await isMicrophoneMute(); 126 await setMicrophoneMuteFalse(); 127 await isMicrophoneMute(); 128 await setMicrophoneMuteTrue(); 129 await isMicrophoneMute(); 130 } 131``` 132<!--DelEnd-->