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-->