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