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