• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# SoundPool (音频池)
2<!--Kit: Media Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @wang-haizhou6-->
5<!--Designer: @HmQQQ-->
6<!--Tester: @xchaosioda-->
7<!--Adviser: @zengyawen-->
8
9音频池提供了短音频的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能。
10
11SoundPool需要和@ohos.multimedia.media配合使用,需要先通过[media.createSoundPool](arkts-apis-media-f.md#mediacreatesoundpool10)完成音频池实例的创建。
12
13> **说明:**
14>
15> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
16
17## 导入模块
18
19```js
20import { media } from '@kit.MediaKit';
21import { audio } from '@kit.AudioKit';
22```
23
24## PlayParameters
25
26表示音频池播放参数设置。
27
28通过设置播放相关参数,来控制播放的音量,循环次数,播放优先级等参数。
29
30**系统能力:** SystemCapability.Multimedia.Media.SoundPool
31
32| 名称            | 类型                                     | 必填 | 说明                                                         |
33| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
34| loop | number   | 否  | 设置循环次数。<br>当loop≥0时,实际播放次数为loop+1。<br> 当loop<0时,表示一直循环。<br>默认值:0,表示仅播放一次。                   |
35| rate | number    | 否  | 设置音频播放的倍速,具体倍速范围参照[AudioRendererRate](../apis-audio-kit/arkts-apis-audio-e.md#audiorendererrate8)。默认值:0。 |
36| leftVolume  | number | 否  | 设置左声道音量,设置范围(0.0~1.0)。默认值:1.0。                                    |
37| rightVolume | number  | 否  | 设置右声道音量,设置范围(0.0~1.0)。(当前不支持左右分别设置,将以左声道音量为准)。默认值:1.0。 |
38| priority  | number  | 否  | 音频流播放的优先级,0为最低优先级,数值越大优先级越高,通过相互比较大小确定播放优先级,设置范围为大于等于0的整数。默认值:0。      |
39
40## ErrorType<sup>20+</sup>
41
42枚举,错误类型(用于区分错误发生阶段)。
43
44**系统能力:** SystemCapability.Multimedia.Media.SoundPool
45
46| 名称                                  | 值      | 说明                             |
47| ----------------------------------- | ------- | --------------------------------- |
48| LOAD_ERROR                           | 1       | 表示加载资源时发生错误。            |
49| PLAY_ERROR                           | 2       | 表示播放资源时发生错误。            |
50
51## ErrorInfo<sup>20+</sup>
52
53错误信息。
54
55**系统能力:** SystemCapability.Multimedia.Media.SoundPool
56
57| 名称            | 类型                                     | 只读 | 可选 | 说明                                                         |
58| --------------- | ---------------------------------------- | ---- | ---- | ------------------------------------------------------------ |
59| errorCode | T  | 否  | 否  |    错误码。errorCode的类型T为[BusinessError](../apis-basic-services-kit/js-apis-base.md#businesserror)类型。    |
60| errorType | [ErrorType](#errortype20)    | 否  | 是  | 表示错误发生阶段。 |
61| soundId  | number | 否  | 是  |  发生错误的资源ID,load方法能够获取soundId。    |
62| streamId | number  | 否  | 是  | 发生错误的音频流ID,play方法能够获取streamId。 |
63
64## SoundPool
65
66音频池提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能, 在调用SoundPool的接口前,需要先通过[createSoundPool](arkts-apis-media-f.md#mediacreatesoundpool10)创建实例。
67
68> **说明:**
69>
70> 在使用SoundPool实例的方法时,建议开发者注册相关回调,主动获取当前状态变化。
71> - [on('loadComplete')](#onloadcomplete):监听资源加载完成。
72> - [on('playFinishedWithStreamId')](#onplayfinishedwithstreamid18):监听播放完成,同时返回播放结束的音频的streamId。
73> - [on('playFinished')](#onplayfinished):监听播放完成。
74> - [on('error')](#onerror):监听错误事件。
75> - [on('errorOccurred')](#onerroroccurred20):监听错误事件,同时返回[errorInfo](#errorinfo20)。
76
77### load
78
79load(uri: string, callback: AsyncCallback\<number>): void
80
81加载音频资源。使用callback方式异步获取资源ID,入参uri通过获取文件fd生成以"fd://"开头的文件描述字符串。
82该方法不支持加载rawfile目录资源,需要通过[load(fd: number, offset: number, length: number, callback: AsyncCallback\<number>): void](#load-2)或者[load(fd: number, offset: number, length: number): Promise\<number>](#load-3)实现。
83
84>**说明:**
85>
86>将资源句柄(fd)或加载路径描述(uri)传递给音频池播放器之后,请不要通过该资源句柄或加载路径描述做其他读写操作,包括但不限于将同一个资源句柄或加载路径描述传递给多个音频池播放器。
87>同一时间通过同一个资源句柄或加载路径描述读写文件时存在竞争关系,将导致播放异常。
88
89**系统能力:** SystemCapability.Multimedia.Media.SoundPool
90
91**参数:**
92
93| 参数名   | 类型                                   | 必填 | 说明                                  |
94| -------- | -------------------------------------- | ---- | ------------------------------------- |
95| uri   | string | 是   | 音频文件的加载路径描述,一般以"fd://"开头的文件描述。 |
96| callback | AsyncCallback\<number>                   | 是   | 异步音频资源加载返回的资源id,有效值大于0。 |
97
98**错误码:**
99
100以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
101
102| 错误码ID | 错误信息                                |
103| -------- | --------------------------------------- |
104| 5400102  | Operation not allowed. Return by callback.|
105| 5400103  | I/O error. Return by callback. |
106| 5400105  | Service died. Return by callback. |
107
108**示例:**
109
110```ts
111import { fileIo } from '@kit.CoreFileKit';
112import { BusinessError } from '@kit.BasicServicesKit';
113import { media } from '@kit.MediaKit';
114import { audio } from '@kit.AudioKit';
115
116// 创建soundPool实例。
117let soundPool: media.SoundPool;
118let audioRendererInfo: audio.AudioRendererInfo = {
119  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
120  rendererFlags: 1
121}
122media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
123  if (error) {
124    console.error(`Failed to createSoundPool`);
125    return;
126  } else {
127    soundPool = soundPool_;
128    console.info(`Succeeded in createSoundPool`);
129    let uri:string = "";
130    let file: fileIo.File;
131    // 获取fd的uri路径。
132    fileIo.open('/test_01.mp3', fileIo.OpenMode.READ_ONLY).then((file_: fileIo.File) => {
133      file = file_;
134      console.info("file fd: " + file.fd);
135      uri = 'fd://' + (file.fd).toString();
136      soundPool.load(uri, (error: BusinessError, soundId_: number) => {
137        if (error) {
138          console.error(`Failed to load soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
139        } else {
140          console.info(`Succeeded in loading soundPool` + JSON.stringify(soundId_));
141        }
142      });
143    }); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。
144  }
145});
146```
147
148### load
149
150load(uri: string): Promise\<number>
151
152加载音频资源。使用Promise方式异步获取资源ID,入参uri通过获取文件fd生成以"fd://"开头的文件描述字符串。
153该方法不支持加载rawfile目录资源,需要通过[load(fd: number, offset: number, length: number, callback: AsyncCallback\<number>): void](#load-2)或者[load(fd: number, offset: number, length: number): Promise\<number>](#load-3)实现。
154
155>**说明:**
156>
157>将资源句柄(fd)或加载路径描述(uri)传递给音频池播放器之后,请不要通过该资源句柄或加载路径描述做其他读写操作,包括但不限于将同一个资源句柄或加载路径描述传递给多个音频池播放器。
158>同一时间通过同一个资源句柄或加载路径描述读写文件时存在竞争关系,将导致播放异常。
159
160**系统能力:** SystemCapability.Multimedia.Media.SoundPool
161
162**参数:**
163
164| 参数名 | 类型                                   | 必填 | 说明                       |
165| ------ | -------------------------------------- | ---- | -------------------------- |
166| uri | string | 是   | 音频文件的加载路径描述,一般以"fd://"开头的文件描述。 |
167
168**返回值:**
169
170| 类型           | 说明                                       |
171| -------------- | ------------------------------------------ |
172| Promise\<number> | 以Promise方式异步加载音频池资源,返回资源的id,有效值大于0。 |
173
174**错误码:**
175
176以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
177
178| 错误码ID | 错误信息                                |
179| -------- | --------------------------------------- |
180| 5400102  | Operation not allowed. Return by promise.|
181| 5400103  | I/O error. Return by promise. |
182| 5400105  | Service died. Return by promise. |
183
184**示例:**
185
186```ts
187import { fileIo } from '@kit.CoreFileKit';
188import { BusinessError } from '@kit.BasicServicesKit';
189import { media } from '@kit.MediaKit';
190import { audio } from '@kit.AudioKit';
191
192// 创建soundPool实例。
193let soundPool: media.SoundPool;
194let audioRendererInfo: audio.AudioRendererInfo = {
195  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
196  rendererFlags: 1
197}
198media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
199  if (error) {
200    console.error(`Failed to createSoundPool`);
201    return;
202  } else {
203    soundPool = soundPool_;
204    console.info(`Succeeded in createSoundPool`);
205    let uri:string = "";
206    let soundID: number = 0;
207    let file: fileIo.File;
208    // 获取fd的uri路径。
209    fileIo.open('/test_01.mp3', fileIo.OpenMode.READ_ONLY).then((file_: fileIo.File) => {
210      file = file_;
211      console.info("file fd: " + file.fd);
212      uri = 'fd://' + (file.fd).toString();
213      soundPool.load(uri).then((soundId: number) => {
214        console.info('Succeeded in loading uri');
215        soundID = soundId;
216      }, (err: BusinessError) => {
217        console.error('Failed to load soundPool and catch error is ' + err.message);
218      });
219    }); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。
220  }
221});
222
223```
224
225### load
226
227load(fd: number, offset: number, length: number, callback: AsyncCallback\<number>): void
228
229加载音频资源。使用callback方式异步获取资源ID,入参可手动传入资源信息或通过读取应用内置资源自动获取。
230
231>**说明:**
232>
233>将资源句柄(fd)或加载路径描述(uri)传递给音频池播放器之后,请不要通过该资源句柄或加载路径描述做其他读写操作,包括但不限于将同一个资源句柄或加载路径描述传递给多个音频池播放器。
234>同一时间通过同一个资源句柄或加载路径描述读写文件时存在竞争关系,将导致播放异常。
235
236**系统能力:** SystemCapability.Multimedia.Media.SoundPool
237
238**参数:**
239
240| 参数名   | 类型                   | 必填 | 说明                        |
241| -------- | ---------------------- | ---- | --------------------------- |
242| fd     | number | 是   | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。     |
243| offset | number | 是   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
244| length | number | 是   | 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
245| callback | AsyncCallback\<number> | 是   | 获取回调的soundID,有效值大于0。 |
246
247**错误码:**
248
249以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
250
251| 错误码ID | 错误信息                                |
252| -------- | --------------------------------------- |
253| 5400102  | Operation not allowed. Return by callback. |
254| 5400103  | I/O error. Return by callback. |
255| 5400105  | Service died. Return by callback.       |
256
257**示例1:**
258
259```ts
260import { fileIo } from '@kit.CoreFileKit';
261import { BusinessError } from '@kit.BasicServicesKit';
262import { media } from '@kit.MediaKit';
263import { audio } from '@kit.AudioKit';
264
265// 创建soundPool实例。
266let soundPool: media.SoundPool;
267let audioRendererInfo: audio.AudioRendererInfo = {
268  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
269  rendererFlags: 1
270}
271media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
272  if (error) {
273    console.error(`Failed to createSoundPool`);
274    return;
275  } else {
276    soundPool = soundPool_;
277    console.info(`Succeeded in createSoundPool`);
278    let file: fileIo.File;
279    let soundID: number = 0;
280    let fileSize: number = 1; // 通过fileIo.stat()获取size值。
281    let uri: string = "";
282    // 获取fd的描述信息,test_01.mp3不是rawfile目录资源下面的音频。
283    fileIo.open('/test_01.mp3', fileIo.OpenMode.READ_ONLY).then((file_: fileIo.File) => {
284      file = file_;
285      console.info("file fd: " + file.fd);
286      uri = 'fd://' + (file.fd).toString();
287      soundPool.load(file.fd, 0, fileSize, (error: BusinessError, soundId_: number) => {
288        if (error) {
289          console.error(`Failed to load soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
290        } else {
291          soundID = soundId_;
292          console.info('Succeeded in loading soundId:' + soundId_);
293        }
294      });
295    }); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。
296  }
297});
298
299```
300
301**示例2:**
302
303```ts
304import { media } from '@kit.MediaKit';
305import { audio } from '@kit.AudioKit';
306import { BusinessError } from '@kit.BasicServicesKit';
307
308function create(context: Context) {
309  // 创建soundPool实例。
310  let soundPool: media.SoundPool;
311  let audioRendererInfo: audio.AudioRendererInfo = {
312    usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
313    rendererFlags: 1
314  }
315  let soundID: number = 0;
316  media.createSoundPool(5, audioRendererInfo, async (error: BusinessError, soundPool_: media.SoundPool) => {
317    if (error) {
318      console.error(`Failed to createSoundPool`);
319      return;
320    } else {
321      soundPool = soundPool_;
322      console.info(`Succeeded in createSoundPool`);
323      // test_01.mp3为rawfile目录资源下面的音频。
324      let fileDescriptor = await context.resourceManager.getRawFd('test_01.mp3');
325      soundPool.load(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length, (error: BusinessError, soundId_: number) => {
326        if (error) {
327          console.error(`Failed to load soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
328        } else {
329          soundID = soundId_;
330          console.info('Succeeded in loading soundId:' + soundId_);
331        }
332      });
333    }
334  });
335}
336
337```
338
339### load
340
341load(fd: number, offset: number, length: number): Promise\<number>
342
343加载音频资源。使用Promise方式异步获取资源ID,入参可手动传入资源信息或通过读取应用内置资源自动获取。
344
345>**说明:**
346>
347>将资源句柄(fd)或加载路径描述(uri)传递给音频池播放器之后,请不要通过该资源句柄或加载路径描述做其他读写操作,包括但不限于将同一个资源句柄或加载路径描述传递给多个音频池播放器。
348>同一时间通过同一个资源句柄或加载路径描述读写文件时存在竞争关系,将导致播放异常。
349
350**系统能力:** SystemCapability.Multimedia.Media.SoundPool
351
352**参数:**
353
354| 参数名   | 类型                   | 必填 | 说明                        |
355| -------- | ---------------------- | ---- | --------------------------- |
356| fd     | number | 是   | 资源句柄,通过[resourceManager.getRawFd](../apis-localization-kit/js-apis-resource-manager.md#getrawfd9)获取。     |
357| offset | number | 是   | 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
358| length | number | 是   | 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 |
359
360**返回值:**
361
362| 类型             | 说明                             |
363| ---------------- | -------------------------------- |
364| Promise\<number> | 以Promise方式获取返回的soundID,有效值大于0。 |
365
366**错误码:**
367
368以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
369
370| 错误码ID | 错误信息                                |
371| -------- | --------------------------------------- |
372| 5400102  | Operation not allowed. Return by promise.|
373| 5400103  | I/O error. Return by promise. |
374| 5400105  | Service died. Return by promise. |
375
376**示例1:**
377
378```ts
379import { fileIo } from '@kit.CoreFileKit';
380import { BusinessError } from '@kit.BasicServicesKit';
381import { media } from '@kit.MediaKit';
382import { audio } from '@kit.AudioKit';
383
384// 创建soundPool实例。
385let soundPool: media.SoundPool;
386let audioRendererInfo: audio.AudioRendererInfo = {
387  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
388  rendererFlags: 1
389}
390media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
391  if (error) {
392    console.error(`Failed to createSoundPool`);
393    return;
394  } else {
395    soundPool = soundPool_;
396    console.info(`Succeeded in createSoundPool`);
397    let file: fileIo.File;
398    let soundID: number = 0;
399    let fileSize: number = 1; // 通过fileIo.stat()获取size值。
400    let uri: string = "";
401    // 获取fd的描述信息,test_01.mp3不是rawfile目录资源下面的音频。
402    fileIo.open('/test_01.mp3', fileIo.OpenMode.READ_ONLY).then((file_: fileIo.File) => {
403      file = file_;
404      console.info("file fd: " + file.fd);
405      uri = 'fd://' + (file.fd).toString();
406      soundPool.load(file.fd, 0, fileSize).then((soundId: number) => {
407        console.info('Succeeded in loading soundpool');
408        soundID = soundId;
409      }, (err: BusinessError) => {
410        console.error('Failed to load soundpool and catch error is ' + err.message);
411      });
412    });
413  }
414});
415
416```
417
418**示例2:**
419
420```ts
421import { media } from '@kit.MediaKit';
422import { audio } from '@kit.AudioKit';
423import { BusinessError } from '@kit.BasicServicesKit';
424
425function create(context: Context) {
426  // 创建soundPool实例。
427  let soundPool: media.SoundPool;
428  let audioRendererInfo: audio.AudioRendererInfo = {
429    usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
430    rendererFlags: 1
431  }
432  let soundID: number = 0;
433  media.createSoundPool(5, audioRendererInfo, async (error: BusinessError, soundPool_: media.SoundPool) => {
434    if (error) {
435      console.error(`Failed to createSoundPool`);
436      return;
437    } else {
438      soundPool = soundPool_;
439      console.info(`Succeeded in createSoundPool`);
440      // test_01.mp3为rawfile目录资源下面的音频。
441      let fileDescriptor = await context.resourceManager.getRawFd('test_01.mp3');
442      soundPool.load(fileDescriptor.fd, fileDescriptor.offset, fileDescriptor.length).then((soundId: number) => {
443        console.info('Succeeded in loading soundpool');
444        soundID = soundId;
445      }, (err: BusinessError) => {
446        console.error('Failed to load soundpool and catch error is ' + err.message);
447      });
448    }
449  });
450}
451
452```
453
454### play
455
456play(soundID: number, params: PlayParameters, callback: AsyncCallback\<number>): void
457
458播放音频资源。使用callback方式异步获取音频流streamID。
459
460**系统能力:** SystemCapability.Multimedia.Media.SoundPool
461
462**参数:**
463
464| 参数名   | 类型                   | 必填 | 说明                        |
465| -------- | ---------------------- | ---- | --------------------------- |
466| soundID | number | 是   | 资源ID,通过load方法获取。 |
467| params | [PlayParameters](#playparameters) | 是  | play播放相关参数的设置。 |
468| callback | AsyncCallback\<number> | 是   | 获取回调的音频流ID,有效值大于0。 |
469
470**错误码:**
471
472以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
473
474| 错误码ID | 错误信息                                |
475| -------- | --------------------------------------- |
476| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
477| 5400102  | Operation not allowed. Return by callback. |
478| 5400105  | Service died. Return by callback.       |
479
480**示例:**
481
482```js
483import { BusinessError } from '@kit.BasicServicesKit';
484import { media } from '@kit.MediaKit';
485import { audio } from '@kit.AudioKit';
486
487// 创建soundPool实例。
488let soundPool: media.SoundPool;
489let audioRendererInfo: audio.AudioRendererInfo = {
490  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
491  rendererFlags: 1
492}
493media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
494  if (error) {
495    console.error(`Failed to createSoundPool`);
496    return;
497  } else {
498    soundPool = soundPool_;
499    console.info(`Succeeded in createSoundPool`);
500    let soundID: number = 0;
501    let streamID: number = 0;
502    let playParameters: media.PlayParameters = {
503      loop: 3, // 循环3次。
504      rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速。
505      leftVolume: 0.5, // range = 0.0-1.0
506      rightVolume: 0.5, // range = 0.0-1.0
507      priority: 0, // 最低优先级。
508    }
509    soundPool.play(soundID, playParameters, (error: BusinessError, streamId: number) => {
510      if (error) {
511        console.error(`Failed to play soundpool: errCode is ${error.code}, errMessage is ${error.message}`);
512      } else {
513        streamID = streamId;
514        console.info('Succeeded in playing soundpool, streamId:' + streamId);
515      }
516    });
517  }
518});
519
520```
521
522### play
523
524play(soundID: number, callback: AsyncCallback\<number>): void
525
526使用默认参数播放音频资源。使用callback方式异步获取音频流streamID。
527
528**系统能力:** SystemCapability.Multimedia.Media.SoundPool
529
530**参数:**
531
532| 参数名   | 类型                   | 必填 | 说明                        |
533| -------- | ---------------------- | ---- | --------------------------- |
534| soundID | number | 是   | 资源ID,通过load方法获取。 |
535| callback | AsyncCallback\<number> | 是   | 获取回调的音频流ID,有效值大于0。 |
536
537**错误码:**
538
539以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
540
541| 错误码ID | 错误信息                                |
542| -------- | --------------------------------------- |
543| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
544| 5400102  | Operation not allowed. Return by callback. |
545| 5400105  | Service died. Return by callback.       |
546
547**示例:**
548
549```js
550import { BusinessError } from '@kit.BasicServicesKit';
551import { media } from '@kit.MediaKit';
552import { audio } from '@kit.AudioKit';
553
554// 创建soundPool实例。
555let soundPool: media.SoundPool;
556let audioRendererInfo: audio.AudioRendererInfo = {
557  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
558  rendererFlags: 1
559}
560media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
561  if (error) {
562    console.error(`Failed to createSoundPool`);
563    return;
564  } else {
565    soundPool = soundPool_;
566    console.info(`Succeeded in createSoundPool`);
567    let soundID: number = 0;
568    let streamID: number = 0;
569    soundPool.play(soundID,  (error: BusinessError, streamId: number) => {
570      if (error) {
571        console.error(`Failed to play soundpool: errCode is ${error.code}, errMessage is ${error.message}`);
572      } else {
573        streamID = streamId;
574        console.info('Succeeded in playing soundpool, streamId:' + streamId);
575      }
576    });
577  }
578});
579
580```
581
582### play
583
584play(soundID: number, params?: PlayParameters): Promise\<number>
585
586播放音频资源。使用Promise方式异步获取音频流streamID。
587
588**系统能力:** SystemCapability.Multimedia.Media.SoundPool
589
590**参数:**
591
592| 参数名   | 类型                   | 必填 | 说明                        |
593| -------- | ---------------------- | ---- | --------------------------- |
594| soundID | number | 是   | 资源ID,通过load方法获取。 |
595| params | [PlayParameters](#playparameters) | 否  | play播放相关参数的设置。 |
596
597**返回值:**
598
599| 类型             | 说明                             |
600| ---------------- | -------------------------------- |
601| Promise\<number> | 以Promise方式获取返回的音频流ID,有效值大于0。 |
602
603**错误码:**
604
605以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
606
607| 错误码ID | 错误信息                                |
608| -------- | --------------------------------------- |
609| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by promise. |
610| 5400102  | Operation not allowed. Return by promise. |
611| 5400105  | Service died. Return by promise.       |
612
613**示例:**
614
615```js
616import { BusinessError } from '@kit.BasicServicesKit';
617import { media } from '@kit.MediaKit';
618import { audio } from '@kit.AudioKit';
619
620// 创建soundPool实例。
621let soundPool: media.SoundPool;
622let audioRendererInfo: audio.AudioRendererInfo = {
623  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
624  rendererFlags: 1
625}
626media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
627  if (error) {
628    console.error(`Failed to createSoundPool`);
629    return;
630  } else {
631    soundPool = soundPool_;
632    console.info(`Succeeded in createSoundPool`);
633    let soundID: number = 0;
634    let streamID: number = 0;
635    let playParameters: media.PlayParameters = {
636      loop: 3, // 循环4次。
637      rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速。
638      leftVolume: 0.5, // range = 0.0-1.0。
639      rightVolume: 0.5, // range = 0.0-1.0。
640      priority: 0, // 最低优先级。
641    }
642
643    soundPool.play(soundID, playParameters).then((streamId: number) => {
644      console.info('Succeeded in playing soundpool');
645      streamID = streamId;
646    },(err: BusinessError) => {
647      console.error('Failed to play soundpool and catch error is ' + err.message);
648    });
649  }
650});
651
652```
653
654### stop
655
656stop(streamID: number, callback: AsyncCallback\<void>): void
657
658停止播放音频资源。使用callback方式异步获取返回值。
659
660**系统能力:** SystemCapability.Multimedia.Media.SoundPool
661
662**参数:**
663
664| 参数名   | 类型                   | 必填 | 说明                        |
665| -------- | ---------------------- | ---- | --------------------------- |
666| streamID | number | 是   | 音频流ID,通过play方法获取。 |
667| callback | AsyncCallback\<void> | 是   | 异步音频池stop的回调方法。 |
668
669**错误码:**
670
671以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
672
673| 错误码ID | 错误信息                                |
674| -------- | --------------------------------------- |
675| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
676| 5400102  | Operation not allowed. Return by callback. |
677| 5400105  | Service died. Return by callback.       |
678
679**示例:**
680
681```js
682import { BusinessError } from '@kit.BasicServicesKit';
683import { media } from '@kit.MediaKit';
684import { audio } from '@kit.AudioKit';
685
686// 创建soundPool实例。
687let soundPool: media.SoundPool;
688let audioRendererInfo: audio.AudioRendererInfo = {
689  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
690  rendererFlags: 1
691}
692media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
693  if (error) {
694    console.error(`Failed to createSoundPool`);
695    return;
696  } else {
697    soundPool = soundPool_;
698    console.info(`Succeeded in createSoundPool`);
699    let streamID: number = 0;
700    // 先调用play方法给拿到对应的streamID。
701    soundPool.stop(streamID, (error: BusinessError) => {
702      if (error) {
703        console.error(`Failed to stop soundpool: errCode is ${error.code}, errMessage is ${error.message}`);
704      } else {
705        console.info('Succeeded in stopping soundpool');
706      }
707    })
708  }
709});
710
711```
712
713### stop
714
715stop(streamID: number): Promise\<void>
716
717停止streamID对应的音频播放。使用Promise方式异步获取返回值。
718
719**系统能力:** SystemCapability.Multimedia.Media.SoundPool
720
721**参数:**
722
723| 参数名   | 类型                   | 必填 | 说明                        |
724| -------- | ---------------------- | ---- | --------------------------- |
725| streamID | number | 是   | 音频流ID,通过play方法获取。 |
726
727**返回值:**
728
729| 类型             | 说明                             |
730| ---------------- | -------------------------------- |
731| Promise\<void> | 以Promise方式返回,无返回值。 |
732
733**错误码:**
734
735以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
736
737| 错误码ID | 错误信息                                |
738| -------- | --------------------------------------- |
739| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by promise. |
740| 5400102  | Operation not allowed. Return by promise. |
741| 5400105  | Service died. Return by promise.       |
742
743**示例:**
744
745```js
746import { BusinessError } from '@kit.BasicServicesKit';
747import { media } from '@kit.MediaKit';
748import { audio } from '@kit.AudioKit';
749
750// 创建soundPool实例。
751let soundPool: media.SoundPool;
752let audioRendererInfo: audio.AudioRendererInfo = {
753  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
754  rendererFlags: 1
755}
756media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
757  if (error) {
758    console.error(`Failed to createSoundPool`);
759    return;
760  } else {
761    soundPool = soundPool_;
762    console.info(`Succeeded in createSoundPool`);
763    let streamID: number = 0;
764    // 先调用play方法给拿到对应的streamID。
765    soundPool.stop(streamID).then(() => {
766      console.info('Succeeded in stopping soundpool');
767    }, (err: BusinessError) => {
768      console.error('Failed to stop soundpool and catch error is ' + err.message);
769    });
770  }
771});
772```
773
774### setLoop
775
776setLoop(streamID: number, loop: number, callback: AsyncCallback\<void>): void;
777
778设置循环模式。使用callback方式异步获取返回值。
779
780**系统能力:** SystemCapability.Multimedia.Media.SoundPool
781
782**参数:**
783
784| 参数名   | 类型                   | 必填 | 说明                        |
785| -------- | ---------------------- | ---- | --------------------------- |
786| streamID | number | 是   | 音频流ID,通过play方法获取。 |
787| loop | number | 是   | 设置循环次数。<br>当loop≥0时,实际播放次数为loop+1。<br> 当loop<0时,表示一直循环。 |
788| callback | AsyncCallback\<void> | 是   | 异步setLoop的回调方法。 |
789
790**错误码:**
791
792以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
793
794| 错误码ID | 错误信息                                |
795| -------- | --------------------------------------- |
796| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
797| 5400102  | Operation not allowed. Return by callback. |
798| 5400105  | Service died. Return by callback.       |
799
800**示例:**
801
802```js
803import { BusinessError } from '@kit.BasicServicesKit';
804import { media } from '@kit.MediaKit';
805import { audio } from '@kit.AudioKit';
806
807// 创建soundPool实例。
808let soundPool: media.SoundPool;
809let audioRendererInfo: audio.AudioRendererInfo = {
810  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
811  rendererFlags: 1
812}
813media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
814  if (error) {
815    console.error(`Failed to createSoundPool`);
816    return;
817  } else {
818    soundPool = soundPool_;
819    console.info(`Succeeded in createSoundPool`);
820    let streamID: number = 0;
821    // 先通过调用play方法获取到对应的streamID。
822    // 设置循环2次。
823    soundPool.setLoop(streamID, 2, (error: BusinessError) => {
824      if (error) {
825        console.error(`Failed to setLoop soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
826      } else {
827        console.info('Succeeded in setLoopping soundpool, streamID:' + streamID);
828      }
829    });
830  }
831});
832
833```
834
835### setLoop
836
837setLoop(streamID: number, loop: number): Promise\<void>
838
839设置循环模式。使用Promise方式异步获取返回值。
840
841**系统能力:** SystemCapability.Multimedia.Media.SoundPool
842
843**参数:**
844
845| 参数名   | 类型                   | 必填 | 说明                        |
846| -------- | ---------------------- | ---- | --------------------------- |
847| streamID | number | 是   | 音频流ID,通过play方法获取。 |
848| loop | number | 是   | 设置循环次数。<br>当loop≥0时,实际播放次数为loop+1。<br> 当loop<0时,表示一直循环。|
849
850**返回值:**
851
852| 类型             | 说明                             |
853| ---------------- | -------------------------------- |
854| Promise\<void> | 异步音频池setLoop方法的Promise返回值。 |
855
856**错误码:**
857
858以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
859
860| 错误码ID | 错误信息                                |
861| -------- | --------------------------------------- |
862| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by promise. |
863| 5400102  | Operation not allowed. Return by promise. |
864| 5400105  | Service died. Return by promise.       |
865
866**示例:**
867
868```js
869import { BusinessError } from '@kit.BasicServicesKit';
870import { media } from '@kit.MediaKit';
871import { audio } from '@kit.AudioKit';
872
873// 创建soundPool实例。
874let soundPool: media.SoundPool;
875let audioRendererInfo: audio.AudioRendererInfo = {
876  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
877  rendererFlags: 1
878}
879media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
880  if (error) {
881    console.error(`Failed to createSoundPool`);
882    return;
883  } else {
884    soundPool = soundPool_;
885    console.info(`Succeeded in createSoundPool`);
886    let streamID: number = 0;
887    // 先通过调用play方法获取到对应的streamID。
888    // 设置循环1次。
889    soundPool.setLoop(streamID, 1).then(() => {
890      console.info('Succeeded in setLoopping soundpool, streamID:' + streamID);
891    }).catch((err: BusinessError) => {
892      console.error('Failed to setLoop soundPool and catch error is ' + err.message);
893    });
894  }
895});
896
897```
898
899### setPriority
900
901setPriority(streamID: number, priority: number, callback: AsyncCallback\<void>): void
902
903设置音频流播放的优先级。使用callback方式异步获取返回值。
904
905**系统能力:** SystemCapability.Multimedia.Media.SoundPool
906
907**参数:**
908
909| 参数名   | 类型                   | 必填 | 说明                        |
910| -------- | ---------------------- | ---- | --------------------------- |
911| streamID | number | 是   | 音频流ID,通过play方法获取。 |
912| priority | number | 是   | 优先级,0表示最低优先级。设置范围为大于等于0的整数。 |
913| callback | AsyncCallback\<void> | 是   | 异步音频池setPriority方法的回调方法。 |
914
915**错误码:**
916
917以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
918
919| 错误码ID | 错误信息                                |
920| -------- | --------------------------------------- |
921| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
922| 5400102  | Operation not allowed. Return by callback. |
923| 5400105  | Service died. Return by callback.       |
924
925**示例:**
926
927```js
928import { BusinessError } from '@kit.BasicServicesKit';
929import { media } from '@kit.MediaKit';
930import { audio } from '@kit.AudioKit';
931
932// 创建soundPool实例。
933let soundPool: media.SoundPool;
934let audioRendererInfo: audio.AudioRendererInfo = {
935  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
936  rendererFlags: 1
937}
938media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
939  if (error) {
940    console.error(`Failed to createSoundPool`);
941    return;
942  } else {
943    soundPool = soundPool_;
944    console.info(`Succeeded in createSoundPool`);
945    let streamID: number = 0;
946    // 先调用play方法获取到对应资源的streamID。
947    // 给对应的streamID资源设置优先级为1。
948    soundPool.setPriority(streamID, 1, (error: BusinessError) => {
949      if (error) {
950        console.error(`Failed to setPriority soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
951      } else {
952        console.info('Succeeded in setPriority soundpool, streamID:' + streamID);
953      }
954    });
955  }
956});
957
958```
959
960### setPriority
961
962setPriority(streamID: number, priority: number): Promise\<void>
963
964设置音频流优先级。使用Promise方式异步获取返回值。
965
966**系统能力:** SystemCapability.Multimedia.Media.SoundPool
967
968**参数:**
969
970| 参数名   | 类型                   | 必填 | 说明                        |
971| -------- | ---------------------- | ---- | --------------------------- |
972| streamID | number | 是   | 音频流ID,通过play方法获取。 |
973| priority | number | 是   | 优先级,0表示最低优先级。设置范围为大于等于0的整数。 |
974
975**返回值:**
976
977| 类型             | 说明                             |
978| ---------------- | -------------------------------- |
979| Promise\<void> | 异步音频池setPriority的Promise返回值。 |
980
981**错误码:**
982
983以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
984
985| 错误码ID | 错误信息                                |
986| -------- | --------------------------------------- |
987| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by promise. |
988| 5400102  | Operation not allowed. Return by promise. |
989| 5400105  | Service died. Return by promise.       |
990
991**示例:**
992
993```js
994import { BusinessError } from '@kit.BasicServicesKit';
995import { media } from '@kit.MediaKit';
996import { audio } from '@kit.AudioKit';
997
998// 创建soundPool实例。
999let soundPool: media.SoundPool;
1000let audioRendererInfo: audio.AudioRendererInfo = {
1001  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1002  rendererFlags: 1
1003}
1004media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1005  if (error) {
1006    console.error(`Failed to createSoundPool`);
1007    return;
1008  } else {
1009    soundPool = soundPool_;
1010    console.info(`Succeeded in createSoundPool`);
1011    let streamID: number = 0;
1012    // 先调用play方法获取到对应资源的streamID。
1013    // 给对应的streamID资源设置优先级为1。
1014
1015    soundPool.setPriority(streamID, 1).then(() => {
1016      console.info('Succeeded in setPriority soundpool');
1017    }, (err: BusinessError) => {
1018      console.error('Failed to setPriority soundPool and catch error is ' + err.message);
1019    });
1020  }
1021});
1022
1023```
1024
1025### setRate
1026
1027setRate(streamID: number, rate: audio.AudioRendererRate, callback: AsyncCallback\<void>): void
1028
1029设置音频流播放速率。使用callback方式异步获取返回值。
1030
1031**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1032
1033**参数:**
1034
1035| 参数名   | 类型                   | 必填 | 说明                        |
1036| -------- | ---------------------- | ---- | --------------------------- |
1037| streamID | number | 是   | 音频流ID,通过play方法获取。 |
1038| rate | [audio.AudioRendererRate](../apis-audio-kit/arkts-apis-audio-e.md#audiorendererrate8) | 是   | 音频rate相关参数。 |
1039| callback | AsyncCallback\<void> | 是   | 异步音频池setRate方法的回调方法。 |
1040
1041**错误码:**
1042
1043以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1044
1045| 错误码ID | 错误信息                                |
1046| -------- | --------------------------------------- |
1047| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
1048| 5400102  | Operation not allowed. Return by callback. |
1049| 5400105  | Service died. Return by callback.       |
1050
1051**示例:**
1052
1053```js
1054import { BusinessError } from '@kit.BasicServicesKit';
1055import { media } from '@kit.MediaKit';
1056import { audio } from '@kit.AudioKit';
1057
1058// 创建soundPool实例。
1059let soundPool: media.SoundPool;
1060let audioRendererInfo: audio.AudioRendererInfo = {
1061  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1062  rendererFlags: 1
1063}
1064media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1065  if (error) {
1066    console.error(`Failed to createSoundPool`);
1067    return;
1068  } else {
1069    soundPool = soundPool_;
1070    console.info(`Succeeded in createSoundPool`);
1071    let streamID: number = 0;
1072    let selectedAudioRendererRate: audio.AudioRendererRate = audio.AudioRendererRate.RENDER_RATE_NORMAL; // 默认正常速率
1073    // 先调用play方法获取到对应资源的streamID。
1074    soundPool.setRate(streamID, selectedAudioRendererRate, (error: BusinessError) => {
1075      if (error) {
1076        console.error(`Failed to setRate soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
1077      } else {
1078        console.info('Succeeded in setRate success, streamID:' + streamID);
1079      }
1080    })
1081  }
1082});
1083
1084```
1085
1086### setRate
1087
1088setRate(streamID: number, rate: audio.AudioRendererRate): Promise\<void>
1089
1090设置音频流的播放速率。使用Promise方式异步获取返回值。
1091
1092**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1093
1094**参数:**
1095
1096| 参数名   | 类型                   | 必填 | 说明                        |
1097| -------- | ---------------------- | ---- | --------------------------- |
1098| streamID | number | 是   | 音频流ID,通过play方法获取。 |
1099| rate | [audio.AudioRendererRate](../apis-audio-kit/arkts-apis-audio-e.md#audiorendererrate8) | 是   | 音频rate相关参数。 |
1100
1101**返回值:**
1102
1103| 类型             | 说明                             |
1104| ---------------- | -------------------------------- |
1105| Promise\<void> | 异步音频池setRate方法的Promise返回值。 |
1106
1107**错误码:**
1108
1109以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1110
1111| 错误码ID | 错误信息                                |
1112| -------- | --------------------------------------- |
1113| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by promise. |
1114| 5400102  | Operation not allowed. Return by promise. |
1115| 5400105  | Service died. Return by promise.       |
1116
1117**示例:**
1118
1119```js
1120import { BusinessError } from '@kit.BasicServicesKit';
1121import { media } from '@kit.MediaKit';
1122import { audio } from '@kit.AudioKit';
1123
1124// 创建soundPool实例。
1125let soundPool: media.SoundPool;
1126let audioRendererInfo: audio.AudioRendererInfo = {
1127  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1128  rendererFlags: 1
1129}
1130media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1131  if (error) {
1132    console.error(`Failed to createSoundPool`);
1133    return;
1134  } else {
1135    soundPool = soundPool_;
1136    console.info(`Succeeded in createSoundPool`);
1137    let streamID: number = 0;
1138    let selectedAudioRendererRate: audio.AudioRendererRate = audio.AudioRendererRate.RENDER_RATE_NORMAL; // 默认正常速率
1139    // 先调用play方法获取到对应资源的streamID。
1140    soundPool.setRate(streamID, selectedAudioRendererRate).then(() => {
1141      console.info('Succeeded in setRate soundpool');
1142    }, (err: BusinessError) => {
1143      console.error('Failed to setRate soundpool and catch error is ' + err.message);
1144    });
1145  }
1146});
1147
1148```
1149
1150### setVolume
1151
1152setVolume(streamID: number, leftVolume: number, rightVolume: number, callback: AsyncCallback\<void>): void
1153
1154设置音频流播放音量。使用callback方式异步获取返回值。
1155
1156**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1157
1158**参数:**
1159
1160| 参数名   | 类型                   | 必填 | 说明                        |
1161| -------- | ---------------------- | ---- | --------------------------- |
1162| streamID | number | 是   | 音频流ID,通过play方法获取。 |
1163| leftVolume | number | 是   | 左声道音量,设置范围为0.0-1.0之间。 |
1164| rightVolume | number | 是   | 右声道音量,设置范围为0.0-1.0之间,当前右声道设置无效,以左声道为准。 |
1165| callback | AsyncCallback\<void> | 是   | 异步音频池setVolume方法的回调方法。 |
1166
1167**错误码:**
1168
1169以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1170
1171| 错误码ID | 错误信息                                |
1172| -------- | --------------------------------------- |
1173| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by callback. |
1174| 5400102  | Operation not allowed. Return by callback. |
1175| 5400105  | Service died. Return by callback.       |
1176
1177**示例:**
1178
1179```js
1180import { BusinessError } from '@kit.BasicServicesKit';
1181import { media } from '@kit.MediaKit';
1182import { audio } from '@kit.AudioKit';
1183
1184// 创建soundPool实例。
1185let soundPool: media.SoundPool;
1186let audioRendererInfo: audio.AudioRendererInfo = {
1187  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1188  rendererFlags: 1
1189}
1190media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1191  if (error) {
1192    console.error(`Failed to createSoundPool`);
1193    return;
1194  } else {
1195    soundPool = soundPool_;
1196    console.info(`Succeeded in createSoundPool`);
1197    let streamID: number = 0;
1198    // 先调用play方法获取到对应资源的streamID。
1199    // 设置音量为0.5。
1200    soundPool.setVolume(streamID, 0.5, 0.5, (error: BusinessError) => {
1201      if (error) {
1202        console.error(`Failed to setVolume soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
1203      } else {
1204        console.info('Succeeded in setVolume soundpool, streamID:' + streamID);
1205      }
1206    })
1207  }
1208});
1209
1210```
1211
1212### setVolume
1213
1214setVolume(streamID: number, leftVolume: number, rightVolume: number): Promise\<void>
1215
1216设置音频流的播放音量。使用Promise方式异步获取返回值。
1217
1218**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1219
1220**参数:**
1221
1222| 参数名   | 类型                   | 必填 | 说明                        |
1223| -------- | ---------------------- | ---- | --------------------------- |
1224| streamID | number | 是   | 音频流ID,通过play方法获取。 |
1225| leftVolume | number | 是   | 左声道音量,设置范围为0.0-1.0之间。 |
1226| rightVolume | number | 是   | 右声道音量,设置范围为0.0-1.0之间,当前右声道设置无效,以左声道为准。 |
1227
1228**返回值:**
1229
1230| 类型             | 说明                             |
1231| ---------------- | -------------------------------- |
1232| Promise\<void> | 异步音频池setVolume方法的Promise返回值。 |
1233
1234**错误码:**
1235
1236以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1237
1238| 错误码ID | 错误信息                                |
1239| -------- | --------------------------------------- |
1240| 401  | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified. 2.Incorrect parameter types. 3.Parameter verification failed.  Return by promise. |
1241| 5400102  | Operation not allowed. Return by promise. |
1242| 5400105  | Service died. Return by promise.       |
1243
1244**示例:**
1245
1246```js
1247import { BusinessError } from '@kit.BasicServicesKit';
1248import { media } from '@kit.MediaKit';
1249import { audio } from '@kit.AudioKit';
1250
1251// 创建soundPool实例。
1252let soundPool: media.SoundPool;
1253let audioRendererInfo: audio.AudioRendererInfo = {
1254  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1255  rendererFlags: 1
1256}
1257media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1258  if (error) {
1259    console.error(`Failed to createSoundPool`);
1260    return;
1261  } else {
1262    soundPool = soundPool_;
1263    console.info(`Succeeded in createSoundPool`);
1264    let streamID: number = 0;
1265    // 先调用play方法获取到对应资源的streamID。
1266
1267    soundPool.setVolume(streamID, 0.5, 0.5).then(() => {
1268      console.info('Succeeded in setVolume soundpool');
1269    }, (err: BusinessError) => {
1270      console.error('Failed to setVolume soundPool and catch error is ' + err.message);
1271    });
1272  }
1273});
1274
1275```
1276
1277### unload
1278
1279unload(soundID: number, callback: AsyncCallback\<void>): void
1280
1281卸载音频资源。使用callback方式异步获取返回值。
1282
1283**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1284
1285**参数:**
1286
1287| 参数名   | 类型                   | 必填 | 说明                        |
1288| -------- | ---------------------- | ---- | --------------------------- |
1289| soundID | number | 是   | 资源ID,通过load方法获取。 |
1290| callback | AsyncCallback\<void> | 是   | 异步音频池unload方法的回调方法。 |
1291
1292**错误码:**
1293
1294以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1295
1296| 错误码ID | 错误信息                                |
1297| -------- | --------------------------------------- |
1298| 5400102  | Operation not allowed. Return by callback. |
1299| 5400103  | I/O error. Return by callback. |
1300| 5400105  | Service died. Return by callback.       |
1301
1302**示例:**
1303
1304```js
1305import { BusinessError } from '@kit.BasicServicesKit';
1306import { media } from '@kit.MediaKit';
1307import { audio } from '@kit.AudioKit';
1308
1309// 创建soundPool实例。
1310let soundPool: media.SoundPool;
1311let audioRendererInfo: audio.AudioRendererInfo = {
1312  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1313  rendererFlags: 1
1314}
1315media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1316  if (error) {
1317    console.error(`Failed to createSoundPool`);
1318    return;
1319  } else {
1320    soundPool = soundPool_;
1321    console.info(`Succeeded in createSoundPool`);
1322    let soundID: number = 0;
1323    // 先调用load方法获取到对应资源的soundID。
1324    soundPool.unload(soundID, (error: BusinessError) => {
1325      if (error) {
1326        console.error(`Failed to unload soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
1327      } else {
1328        console.info('Succceeded in unload soundPool');
1329      }
1330    })
1331  }
1332});
1333
1334```
1335
1336### unload
1337
1338unload(soundID: number): Promise\<void>
1339
1340卸载音频资源。使用Promise方式异步获取返回值。
1341
1342**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1343
1344**参数:**
1345
1346| 参数名   | 类型                   | 必填 | 说明                        |
1347| -------- | ---------------------- | ---- | --------------------------- |
1348| soundID | number | 是   | 资源ID,通过load方法获取。 |
1349
1350**返回值:**
1351
1352| 类型             | 说明                             |
1353| ---------------- | -------------------------------- |
1354| Promise\<void> | 异步音频池unload方法的Promise返回值。 |
1355
1356**错误码:**
1357
1358以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1359
1360| 错误码ID | 错误信息                                |
1361| -------- | --------------------------------------- |
1362| 5400102  | Operation not allowed. Return by promise. |
1363| 5400103  | I/O error. Return by promise. |
1364| 5400105  | Service died. Return by promise.       |
1365
1366**示例:**
1367
1368```js
1369import { BusinessError } from '@kit.BasicServicesKit';
1370import { media } from '@kit.MediaKit';
1371import { audio } from '@kit.AudioKit';
1372
1373// 创建soundPool实例。
1374let soundPool: media.SoundPool;
1375let audioRendererInfo: audio.AudioRendererInfo = {
1376  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1377  rendererFlags: 1
1378}
1379media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1380  if (error) {
1381    console.error(`Failed to createSoundPool`);
1382    return;
1383  } else {
1384    soundPool = soundPool_;
1385    console.info(`Succeeded in createSoundPool`);
1386    let soundID: number = 0;
1387    // 先调用load方法获取到对应资源的soundID。
1388
1389    soundPool.unload(soundID).then(() => {
1390      console.info('Succceeded in unload soundPool');
1391    }, (err: BusinessError) => {
1392      console.error('Failed to unload soundPool and catch error is ' + err.message);
1393    });
1394  }
1395});
1396
1397```
1398
1399### release
1400
1401release(callback: AsyncCallback\<void>): void
1402
1403释放音频池实例。使用callback方式异步获取返回值。
1404
1405**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1406
1407**参数:**
1408
1409| 参数名   | 类型                   | 必填 | 说明                        |
1410| -------- | ---------------------- | ---- | --------------------------- |
1411| callback | AsyncCallback\<void> | 是   | 异步音频池release方法的回调方法。 |
1412
1413**错误码:**
1414
1415以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1416
1417| 错误码ID | 错误信息                                |
1418| -------- | --------------------------------------- |
1419| 5400105  | Service died. Return by callback.       |
1420
1421**示例:**
1422
1423```js
1424import { BusinessError } from '@kit.BasicServicesKit';
1425import { media } from '@kit.MediaKit';
1426import { audio } from '@kit.AudioKit';
1427
1428// 创建soundPool实例。
1429let soundPool: media.SoundPool;
1430let audioRendererInfo: audio.AudioRendererInfo = {
1431  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1432  rendererFlags: 1
1433}
1434media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1435  if (error) {
1436    console.error(`Failed to createSoundPool`);
1437    return;
1438  } else {
1439    soundPool = soundPool_;
1440    console.info(`Succeeded in createSoundPool`);
1441    soundPool.release((error: BusinessError) => {
1442      if (error) {
1443        console.error(`Failed to release soundPool: errCode is ${error.code}, errMessage is ${error.message}`);
1444      } else {
1445        console.info('Succeeded in releasing soundPool');
1446      }
1447    })
1448  }
1449});
1450
1451
1452```
1453
1454### release
1455
1456release(): Promise\<void>
1457
1458释放音频池实例。使用Promise方式异步获取返回值。
1459
1460**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1461
1462**返回值:**
1463
1464| 类型             | 说明                             |
1465| ---------------- | -------------------------------- |
1466| Promise\<void> | 异步音频池release方法的Promise返回值。 |
1467
1468**错误码:**
1469
1470以下错误码的详细介绍请参见[媒体错误码](errorcode-media.md)。
1471
1472| 错误码ID | 错误信息                                |
1473| -------- | --------------------------------------- |
1474| 5400105  | Service died. Return by promise.       |
1475
1476**示例:**
1477
1478```js
1479import { BusinessError } from '@kit.BasicServicesKit';
1480import { media } from '@kit.MediaKit';
1481import { audio } from '@kit.AudioKit';
1482
1483// 创建soundPool实例。
1484let soundPool: media.SoundPool;
1485let audioRendererInfo: audio.AudioRendererInfo = {
1486  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1487  rendererFlags: 1
1488}
1489media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1490  if (error) {
1491    console.error(`Failed to createSoundPool`);
1492    return;
1493  } else {
1494    soundPool = soundPool_;
1495    console.info(`Succeeded in createSoundPool`);
1496    soundPool.release().then(() => {
1497      console.info('Succeeded in releasing soundPool');
1498    }, (err: BusinessError) => {
1499      console.error('Failed to release soundPool and catch error is ' + err.message);
1500    });
1501  }
1502});
1503
1504```
1505
1506### on('loadComplete')
1507
1508on(type: 'loadComplete', callback: Callback\<number>): void
1509
1510音频池资源加载完成监听。
1511
1512**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1513
1514**参数:**
1515
1516| 参数名   | 类型     | 必填 | 说明                                                         |
1517| -------- | -------- | ---- | ------------------------------------------------------------ |
1518| type     | string   | 是   | 支持的事件:'loadComplete',对应的ID加载完成会触发此回调。 |
1519| callback | Callback\<number> | 是   | 对应资源加载完成的资源ID。                               |
1520
1521**示例:**
1522
1523```js
1524import { BusinessError } from '@kit.BasicServicesKit';
1525import { media } from '@kit.MediaKit';
1526import { audio } from '@kit.AudioKit';
1527
1528// 创建soundPool实例。
1529let soundPool: media.SoundPool;
1530let audioRendererInfo: audio.AudioRendererInfo = {
1531  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1532  rendererFlags: 1
1533}
1534media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1535  if (error) {
1536    console.error(`Failed to createSoundPool`);
1537    return;
1538  } else {
1539    soundPool = soundPool_;
1540    console.info(`Succeeded in createSoundPool`);
1541    soundPool.on('loadComplete', (soundId: number) => {
1542      console.info('Succeeded in loadComplete, soundId:' + soundId);
1543    })
1544  }
1545});
1546
1547```
1548
1549### off('loadComplete')
1550
1551off(type: 'loadComplete'): void
1552
1553取消监听资源的加载完成。
1554
1555**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1556
1557**参数:**
1558
1559| 参数名 | 类型   | 必填 | 说明                                                         |
1560| ------ | ------ | ---- | ------------------------------------------------------------ |
1561| type   | string | 是   | 取消注册的事件:'loadComplete'。 |
1562
1563**示例:**
1564
1565```js
1566import { BusinessError } from '@kit.BasicServicesKit';
1567import { media } from '@kit.MediaKit';
1568import { audio } from '@kit.AudioKit';
1569
1570// 创建soundPool实例。
1571let soundPool: media.SoundPool;
1572let audioRendererInfo: audio.AudioRendererInfo = {
1573  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1574  rendererFlags: 1
1575}
1576media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1577  if (error) {
1578    console.error(`Failed to createSoundPool`);
1579    return;
1580  } else {
1581    soundPool = soundPool_;
1582    console.info(`Succeeded in createSoundPool`);
1583    soundPool.off('loadComplete');
1584  }
1585});
1586
1587```
1588
1589### on('playFinishedWithStreamId')<sup>18+</sup>
1590
1591on(type: 'playFinishedWithStreamId', callback: Callback\<number>): void
1592
1593音频池资源播放完成监听,同时返回播放结束的音频的streamId。
1594
1595当仅单独注册[on('playFinished')](#onplayfinished)事件回调或者[on('playFinishedWithStreamId')](#onplayfinishedwithstreamid18)事件回调时,当音频播放完成的时候,都会触发注册的回调。
1596
1597当同时注册[on('playFinished')](#onplayfinished)事件回调和[on('playFinishedWithStreamId')](#onplayfinishedwithstreamid18)事件回调时,当音频播放完成的时候,仅会触发'playFinishedWithStreamId'事件回调,不会触发'playFinished'事件回调。
1598
1599**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1600
1601**参数:**
1602
1603| 参数名   | 类型     | 必填 | 说明                                                         |
1604| -------- | -------- | ---- | ------------------------------------------------------------ |
1605| type     | string   | 是   | 支持的事件:'playFinishedWithStreamId',音频流播放完成会触发此回调,并返回播放完成的音频的streamId。 |
1606| callback | Callback\<number> | 是   |  异步'playFinishedWithStreamId'的回调方法。返回播放完成的音频的streamId。   |
1607
1608**示例:**
1609
1610```js
1611import { BusinessError } from '@kit.BasicServicesKit';
1612import { media } from '@kit.MediaKit';
1613import { audio } from '@kit.AudioKit';
1614
1615// 创建soundPool实例。
1616let soundPool_: media.SoundPool;
1617let audioRendererInfo: audio.AudioRendererInfo = {
1618  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1619  rendererFlags: 1
1620}
1621media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool: media.SoundPool) => {
1622  if (error) {
1623    console.error(`Failed to createSoundPool`);
1624  } else {
1625    soundPool_ = soundPool;
1626    console.info(`Succeeded in createSoundPool`);
1627    soundPool_.on('playFinishedWithStreamId', (streamId) => {
1628      console.info('The stream with streamId: ' + streamId + ' has finished playing.');
1629    });
1630  }
1631});
1632
1633```
1634
1635### off('playFinishedWithStreamId')<sup>18+</sup>
1636
1637off(type: 'playFinishedWithStreamId'): void
1638
1639取消监听音频池资源播放完成。
1640
1641**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1642
1643**参数:**
1644
1645| 参数名 | 类型   | 必填 | 说明                                                         |
1646| ------ | ------ | ---- | ------------------------------------------------------------ |
1647| type   | string | 是   | 取消注册的事件:'playFinishedWithStreamId'。 |
1648
1649**示例:**
1650
1651```js
1652import { BusinessError } from '@kit.BasicServicesKit';
1653import { media } from '@kit.MediaKit';
1654import { audio } from '@kit.AudioKit';
1655
1656// 创建soundPool实例。
1657let soundPool_: media.SoundPool;
1658let audioRendererInfo: audio.AudioRendererInfo = {
1659  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1660  rendererFlags: 1
1661}
1662media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool: media.SoundPool) => {
1663  if (error) {
1664    console.error(`Failed to createSoundPool`);
1665  } else {
1666    soundPool_ = soundPool;
1667    console.info(`Succeeded in createSoundPool`);
1668    soundPool_.off('playFinishedWithStreamId');
1669  }
1670});
1671
1672```
1673
1674### on('playFinished')
1675
1676on(type: 'playFinished', callback: Callback\<void>): void
1677
1678音频池资源播放完成监听。
1679
1680**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1681
1682**参数:**
1683
1684| 参数名   | 类型     | 必填 | 说明                                                         |
1685| -------- | -------- | ---- | ------------------------------------------------------------ |
1686| type     | string   | 是   | 支持的事件:'playFinished',音频流播放完成会触发此回调。 |
1687| callback | Callback\<void> | 是   |  异步'playFinished'的回调方法。        |
1688
1689**示例:**
1690
1691```js
1692import { BusinessError } from '@kit.BasicServicesKit';
1693import { media } from '@kit.MediaKit';
1694import { audio } from '@kit.AudioKit';
1695
1696// 创建soundPool实例。
1697let soundPool: media.SoundPool;
1698let audioRendererInfo: audio.AudioRendererInfo = {
1699  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1700  rendererFlags: 1
1701}
1702media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1703  if (error) {
1704    console.error(`Failed to createSoundPool`);
1705    return;
1706  } else {
1707    soundPool = soundPool_;
1708    console.info(`Succeeded in createSoundPool`);
1709    soundPool.on('playFinished', () => {
1710      console.info('Succeeded in playFinished');
1711    });
1712  }
1713});
1714
1715```
1716
1717### off('playFinished')
1718
1719off(type: 'playFinished'): void
1720
1721取消监听音频池资源播放完成。
1722
1723**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1724
1725**参数:**
1726
1727| 参数名 | 类型   | 必填 | 说明                                                         |
1728| ------ | ------ | ---- | ------------------------------------------------------------ |
1729| type   | string | 是   | 取消注册的事件:'playFinished'。 |
1730
1731**示例:**
1732
1733```js
1734import { BusinessError } from '@kit.BasicServicesKit';
1735import { media } from '@kit.MediaKit';
1736import { audio } from '@kit.AudioKit';
1737
1738// 创建soundPool实例。
1739let soundPool: media.SoundPool;
1740let audioRendererInfo: audio.AudioRendererInfo = {
1741  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1742  rendererFlags: 1
1743}
1744media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1745  if (error) {
1746    console.error(`Failed to createSoundPool`);
1747    return;
1748  } else {
1749    soundPool = soundPool_;
1750    console.info(`Succeeded in createSoundPool`);
1751    soundPool.off('playFinished');
1752  }
1753});
1754
1755```
1756
1757### on('error')
1758
1759on(type: 'error', callback: ErrorCallback): void
1760
1761监听[SoundPool](#soundpool)的错误事件,该事件仅用于错误提示。
1762
1763**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1764
1765**参数:**
1766
1767| 参数名   | 类型     | 必填 | 说明                                                         |
1768| -------- | -------- | ---- | ------------------------------------------------------------ |
1769| type     | string   | 是   | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 |
1770| callback | ErrorCallback | 是   | 错误事件回调方法:使用播放器的过程中发生错误,会提供错误码ID和错误信息。 |
1771
1772**示例:**
1773
1774```js
1775import { BusinessError } from '@kit.BasicServicesKit';
1776import { media } from '@kit.MediaKit';
1777import { audio } from '@kit.AudioKit';
1778
1779// 创建soundPool实例。
1780let soundPool: media.SoundPool;
1781let audioRendererInfo: audio.AudioRendererInfo = {
1782  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1783  rendererFlags: 1
1784}
1785media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1786  if (error) {
1787    console.error(`Failed to createSoundPool`);
1788    return;
1789  } else {
1790    soundPool = soundPool_;
1791    console.info(`Succeeded in createSoundPool`);
1792    soundPool.on('error', (error: BusinessError) => {
1793      console.error('error happened,and error message is :' + error.message);
1794      console.error('error happened,and error code is :' + error.code);
1795    })
1796  }
1797});
1798
1799```
1800
1801### off('error')
1802
1803off(type: 'error'): void
1804
1805取消监听音频池的错误事件。
1806
1807**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1808
1809**参数:**
1810
1811| 参数名 | 类型   | 必填 | 说明                                      |
1812| ------ | ------ | ---- | ----------------------------------------- |
1813| type   | string | 是   | 错误事件回调类型,取消注册的事件:'error'。 |
1814
1815**示例:**
1816
1817```js
1818import { BusinessError } from '@kit.BasicServicesKit';
1819import { media } from '@kit.MediaKit';
1820import { audio } from '@kit.AudioKit';
1821
1822// 创建soundPool实例。
1823let soundPool: media.SoundPool;
1824let audioRendererInfo: audio.AudioRendererInfo = {
1825  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1826  rendererFlags: 1
1827}
1828media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1829  if (error) {
1830    console.error(`Failed to createSoundPool`);
1831    return;
1832  } else {
1833    soundPool = soundPool_;
1834    console.info(`Succeeded in createSoundPool`);
1835    soundPool.off('error');
1836  }
1837});
1838```
1839
1840### on('errorOccurred')<sup>20+</sup>
1841
1842on(type: 'errorOccurred', callback: Callback\<ErrorInfo>): void
1843
1844监听[SoundPool](#soundpool)的错误事件,并返回包含错误码、错误发生阶段、资源ID和音频流ID的[ErrorInfo](#errorinfo20)。
1845
1846**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1847
1848**参数:**
1849
1850| 参数名   | 类型     | 必填 | 说明                                                         |
1851| -------- | -------- | ---- | ------------------------------------------------------------ |
1852| type     | string   | 是   | 事件回调类型,支持的事件为'errorOccurred',当用户或系统操作导致错误,触发该事件。 |
1853| callback | Callback\<[ErrorInfo](#errorinfo20)> | 是   | 错误事件回调方法。在使用播放器的过程中发生错误时,提供错误信息[ErrorInfo](#errorinfo20)。 |
1854
1855**示例:**
1856
1857```js
1858import { BusinessError } from '@kit.BasicServicesKit';
1859import { media } from '@kit.MediaKit';
1860import { audio } from '@kit.AudioKit';
1861
1862// 创建soundPool实例。
1863let soundPool: media.SoundPool;
1864let audioRendererInfo: audio.AudioRendererInfo = {
1865  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1866  rendererFlags: 1
1867}
1868media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1869  if (error) {
1870    console.error(`Failed to createSoundPool`);
1871    return;
1872  } else {
1873    soundPool = soundPool_;
1874    console.info(`Succeeded in createSoundPool`);
1875    soundPool.on('errorOccurred', (errorInfo) => {
1876      console.error('error happened,and error message is :' + errorInfo.errorCode.message);
1877      console.error('error happened,and error code is :' + errorInfo.errorCode.code);
1878      console.error('error happened,and errorType is :' + errorInfo.errorType);
1879      console.error('error happened,and soundId is :' + errorInfo.soundId);
1880      console.error('error happened,and streamId is :' + errorInfo.streamId);
1881    })
1882  }
1883});
1884
1885```
1886
1887### off('errorOccurred')<sup>20+</sup>
1888
1889 off(type: 'errorOccurred', callback?: Callback\<ErrorInfo>): void
1890
1891取消监听音频池的错误事件。
1892
1893**系统能力:** SystemCapability.Multimedia.Media.SoundPool
1894
1895**参数:**
1896
1897| 参数名 | 类型   | 必填 | 说明                                      |
1898| ------ | ------ | ---- | ----------------------------------------- |
1899| type   | string | 是   | 事件回调类型,取消注册的事件为'errorOccurred'。 |
1900| callback | Callback\<[ErrorInfo](#errorinfo20)> | 否   | 错误事件回调方法。在使用播放器的过程中发生错误时,提供错误信息[ErrorInfo](#errorinfo20)。 |
1901
1902**示例:**
1903
1904```js
1905import { BusinessError } from '@kit.BasicServicesKit';
1906import { media } from '@kit.MediaKit';
1907import { audio } from '@kit.AudioKit';
1908
1909// 创建soundPool实例。
1910let soundPool: media.SoundPool;
1911let audioRendererInfo: audio.AudioRendererInfo = {
1912  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
1913  rendererFlags: 1
1914}
1915media.createSoundPool(5, audioRendererInfo, (error: BusinessError, soundPool_: media.SoundPool) => {
1916  if (error) {
1917    console.error(`Failed to createSoundPool`);
1918    return;
1919  } else {
1920    soundPool = soundPool_;
1921    console.info(`Succeeded in createSoundPool`);
1922    soundPool.off('errorOccurred');
1923  }
1924});
1925```