mic-management.md 4.4 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
# 管理麦克风

因为在录制过程中需要使用麦克风录制相关音频数据,所以建议开发者在调用录制接口前查询麦克风状态,并在录制过程中监听麦克风的状态变化,避免影响录制效果。

在音频录制过程中,用户可以将麦克风静音,此时录音过程正常进行,录制生成的数据文件的大小随录制时长递增,但写入文件的数据均为0,即无声数据(空白数据)。

## 开发步骤及注意事项

在AudioVolumeGroupManager中提供了管理麦克风状态的方法,接口的详细说明请参考[API文档](../reference/apis/js-apis-audio.md#audiovolumegroupmanager9)

1. 创建audioVolumeGroupManager对象。
     
   ```ts
   import audio from '@ohos.multimedia.audio';
   
   let audioVolumeGroupManager;
   async function loadVolumeGroupManager() { //创建audioVolumeGroupManager对象
     const groupid = audio.DEFAULT_VOLUME_GROUP_ID;
     audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid);
     console.info('audioVolumeGroupManager create success.');
   }
   ```

2. 调用on('micStateChange')监听麦克风状态变化,当麦克风静音状态发生变化时将通知应用。
   
   目前此订阅接口在单进程多AudioManager实例的使用场景下,仅最后一个实例的订阅生效,其他实例的订阅会被覆盖(即使最后一个实例没有进行订阅),因此推荐使用单一AudioManager实例进行开发。

     
   ```ts
   async function on() {   //监听麦克风状态变化
     audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
       console.info(`Current microphone status is: ${micStateChange.mute} `);
     });
   }
   ```

3. 调用isMicrophoneMute查询麦克风当前静音状态,返回true为静音,false为非静音。
     
   ```ts
   async function isMicrophoneMute() { //查询麦克风是否静音
     await audioVolumeGroupManager.isMicrophoneMute().then((value) => {
       console.info(`isMicrophoneMute is: ${value}.`);
     });
   }
   ```

4. 根据查询结果的实际情况,调用setMicrophoneMute设置麦克风静音状态,入参输入true为静音,false为非静音。设置成功返回true,否则返回false。
     
   ```ts
   async function setMicrophoneMuteTrue() { //设置麦克风静音,入参为true
     await audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
       console.info('setMicrophoneMute to mute.');
     });
   }
   async function setMicrophoneMuteFalse() { //取消麦克风静音,入参为false
     await audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
       console.info('setMicrophoneMute to not mute.');
     });
   }
   ```

## 完整示例

参考以下示例,完成从设置麦克风静音到取消麦克风静音的过程。

```ts
import audio from '@ohos.multimedia.audio';

@Entry
@Component
struct AudioVolumeGroup {
 private audioVolumeGroupManager: audio.AudioVolumeGroupManager;

  async loadVolumeGroupManager() {
    const groupid = audio.DEFAULT_VOLUME_GROUP_ID;
    this.audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid);
    console.info('audioVolumeGroupManager------create-------success.');
  }

  async on() {   //监听麦克风状态变化
    await this.loadVolumeGroupManager();
    this.audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
      console.info(`Current microphone status is: ${micStateChange.mute} `);
    });
  }
  async isMicrophoneMute() { //查询麦克风是否静音
    await this.audioVolumeGroupManager.isMicrophoneMute().then((value) => {
      console.info(`isMicrophoneMute is: ${value}.`);
    });
  }
  async setMicrophoneMuteTrue() { //设置麦克风静音
    await this.loadVolumeGroupManager();
    await this.audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
      console.info('setMicrophoneMute to mute.');
    });
  }
  async setMicrophoneMuteFalse() { //取消麦克风静音
    await this.loadVolumeGroupManager();
    await this.audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
      console.info('setMicrophoneMute to not mute.');
    });
  }
  async test(){
    await this.on();
    await this.isMicrophoneMute();
    await this.setMicrophoneMuteTrue();
    await this.isMicrophoneMute();
    await this.setMicrophoneMuteFalse();
    await this.isMicrophoneMute();
    await this.setMicrophoneMuteTrue();
    await this.isMicrophoneMute();
  }
}
```