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```