• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 音效管理
2
3音效管理主要包括播放实例音效管理和全局音效查询两部分,播放实例音效管理主要包括查询和设置当前音频播放流的音效模式,全局音效查询支持查询ContentType和StreamUsage对应场景支持的音效模式。
4
5## 播放实例音效管理
6
7主要包括查询和设置当前音频播放流的音效模式,音效模式包括EFFECT_NONE关闭音效模式和EFFECT_DEFAULT默认音效模式。默认音效模式会根据创建音频流的ContentType和StreamUsage自动加载对应场景的音效。
8
9### 获取播放实例
10
11管理播放实例音效的接口是getAudioEffectMode()查询当前音频播放流的音效模式和setAudioEffectMode(mode: AudioEffectMode)设置当前音频播放流的音效模式,在使用之前,需要使用createAudioRenderer(options: AudioRendererOptions)先创建音频播放流AudioRenderer实例。
12
131. 步骤一:导入音频接口。
14
15  ```ts
16  import audio from '@ohos.multimedia.audio';
17  ```
18
192. 步骤二:配置音频渲染参数并创建AudioRenderer实例,音频渲染参数的详细信息可以查看[AudioRendererOptions](../reference/apis/js-apis-audio.md#audiorendereroptions8),创建AudioRenderer实例时会默认挂载EFFECT_DEFAULT模式音效。
20
21  ```ts
22  import audio from '@ohos.multimedia.audio';
23  import { BusinessError } from '@ohos.base';
24  let audioStreamInfo: audio.AudioStreamInfo = {
25    samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
26    channels: audio.AudioChannel.CHANNEL_1,
27    sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
28    encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
29  };
30
31  let audioRendererInfo: audio.AudioRendererInfo = {
32    content: audio.ContentType.CONTENT_TYPE_SPEECH,
33    usage: audio.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION,
34    rendererFlags: 0
35  };
36
37  let audioRendererOptions: audio.AudioRendererOptions = {
38    streamInfo: audioStreamInfo,
39    rendererInfo: audioRendererInfo
40  };
41
42  audio.createAudioRenderer(audioRendererOptions, (err: BusinessError, data: audio.AudioRenderer) => {
43    if (err) {
44      console.error(`Invoke createAudioRenderer failed, code is ${err.code}, message is ${err.message}`);
45      return;
46    } else {
47      console.info('Invoke createAudioRenderer succeeded.');
48      let audioRenderer: audio.AudioRenderer = data;
49    }
50  });
51  ```
52
53### 查询当前播放实例的音效模式
54
55  ```ts
56  import { BusinessError } from '@ohos.base';
57  audioRenderer.getAudioEffectMode((err: BusinessError, effectmode: audio.AudioEffectMode) => {
58    if (err) {
59      console.error(`Failed to get params, code is ${err.code}, message is ${err.message}`);
60      return;
61    } else {
62      console.info(`getAudioEffectMode: ${effectmode}`);
63    }
64  });
65  ```
66
67### 设置当前播放实例的音效模式
68
69关闭系统音效:
70
71  ```ts
72  import { BusinessError } from '@ohos.base';
73  audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_NONE, (err: BusinessError) => {
74    if (err) {
75      console.error(`Failed to set params, code is ${err.code}, message is ${err.message}`);
76      return;
77    } else {
78      console.info('Callback invoked to indicate a successful audio effect mode setting.');
79    }
80  });
81  ```
82
83开启系统音效默认模式:
84
85  ```ts
86  import { BusinessError } from '@ohos.base';
87  audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT, (err: BusinessError) => {
88    if (err) {
89      console.error(`Failed to set params, code is ${err.code}, message is ${err.message}`);
90      return;
91    } else {
92      console.info('Callback invoked to indicate a successful audio effect mode setting.');
93    }
94  });
95  ```
96
97## 全局查询音效模式
98
99主要包括全局音效查询相应StreamUsage对应场景的音效模式。
100对于播放音频类的应用,开发者需要关注该应用的音频流使用什么音效模式并做出相应的操作,比如音乐App播放时,应选择音乐场景下的模式。在使用查询接口前,开发者需要使用getStreamManager()创建一个AudioStreamManager音频流管理实例。
101
102### 获取音频流管理接口
103
1041.创建AudioStreamManager实例。在使用AudioStreamManager的API前,需要使用getStreamManager()创建一个AudioStreamManager实例。
105
106   ```ts
107   import audio from '@ohos.multimedia.audio';
108   let audioManager = audio.getAudioManager();
109   let audioStreamManager = audioManager.getStreamManager();
110   ```
111
112### 查询对应场景的音效模式
113
114  ```ts
115  import { BusinessError } from '@ohos.base';
116  audioStreamManager.getAudioEffectInfoArray(audio.StreamUsage.STREAM_USAGE_MEDIA, async (err: BusinessError, audioEffectInfoArray: audio.AudioEffectInfoArray) => {
117    if (err) {
118      console.error('Failed to get effect info array');
119      return;
120    } else {
121      console.info(`getAudioEffectInfoArray: ${audioEffectInfoArray}`);
122    }
123  });
124  ```
125