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