管理麥克風(fēng)

2024-02-16 13:56 更新

因?yàn)樵阡浿七^程中需要使用麥克風(fēng)錄制相關(guān)音頻數(shù)據(jù),所以建議開發(fā)者在調(diào)用錄制接口前查詢麥克風(fēng)狀態(tài),并在錄制過程中監(jiān)聽麥克風(fēng)的狀態(tài)變化,避免影響錄制效果。

在音頻錄制過程中,用戶可以將麥克風(fēng)靜音,此時(shí)錄音過程正常進(jìn)行,錄制生成的數(shù)據(jù)文件的大小隨錄制時(shí)長(zhǎng)遞增,但寫入文件的數(shù)據(jù)均為0,即無(wú)聲數(shù)據(jù)(空白數(shù)據(jù))。

開發(fā)步驟及注意事項(xiàng)

在AudioVolumeGroupManager中提供了管理麥克風(fēng)狀態(tài)的方法,接口的詳細(xì)說明請(qǐng)參考API文檔

  1. 創(chuàng)建audioVolumeGroupManager對(duì)象。
    1. import audio from '@ohos.multimedia.audio';
    2. let audioVolumeGroupManager;
    3. async function loadVolumeGroupManager() { //創(chuàng)建audioVolumeGroupManager對(duì)象
    4. const groupid = audio.DEFAULT_VOLUME_GROUP_ID;
    5. audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid);
    6. console.info('audioVolumeGroupManager create success.');
    7. }
  2. 調(diào)用on('micStateChange')監(jiān)聽麥克風(fēng)狀態(tài)變化,當(dāng)麥克風(fēng)靜音狀態(tài)發(fā)生變化時(shí)將通知應(yīng)用。

    目前此訂閱接口在單進(jìn)程多AudioManager實(shí)例的使用場(chǎng)景下,僅最后一個(gè)實(shí)例的訂閱生效,其他實(shí)例的訂閱會(huì)被覆蓋(即使最后一個(gè)實(shí)例沒有進(jìn)行訂閱),因此推薦使用單一AudioManager實(shí)例進(jìn)行開發(fā)。

    1. async function on() { //監(jiān)聽麥克風(fēng)狀態(tài)變化
    2. audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
    3. console.info(`Current microphone status is: ${micStateChange.mute} `);
    4. });
    5. }
  3. 調(diào)用isMicrophoneMute查詢麥克風(fēng)當(dāng)前靜音狀態(tài),返回true為靜音,false為非靜音。
    1. async function isMicrophoneMute() { //查詢麥克風(fēng)是否靜音
    2. await audioVolumeGroupManager.isMicrophoneMute().then((value) => {
    3. console.info(`isMicrophoneMute is: ${value}.`);
    4. });
    5. }
  4. 根據(jù)查詢結(jié)果的實(shí)際情況,調(diào)用setMicrophoneMute設(shè)置麥克風(fēng)靜音狀態(tài),入?yún)⑤斎雝rue為靜音,false為非靜音。
    1. async function setMicrophoneMuteTrue() { //設(shè)置麥克風(fēng)靜音,入?yún)閠rue
    2. await audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
    3. console.info('setMicrophoneMute to mute.');
    4. });
    5. }
    6. async function setMicrophoneMuteFalse() { //取消麥克風(fēng)靜音,入?yún)閒alse
    7. await audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
    8. console.info('setMicrophoneMute to not mute.');
    9. });
    10. }

完整示例

參考以下示例,完成從設(shè)置麥克風(fēng)靜音到取消麥克風(fēng)靜音的過程。

  1. import audio from '@ohos.multimedia.audio';
  2. @Entry
  3. @Component
  4. struct AudioVolumeGroup {
  5. private audioVolumeGroupManager: audio.AudioVolumeGroupManager;
  6. async loadVolumeGroupManager() {
  7. const groupid = audio.DEFAULT_VOLUME_GROUP_ID;
  8. this.audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid);
  9. console.info('audioVolumeGroupManager------create-------success.');
  10. }
  11. async on() { //監(jiān)聽麥克風(fēng)狀態(tài)變化
  12. await this.loadVolumeGroupManager();
  13. this.audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
  14. console.info(`Current microphone status is: ${micStateChange.mute} `);
  15. });
  16. }
  17. async isMicrophoneMute() { //查詢麥克風(fēng)是否靜音
  18. await this.audioVolumeGroupManager.isMicrophoneMute().then((value) => {
  19. console.info(`isMicrophoneMute is: ${value}.`);
  20. });
  21. }
  22. async setMicrophoneMuteTrue() { //設(shè)置麥克風(fēng)靜音
  23. await this.loadVolumeGroupManager();
  24. await this.audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
  25. console.info('setMicrophoneMute to mute.');
  26. });
  27. }
  28. async setMicrophoneMuteFalse() { //取消麥克風(fēng)靜音
  29. await this.loadVolumeGroupManager();
  30. await this.audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
  31. console.info('setMicrophoneMute to not mute.');
  32. });
  33. }
  34. async test(){
  35. await this.on();
  36. await this.isMicrophoneMute();
  37. await this.setMicrophoneMuteTrue();
  38. await this.isMicrophoneMute();
  39. await this.setMicrophoneMuteFalse();
  40. await this.isMicrophoneMute();
  41. await this.setMicrophoneMuteTrue();
  42. await this.isMicrophoneMute();
  43. }
  44. }
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)