• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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