audio-effect-management.md 4.8 KB
Newer Older
Q
update  
Qin Peng 已提交
1 2
# 音效管理

Q
update  
Qin Peng 已提交
3
音效管理主要包括播放实例音效管理和全局音效查询两部分,播放实例音效管理主要包括查询和设置当前音频播放流的音效模式,全局音效查询支持查询ContentType和StreamUsage对应场景支持的音效模式。
Q
update  
Qin Peng 已提交
4 5 6

## 播放实例音效管理

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

Z
zhangkai269 已提交
9
### 获取播放实例
Q
update  
Qin Peng 已提交
10 11 12 13 14

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

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

Z
zhangkai269 已提交
15
  ```ts
Q
update  
Qin Peng 已提交
16 17 18 19 20
  import audio from '@ohos.multimedia.audio';
  ```

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

Z
zhangkai269 已提交
21 22 23 24
  ```ts
  import audio from '@ohos.multimedia.audio';
  import { BusinessError } from '@ohos.base';  
  let audioStreamInfo: audio.AudioStreamInfo = {
Q
update  
Qin Peng 已提交
25 26 27 28 29 30
    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
    channels: audio.AudioChannel.CHANNEL_1,
    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
  };

Z
zhangkai269 已提交
31
  let audioRendererInfo: audio.AudioRendererInfo = {
Q
update  
Qin Peng 已提交
32 33 34 35 36
    content: audio.ContentType.CONTENT_TYPE_SPEECH,
    usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION,
    rendererFlags: 0
  };

Z
zhangkai269 已提交
37
  let audioRendererOptions: audio.AudioRendererOptions = {
Q
update  
Qin Peng 已提交
38 39 40 41
    streamInfo: audioStreamInfo,
    rendererInfo: audioRendererInfo
  };

Z
zhangkai269 已提交
42
  audio.createAudioRenderer(audioRendererOptions, (err: BusinessError, data: audio.AudioRenderer) => {
Q
update  
Qin Peng 已提交
43 44 45 46 47
    if (err) {
      console.error(`Invoke createAudioRenderer failed, code is ${err.code}, message is ${err.message}`);
      return;
    } else {
      console.info('Invoke createAudioRenderer succeeded.');
Z
zhangkai269 已提交
48
      let audioRenderer: audio.AudioRenderer = data;
Q
update  
Qin Peng 已提交
49 50 51
    }
  });
  ```
Q
Qin Peng 已提交
52

Z
zhangkai269 已提交
53
### 查询当前播放实例的音效模式
Q
Qin Peng 已提交
54

Z
zhangkai269 已提交
55 56 57
  ```ts
  import { BusinessError } from '@ohos.base';  
  audioRenderer.getAudioEffectMode((err: BusinessError, effectmode: audio.AudioEffectMode) => {
Q
update  
Qin Peng 已提交
58 59 60 61 62 63 64 65
    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 已提交
66

Z
zhangkai269 已提交
67
### 设置当前播放实例的音效模式
Q
Qin Peng 已提交
68 69 70

关闭系统音效:

Z
zhangkai269 已提交
71 72 73
  ```ts
  import { BusinessError } from '@ohos.base';  
  audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_NONE, (err: BusinessError) => {
Q
update  
Qin Peng 已提交
74 75 76 77 78 79 80 81
    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 已提交
82 83 84

开启系统音效默认模式:

Z
zhangkai269 已提交
85 86 87
  ```ts
  import { BusinessError } from '@ohos.base';  
  audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT, (err: BusinessError) => {
Q
update  
Qin Peng 已提交
88 89 90 91 92 93 94 95 96
    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
update  
Qin Peng 已提交
97
## 全局查询音效模式
Q
update  
Qin Peng 已提交
98

99
主要包括全局音效查询相应StreamUsage对应场景的音效模式。
Q
update  
Qin Peng 已提交
100
对于播放音频类的应用,开发者需要关注该应用的音频流使用什么音效模式并做出相应的操作,比如音乐App播放时,应选择音乐场景下的模式。在使用查询接口前,开发者需要使用getStreamManager()创建一个AudioStreamManager音频流管理实例。
Q
update  
Qin Peng 已提交
101

Z
zhangkai269 已提交
102
### 获取音频流管理接口
Q
update  
Qin Peng 已提交
103

Q
update  
Qin Peng 已提交
104
1.创建AudioStreamManager实例。在使用AudioStreamManager的API前,需要使用getStreamManager()创建一个AudioStreamManager实例。
Q
update  
Qin Peng 已提交
105

Z
zhangkai269 已提交
106
   ```ts
X
Xiangyu Li 已提交
107 108 109 110
   import audio from '@ohos.multimedia.audio';
   let audioManager = audio.getAudioManager();
   let audioStreamManager = audioManager.getStreamManager();
   ```
X
Xiangyu Li 已提交
111

Z
zhangkai269 已提交
112
### 查询对应场景的音效模式
X
Xiangyu Li 已提交
113

Z
zhangkai269 已提交
114 115 116
  ```ts
  import { BusinessError } from '@ohos.base';  
  audioStreamManager.getAudioEffectInfoArray(audio.StreamUsage.STREAM_USAGE_MEDIA, async (err: BusinessError, audioEffectInfoArray: audio.AudioEffectInfoArray) => {
X
Xiangyu Li 已提交
117
    if (err) {
X
Xiangyu Li 已提交
118
      console.error('Failed to get effect info array');
X
Xiangyu Li 已提交
119 120
      return;    
    } else {
Q
update  
Qin Peng 已提交
121
      console.info(`getAudioEffectInfoArray: ${audioEffectInfoArray}`);
X
Xiangyu Li 已提交
122 123 124
    }
  });
  ```