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