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