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 '@kit.AudioKit'; 15 16 let audioVolumeGroupManager: audio.AudioVolumeGroupManager; 17 18 // 创建audioVolumeGroupManager对象 19 async function loadVolumeGroupManager() { 20 const groupid = audio.DEFAULT_VOLUME_GROUP_ID; 21 audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid); 22 console.info('audioVolumeGroupManager create success.'); 23 } 24 ``` 25<!--Del--> 262. **(仅对系统应用开放)** 调用on('micStateChange')监听麦克风状态变化,当麦克风静音状态发生变化时将通知应用。 27 28 目前此订阅接口在单进程多AudioManager实例的使用场景下,仅最后一个实例的订阅生效,其他实例的订阅会被覆盖(即使最后一个实例没有进行订阅),因此推荐使用单一AudioManager实例进行开发。 29 30 ```ts 31 // 监听麦克风状态变化 32 async function on() { 33 audioVolumeGroupManager.on('micStateChange', (micStateChange: audio.MicStateChangeEvent) => { 34 console.info(`Current microphone status is: ${micStateChange.mute} `); 35 }); 36 } 37 ``` 38<!--DelEnd--> 39 403. 调用isMicrophoneMute查询麦克风当前静音状态,返回true为静音,false为非静音。 41 42 ```ts 43 // 查询麦克风是否静音 44 async function isMicrophoneMute() { 45 await audioVolumeGroupManager.isMicrophoneMute().then((value: boolean) => { 46 console.info(`isMicrophoneMute is: ${value}.`); 47 }); 48 } 49 ``` 50<!--Del--> 514. **(仅对系统应用开放)** 根据查询结果的实际情况,调用setMicrophoneMute设置麦克风静音状态,入参输入true为静音,false为非静音。 52 53 ```ts 54 // 设置麦克风静音,入参为true 55 async function setMicrophoneMuteTrue() { 56 await audioVolumeGroupManager.setMicMute(true).then(() => { 57 console.info('setMicrophoneMute to mute.'); 58 }); 59 } 60 61 // 取消麦克风静音,入参为false 62 async function setMicrophoneMuteFalse() { 63 await audioVolumeGroupManager.setMicMute(false).then(() => { 64 console.info('setMicrophoneMute to not mute.'); 65 }); 66 } 67 ``` 68 69## 完整示例 70 71参考以下示例,完成从设置麦克风静音到取消麦克风静音的过程。 72 73```ts 74 import { audio } from '@kit.AudioKit'; 75 76 let audioVolumeGroupManager: audio.AudioVolumeGroupManager; 77 78 async function loadVolumeGroupManager() { 79 const groupid = audio.DEFAULT_VOLUME_GROUP_ID; 80 audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid); 81 console.info('audioVolumeGroupManager------create-------success.'); 82 } 83 84 // 监听麦克风状态变化 85 async function on() { 86 await loadVolumeGroupManager(); 87 audioVolumeGroupManager.on('micStateChange', (micStateChange) => { 88 console.info(`Current microphone status is: ${micStateChange.mute} `); 89 }); 90 } 91 92 // 查询麦克风是否静音 93 async function isMicrophoneMute() { 94 await audioVolumeGroupManager.isMicrophoneMute().then((value) => { 95 console.info(`isMicrophoneMute is: ${value}.`); 96 }); 97 } 98 99 // 设置麦克风静音 100 async function setMicrophoneMuteTrue() { 101 await loadVolumeGroupManager(); 102 await audioVolumeGroupManager.setMicMute(true).then(() => { 103 console.info('setMicrophoneMute to mute.'); 104 }); 105 } 106 107 // 取消麦克风静音 108 async function setMicrophoneMuteFalse() { 109 await loadVolumeGroupManager(); 110 await audioVolumeGroupManager.setMicMute(false).then(() => { 111 console.info('setMicrophoneMute to not mute.'); 112 }); 113 } 114 115 async function test(){ 116 await on(); 117 await isMicrophoneMute(); 118 await setMicrophoneMuteTrue(); 119 await isMicrophoneMute(); 120 await setMicrophoneMuteFalse(); 121 await isMicrophoneMute(); 122 await setMicrophoneMuteTrue(); 123 await isMicrophoneMute(); 124 } 125``` 126<!--DelEnd-->