• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理麦克风
2
3因为在录制过程中需要使用麦克风录制相关音频数据,所以建议开发者在调用录制接口前查询麦克风状态,并在录制过程中监听麦克风的状态变化,避免影响录制效果。
4
5在音频录制过程中,用户可以将麦克风静音,此时录音过程正常进行,录制生成的数据文件的大小随录制时长递增,但写入文件的数据均为0,即无声数据(空白数据)。
6
7## 开发步骤及注意事项
8
9在AudioVolumeGroupManager中提供了管理麦克风状态的方法,接口的详细说明请参考[API文档](../reference/apis/js-apis-audio.md#audiovolumegroupmanager9)。
10
111. 创建audioVolumeGroupManager对象。
12
13   ```ts
14   import audio from '@ohos.multimedia.audio';
15
16   let 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
29   ```ts
30   async function on() {   //监听麦克风状态变化
31     audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
32       console.info(`Current microphone status is: ${micStateChange.mute} `);
33     });
34   }
35   ```
36
373. 调用isMicrophoneMute查询麦克风当前静音状态,返回true为静音,false为非静音。
38
39   ```ts
40   async function isMicrophoneMute() { //查询麦克风是否静音
41     await audioVolumeGroupManager.isMicrophoneMute().then((value) => {
42       console.info(`isMicrophoneMute is: ${value}.`);
43     });
44   }
45   ```
46
474. 根据查询结果的实际情况,调用setMicrophoneMute设置麦克风静音状态,入参输入true为静音,false为非静音。
48
49   ```ts
50   async function setMicrophoneMuteTrue() { //设置麦克风静音,入参为true
51     await audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
52       console.info('setMicrophoneMute to mute.');
53     });
54   }
55   async function setMicrophoneMuteFalse() { //取消麦克风静音,入参为false
56     await audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
57       console.info('setMicrophoneMute to not mute.');
58     });
59   }
60   ```
61
62## 完整示例
63
64参考以下示例,完成从设置麦克风静音到取消麦克风静音的过程。
65
66```ts
67import audio from '@ohos.multimedia.audio';
68
69@Entry
70@Component
71struct AudioVolumeGroup {
72 private audioVolumeGroupManager: audio.AudioVolumeGroupManager;
73
74  async loadVolumeGroupManager() {
75    const groupid = audio.DEFAULT_VOLUME_GROUP_ID;
76    this.audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid);
77    console.info('audioVolumeGroupManager------create-------success.');
78  }
79
80  async on() {   //监听麦克风状态变化
81    await this.loadVolumeGroupManager();
82    this.audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
83      console.info(`Current microphone status is: ${micStateChange.mute} `);
84    });
85  }
86  async isMicrophoneMute() { //查询麦克风是否静音
87    await this.audioVolumeGroupManager.isMicrophoneMute().then((value) => {
88      console.info(`isMicrophoneMute is: ${value}.`);
89    });
90  }
91  async setMicrophoneMuteTrue() { //设置麦克风静音
92    await this.loadVolumeGroupManager();
93    await this.audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
94      console.info('setMicrophoneMute to mute.');
95    });
96  }
97  async setMicrophoneMuteFalse() { //取消麦克风静音
98    await this.loadVolumeGroupManager();
99    await this.audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
100      console.info('setMicrophoneMute to not mute.');
101    });
102  }
103  async test(){
104    await this.on();
105    await this.isMicrophoneMute();
106    await this.setMicrophoneMuteTrue();
107    await this.isMicrophoneMute();
108    await this.setMicrophoneMuteFalse();
109    await this.isMicrophoneMute();
110    await this.setMicrophoneMuteTrue();
111    await this.isMicrophoneMute();
112  }
113}
114```
115