audio-effect-management.md 4.1 KB
Newer Older
Q
update  
Qin Peng 已提交
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
# 音效管理

音效管理主要包括播放实例音效管理和静态音效管理,播放实例音效管理主要包括查询和设置当前音频播放流的音效模式,静态音效管理支持查询StreamUsage对应场景支持的音效模式。

## 播放实例音效管理

主要包括查询和设置当前音频播放流的音效模式,音效模式包括EFFECT_NONE关闭音效模式和EFFECT_DEFAULT默认音效模式。默认音效模式会根据创建音频流的StreamUsage自动加载对应场景的音效。

### 获取播放实例

管理播放实例音效的接口是getAudioEffectMode()查询当前音频播放流的音效模式和setAudioEffectMode(mode: AudioEffectMode)设置当前音频播放流的音效模式,在使用之前,需要使用createAudioRenderer(options: AudioRendererOptions)先创建音频播放流AudioRenderer实例。

1. 步骤一:导入音频接口。

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

2. 步骤二:配置音频渲染参数并创建AudioRenderer实例,音频渲染参数的详细信息可以查看[AudioRendererOptions](../reference/apis/js-apis-audio.md#audiorendereroptions8),创建AudioRenderer实例时会默认挂载EFFECT_DEFAULT模式音效。

  ```ts
  let audioStreamInfo = {
    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
    channels: audio.AudioChannel.CHANNEL_1,
    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
  };

  let audioRendererInfo = {
    content: audio.ContentType.CONTENT_TYPE_SPEECH,
    usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION,
    rendererFlags: 0
  };

  let audioRendererOptions = {
    streamInfo: audioStreamInfo,
    rendererInfo: audioRendererInfo
  };

  audio.createAudioRenderer(audioRendererOptions, (err, data) => {
    if (err) {
      console.error(`Invoke createAudioRenderer failed, code is ${err.code}, message is ${err.message}`);
      return;
    } else {
      console.info('Invoke createAudioRenderer succeeded.');
      let audioRenderer = data;
    }
  });
  ```
Q
Qin Peng 已提交
50 51 52

### 查询当前播放实例的音效模式

Q
update  
Qin Peng 已提交
53 54 55 56 57 58 59 60 61 62
  ```ts
  audioRenderer.getAudioEffectMode((err, effectmode) => {
    if (err) {
      console.error(`Failed to get params, code is ${err.code}, message is ${err.message}`);
      return;    
    } else {
      console.info(`getAudioEffectMode: ${effectmode}`);
    }
  });
  ```
Q
Qin Peng 已提交
63 64 65 66 67

### 设置当前播放实例的音效模式

关闭系统音效:

Q
update  
Qin Peng 已提交
68 69 70 71 72 73 74 75 76 77
  ```ts
  audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_NONE, (err) => {
    if (err) {
      console.error(`Failed to set params, code is ${err.code}, message is ${err.message}`);
      return;
    } else {
      console.info('Callback invoked to indicate a successful audio effect mode setting.');
    }
  });
  ```
Q
Qin Peng 已提交
78 79 80

开启系统音效默认模式:

Q
update  
Qin Peng 已提交
81 82 83 84 85 86 87 88 89 90 91
  ```ts
  audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT, (err) => {
    if (err) {
      console.error(`Failed to set params, code is ${err.code}, message is ${err.message}`);
      return;
    } else {
      console.info('Callback invoked to indicate a successful audio effect mode setting.');
    }
  });
  ```

X
Xiangyu Li 已提交
92
## 音频场景全局音效查询
Q
update  
Qin Peng 已提交
93

X
Xiangyu Li 已提交
94 95
主要包括全局音效查询相应ContentType和StreamUsage对应场景的音效模式。
对于播放音频类的应用,开发者需要关注该应用的音频流使用什么音效模式并做出相应的操作,比如音乐App播放时,应选择音乐场景下的模式。参考[使用AudioStreamManager开发音效查询功能](../reference/apis/js-apis-audio.md#getaudioeffectinfoarray10)
Q
update  
Qin Peng 已提交
96

X
Xiangyu Li 已提交
97
### 获取全局音效查询接口
Q
update  
Qin Peng 已提交
98

X
Xiangyu Li 已提交
99
管理播放实例音效的接口getAudioEffectInfoArray()查询音效模式。
Q
update  
Qin Peng 已提交
100 101

### 查询当前XXX音效模式
X
Xiangyu Li 已提交
102 103 104 105 106 107 108 109 110 111 112

  ```ts
  audioRenderer.getAudioEffectInfoArray(audio.ContentType.CONTENT_TYPE_MUSIC, audio.StreamUsage.STREAM_USAGE_MEDIA, async (err, AudioEffectInfoArray) => {
    if (err) {
      console.error(`Failed to get effect info array`);
      return;    
    } else {
      console.info(`getAudioEffectInfoArray: ${getAudioEffectInfoArray}`);
    }
  });
  ```