logo
积分中心
鸿蒙媒体开发系列10——麦克风管理(AudioVolumeGroupManager)
头像 蓝亭书序 2026-10-28 14:53:45    发布
0 浏览 0 点赞 0 收藏

在AudioVolumeGroupManager中提供了管理麦克风状态的方法。下面对核心开发步骤做个简单介绍。

1、主要开发步骤

a)创建audioVolumeGroupManager对象。


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.');
}


b)调用on('micStateChange')监听麦克风状态变化,当麦克风静音状态发生变化时将通知应用。

目前此订阅接口在单进程多AudioManager实例的使用场景下,仅最后一个实例的订阅生效,其他实例的订阅会被覆盖(即使最后一个实例没有进行订阅),因此推荐使用单一AudioManager实例进行开发。


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


c)调用isMicrophoneMute查询麦克风当前静音状态,返回true为静音,false为非静音。


async function isMicrophoneMute() { //查询麦克风是否静音
  await audioVolumeGroupManager.isMicrophoneMute().then((value) => {
    console.info(`isMicrophoneMute is: ${value}.`);
  });
}


d)根据查询结果的实际情况,调用setMicrophoneMute设置麦克风静音状态,入参输入true为静音,false为非静音。


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.');
  });
}



注意:因为在录制过程中需要使用麦克风录制相关音频数据,所以建议开发者在调用录制接口前查询麦克风状态,并在录制过程中监听麦克风的状态变化,避免影响录制效果。在音频录制过程中,用户可以将麦克风静音,此时录音过程正常进行,录制生成的数据文件的大小随录制时长递增,但写入文件的数据均为0,即无声数据(空白数据)。


2、Demo

一个示例,从设置麦克风静音到取消麦克风静音的过程。


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();
  }
}




©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255