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 '@ohos.multimedia.media'; 15import audio from '@ohos.multimedia.audio'; 16``` 17 18## PlayParameters 19 20表示音频池播放参数设置。 21 22通过设置播放相关参数,来控制播放的音量,循环次数,播放优先级等参数。 23 24**系统能力:** SystemCapability.Multimedia.Media.SoundPool 25 26| 名称 | 类型 | 必填 | 说明 | 27| --------------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 28| loop | number | 否 | 设置循环参数,0为循环一次,-1表示一直循环。 | 29| rate | number | 否 | 设置音频播放的倍速,具体倍速范围参照[AudioRendererRate](js-apis-audio.md#AudioRendererRate)。 | 30| leftVolume | number | 否 | 设置左声道音量,设置范围(0~1)。 | 31| rightVolume | number | 否 | 设置右声道音量。(当前不支持左右分别设置,将以左声道音量为准)。 | 32| priority | number | 否 | 音频流播放的优先级,0为最低优先级,数值越大优先级越高,通过相互比较大小确定播放优先级。 | 33| parallelPlayFlag | boolean | 否 | 是否和其它正在播放的音频并行播放的标识,true:不抢占音频焦点和其它正在播放的音频并行播放,false:抢占焦点打断其它正在播放的音频。<br/>此接口为系统接口。| 34 35## SoundPool 36 37音频池提供了系统声音的加载、播放、音量设置、循环设置、停止播放、资源卸载等功能, 在调用SoundPool的接口前,需要先通过[createSoundPool](js-apis-media.md#mediacreatesoundpool10)创建实例 38 39### load 40 41load(uri: string, callback: AsyncCallback\<number>): void 42 43加载音频资源。使用callback方式异步获取资源ID,入参uri通过获取文件fd生成以"fd://"开头的文件描述字符串。 44 45**系统能力:** SystemCapability.Multimedia.Media.SoundPool 46 47**参数:** 48 49| 参数名 | 类型 | 必填 | 说明 | 50| -------- | -------------------------------------- | ---- | ------------------------------------- | 51| uri | string | 是 | 音频文件的加载路径描述,一般以"fd://"开头的文件描述。 | 52| callback | AsyncCallback\<number> | 是 | 异步音频资源加载返回的资源id,有效值大于0。 | 53 54**错误码:** 55 56以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 57 58| 错误码ID | 错误信息 | 59| -------- | --------------------------------------- | 60| 5400102 | Operation not allowed. Return by callback.| 61| 5400103 | I/O error. Return by callback. | 62| 5400105 | Service died. Return by callback. | 63 64**示例:** 65 66```ts 67import fs from '@ohos.file.fs'; 68 69let uri:string = ""; 70 71//获取fd的uri路径 72await fs.open('/test_01.mp3', fs.OpenMode.READ_ONLY).then((file: fs.File) => { 73 console.info("file fd: " + file.fd); 74 uri = 'fd://' + (file.fd).toString() 75}); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。 76 77soundPool.load(uri, (error: BusinessError, soundId_: number) => { 78 if (error) { 79 console.info(`load soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 80 } else { 81 console.info(`load soundPool Success` + JSON.stringify(soundId_)) 82 } 83}) 84``` 85 86### load 87 88load(uri: string): Promise\<number> 89 90加载音频资源。使用Promise方式异步获取资源ID,入参uri通过获取文件fd生成以"fd://"开头的文件描述字符串。 91 92**系统能力:** SystemCapability.Multimedia.Media.SoundPool 93 94**参数:** 95 96| 参数名 | 类型 | 必填 | 说明 | 97| ------ | -------------------------------------- | ---- | -------------------------- | 98| uri | string | 是 | 音频文件的加载路径描述,一般以"fd://"开头的文件描述。 | 99 100**返回值:** 101 102| 类型 | 说明 | 103| -------------- | ------------------------------------------ | 104| Promise\<number> | 异步音频池资源的加载,返回资源的id,有效值大于0。 | 105 106**错误码:** 107 108以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 109 110| 错误码ID | 错误信息 | 111| -------- | --------------------------------------- | 112| 5400102 | Operation not allowed. Return by promise.| 113| 5400103 | I/O error. Return by promise. | 114| 5400105 | Service died. Return by promise. | 115 116**示例:** 117 118```ts 119import fs from '@ohos.file.fs'; 120 121let uri:string = ""; 122let soundID: number; 123 124//获取fd的uri路径 125await fs.open('/test_01.mp3', fs.OpenMode.READ_ONLY).then((file: fs.File) => { 126 console.info("file fd: " + file.fd); 127 uri = 'fd://' + (file.fd).toString() 128}); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。 129 130soundPool.load(uri).then((soundId: number) => { 131 console.info('soundPool load uri success'); 132 soundID = soundId; 133}).catch((err) => { 134 console.error('soundPool load failed and catch error is ' + err.message); 135}); 136 137``` 138 139### load 140 141load(fd: number, offset: number, length: number, callback: AsyncCallback\<number>): void 142 143加载音频资源。使用callback方式异步获取资源ID,入参可手动传入资源信息或通过读取应用内置资源自动获取。 144 145**系统能力:** SystemCapability.Multimedia.Media.SoundPool 146 147**参数:** 148 149| 参数名 | 类型 | 必填 | 说明 | 150| -------- | ---------------------- | ---- | --------------------------- | 151| fd | number | 是 | 资源句柄,通过resourceManager.getRawFileDescriptor获取。 | 152| offset | number | 是 | 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 153| length | number | 是 | 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 154| callback | AsyncCallback\<number> | 是 | 获取回调的soundID,有效值大于0。 | 155 156**错误码:** 157 158以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 159 160| 错误码ID | 错误信息 | 161| -------- | --------------------------------------- | 162| 5400102 | Operation not allowed. Return by callback. | 163| 5400103 | I/O error. Return by callback. | 164| 5400105 | Service died. Return by callback. | 165 166**示例:** 167 168```ts 169import fs from '@ohos.file.fs'; 170 171let fd: number; 172let soundID: number; 173let fileSize: number; 174let maxOffset: number; 175 176//获取fd的描述信息 177await fs.open('/test_01.mp3', fs.OpenMode.READ_ONLY).then((file: fs.File) => { 178 console.info("file fd: " + file.fd); 179}); 180let stat: fs.Stat = await fs.stat('/test_01.mp3'); 181fileSize = stat.size; 182maxOffset = stat.size; 183 184soundPool.load(file.fd, 0, fileSize, (error: BusinessError, soundId_: number) => { 185 if (error) { 186 console.info(`load soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 187 } else { 188 soundID = soundId_; 189 console.info('load success soundid:' + soundId_); 190 } 191}) 192 193``` 194 195### load 196 197load(fd: number, offset: number, length: number): Promise\<number> 198 199加载音频资源。使用Promise方式异步获取资源ID,入参可手动传入资源信息或通过读取应用内置资源自动获取。 200 201**系统能力:** SystemCapability.Multimedia.Media.SoundPool 202 203**参数:** 204 205| 参数名 | 类型 | 必填 | 说明 | 206| -------- | ---------------------- | ---- | --------------------------- | 207| fd | number | 是 | 资源句柄,通过resourceManager.getRawFileDescriptor获取。 | 208| offset | number | 是 | 资源偏移量,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 209| length | number | 是 | 资源长度,需要基于预置资源的信息输入,非法值会造成音视频资源解析错误。 | 210 211**返回值:** 212 213| 类型 | 说明 | 214| ---------------- | -------------------------------- | 215| Promise\<number> | 获取回调的soundID,有效值大于0。 | 216 217**错误码:** 218 219以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 220 221| 错误码ID | 错误信息 | 222| -------- | --------------------------------------- | 223| 5400102 | Operation not allowed. Return by promise.| 224| 5400103 | I/O error. Return by promise. | 225| 5400105 | Service died. Return by promise. | 226 227**示例:** 228 229```ts 230import fs from '@ohos.file.fs'; 231 232let fd: number; 233let soundID: number; 234let fileSize: number; 235let maxOffset: number; 236 237//获取fd的描述信息 238await fs.open('/test_01.mp3', fs.OpenMode.READ_ONLY).then((file: fs.File) => { 239 console.info("file fd: " + file.fd); 240}); 241let stat: fs.Stat = await fs.stat('/test_01.mp3'); 242fileSize = stat.size; 243maxOffset = stat.size; 244 245soundPool.load(file.fd, 0, fileSize).then((soundId: number) => { 246 console.info('load success'); 247 soundID = soundId; 248}).catch((err) => { 249 console.error('soundpool load failed and catch error is ' + err.message); 250}); 251``` 252 253### play 254 255play(soundID: number, params: PlayParameters, callback: AsyncCallback\<number>): void 256 257播放音频资源。使用callback方式异步获取音频流streamID。 258 259**系统能力:** SystemCapability.Multimedia.Media.SoundPool 260 261**参数:** 262 263| 参数名 | 类型 | 必填 | 说明 | 264| -------- | ---------------------- | ---- | --------------------------- | 265| soundID | number | 是 | 资源ID,通过load方法获取。 | 266| params | [PlayParameters](#playparameters) | 是 | play播放相关参数的设置。 | 267| callback | AsyncCallback\<number> | 是 | 获取回调的音频流ID,有效值大于0。 | 268 269**错误码:** 270 271以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 272 273| 错误码ID | 错误信息 | 274| -------- | --------------------------------------- | 275| 5400102 | Operation not allowed. Return by callback. | 276| 5400105 | Service died. Return by callback. | 277 278**示例:** 279 280```js 281let soundID: number; 282let streamID: number; 283let playParameters: media.PlayParameters = { 284 loop = 3, // 循环4次 285 rate = audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速 286 leftVolume = 0.5, // range = 0.0-1.0 287 rightVolume = 0.5, // range = 0.0-1.0 288 priority = 0, // 最低优先级 289 parallelPlayFlag = false // 不和其它正在播放的音频并行播放 290 } 291soundPool.play(soundID, playParameters, (error: BusinessError, streamId: number) => { 292 if (error) { 293 console.info(`play sound Error: errCode is ${error.code}, errMessage is ${error.message}`) 294 } else { 295 streamID = streamId; 296 console.info('play success soundid:' + streamId); 297 } 298}) 299``` 300 301### play 302 303play(soundID: number, callback: AsyncCallback\<number>): void 304 305播放音频资源。使用callback方式异步获取音频流streamID。 306 307**系统能力:** SystemCapability.Multimedia.Media.SoundPool 308 309**参数:** 310 311| 参数名 | 类型 | 必填 | 说明 | 312| -------- | ---------------------- | ---- | --------------------------- | 313| soundID | number | 是 | 资源ID,通过load方法获取。 | 314| callback | AsyncCallback\<number> | 是 | 获取回调的音频流ID,有效值大于0。 | 315 316**错误码:** 317 318以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 319 320| 错误码ID | 错误信息 | 321| -------- | --------------------------------------- | 322| 5400102 | Operation not allowed. Return by callback. | 323| 5400105 | Service died. Return by callback. | 324 325**示例:** 326 327```js 328let soundID: number; 329let streamID: number; 330soundPool.play(soundID, (error: BusinessError, streamId: number) => { 331 if (error) { 332 console.info(`play sound Error: errCode is ${error.code}, errMessage is ${error.message}`) 333 } else { 334 streamID = streamId; 335 console.info('play success soundid:' + streamId); 336 } 337}) 338``` 339 340### play 341 342play(soundID: number, params?: PlayParameters): Promise\<number> 343 344播放音频资源。使用Promise方式异步获取音频流streamID。 345 346**系统能力:** SystemCapability.Multimedia.Media.SoundPool 347 348**参数:** 349 350| 参数名 | 类型 | 必填 | 说明 | 351| -------- | ---------------------- | ---- | --------------------------- | 352| soundID | number | 是 | 资源ID,通过load方法获取。 | 353| params | [PlayParameters](#playparameters) | 否 | play播放相关参数的设置。 | 354 355**返回值:** 356 357| 类型 | 说明 | 358| ---------------- | -------------------------------- | 359| Promise\<number> | 获取回调的音频流ID,有效值大于0。 | 360 361**错误码:** 362 363以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 364 365| 错误码ID | 错误信息 | 366| -------- | --------------------------------------- | 367| 5400102 | Operation not allowed. Return by promise. | 368| 5400105 | Service died. Return by promise. | 369 370**示例:** 371 372```js 373let soundID: number; 374let streamID: number; 375let playParameters: media.PlayParameters = { 376 loop = 3, // 循环4次 377 rate = audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速 378 leftVolume = 0.5, // range = 0.0-1.0 379 rightVolume = 0.5, // range = 0.0-1.0 380 priority = 0, // 最低优先级 381 parallelPlayFlag = false // 不和其它正在播放的音频并行播放 382 } 383 384soundPool.play(soundID, playParameters).then((streamId: number) => { 385 console.info('play success'); 386 streamID = streamId; 387}).catch((err: BusinessError) => { 388 console.error('soundpool play failed and catch error is ' + err.message); 389}); 390``` 391 392### stop 393 394stop(streamID: number, callback: AsyncCallback\<void>): void 395 396停止播放音频资源。使用callback方式异步获取返回值。 397 398**系统能力:** SystemCapability.Multimedia.Media.SoundPool 399 400**参数:** 401 402| 参数名 | 类型 | 必填 | 说明 | 403| -------- | ---------------------- | ---- | --------------------------- | 404| streamID | number | 是 | 音频流ID,通过play方法获取。 | 405| callback | AsyncCallback\<void> | 是 | 异步音频池stop的回调方法。 | 406 407**错误码:** 408 409以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 410 411| 错误码ID | 错误信息 | 412| -------- | --------------------------------------- | 413| 5400102 | Operation not allowed. Return by callback. | 414| 5400105 | Service died. Return by callback. | 415 416**示例:** 417 418```js 419let streamID: number; 420//先调用play方法给拿到对应的streamID 421soundPool.stop(streamID, (error: BusinessError) => { 422 if (error) { 423 console.info(`stop sound Error: errCode is ${error.code}, errMessage is ${error.message}`) 424 } else { 425 console.info('stop success'); 426 } 427}) 428 429``` 430 431### stop 432 433stop(streamID: number): Promise\<void> 434 435停止streamID对应的音频播放。使用Promise方式异步获取返回值。 436 437**系统能力:** SystemCapability.Multimedia.Media.SoundPool 438 439**参数:** 440 441| 参数名 | 类型 | 必填 | 说明 | 442| -------- | ---------------------- | ---- | --------------------------- | 443| streamID | number | 是 | 音频流ID,通过play方法获取。 | 444 445**返回值:** 446 447| 类型 | 说明 | 448| ---------------- | -------------------------------- | 449| Promise\<void> | 返回值。 | 450 451**错误码:** 452 453以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 454 455| 错误码ID | 错误信息 | 456| -------- | --------------------------------------- | 457| 5400102 | Operation not allowed. Return by promise. | 458| 5400105 | Service died. Return by promise. | 459 460**示例:** 461 462```js 463let streamID: number; 464//先调用play方法给拿到对应的streamID 465 466soundPool.stop(streamID).then(() => { 467 console.info('stop success'); 468}).catch((err) => { 469 console.error('soundpool load stop and catch error is ' + err.message); 470}); 471``` 472 473### setLoop 474 475setLoop(streamID: number, loop: number, callback: AsyncCallback\<void>): void; 476 477设置循环模式。使用callback方式异步获取返回值。 478 479**系统能力:** SystemCapability.Multimedia.Media.SoundPool 480 481**参数:** 482 483| 参数名 | 类型 | 必填 | 说明 | 484| -------- | ---------------------- | ---- | --------------------------- | 485| streamID | number | 是 | 音频流ID,通过play方法获取。 | 486| loop | number | 是 | 设置循环的次数,0为默认1次,小于0为一直循环。 | 487| callback | AsyncCallback\<void> | 是 | 异步setLoop的回调方法。 | 488 489**错误码:** 490 491以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 492 493| 错误码ID | 错误信息 | 494| -------- | --------------------------------------- | 495| 5400102 | Operation not allowed. Return by callback. | 496| 5400105 | Service died. Return by callback. | 497 498**示例:** 499 500```js 501let streamID: number; 502//先通过调用play方法获取到对应的streamID 503//设置循环2次 504soundPool.setLoop(streamID, 2, (error: BusinessError) => { 505 if (error) { 506 console.info(`setLoop soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 507 } else { 508 console.info('setLoop success streamID:' + streamID); 509 } 510}) 511``` 512 513### setLoop 514 515setLoop(streamID: number, loop: number): Promise\<void> 516 517设置循环模式。使用Promise方式异步获取返回值。 518 519**系统能力:** SystemCapability.Multimedia.Media.SoundPool 520 521**参数:** 522 523| 参数名 | 类型 | 必填 | 说明 | 524| -------- | ---------------------- | ---- | --------------------------- | 525| streamID | number | 是 | 音频流ID,通过play方法获取。 | 526| loop | number | 是 | 设置循环的次数,0为默认1次,小于0为一直循环。| 527 528**返回值:** 529 530| 类型 | 说明 | 531| ---------------- | -------------------------------- | 532| Promise\<void> | 异步音频池setLoop方法的Promise返回值。 | 533 534**错误码:** 535 536以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 537 538| 错误码ID | 错误信息 | 539| -------- | --------------------------------------- | 540| 5400102 | Operation not allowed. Return by promise. | 541| 5400105 | Service died. Return by promise. | 542 543**示例:** 544 545```js 546let streamID: number; 547//先通过调用play方法获取到对应的streamID 548//设置循环1次 549soundPool.setLoop(streamID, 1).then(() => { 550 console.info('setLoop success streamID:' + streamID); 551}).catch((err) => { 552 console.error('soundpool setLoop failed and catch error is ' + err.message); 553}); 554``` 555 556### setPriority 557 558setPriority(streamID: number, priority: number, callback: AsyncCallback\<void>): void 559 560设置音频流播放的优先级。使用callback方式异步获取返回值。 561 562**系统能力:** SystemCapability.Multimedia.Media.SoundPool 563 564**参数:** 565 566| 参数名 | 类型 | 必填 | 说明 | 567| -------- | ---------------------- | ---- | --------------------------- | 568| streamID | number | 是 | 音频流ID,通过play方法获取。 | 569| priority | number | 是 | 优先级,0表示最低优先级。 | 570| callback | AsyncCallback\<void> | 是 | 异步音频池setPriority方法的回调方法。 | 571 572**错误码:** 573 574以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 575 576| 错误码ID | 错误信息 | 577| -------- | --------------------------------------- | 578| 5400102 | Operation not allowed. Return by callback. | 579| 5400105 | Service died. Return by callback. | 580 581**示例:** 582 583```js 584let streamID: number; 585// 先调用play方法获取到对应资源的streamID 586// 给对应的streamID资源设置优先级为1 587soundPool.setPriority(streamID, 1, (error: BusinessError) => { 588 if (error) { 589 console.info(`setPriority soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 590 } else { 591 console.info('setPriority success streamID:' + streamID); 592 } 593}) 594 595``` 596 597### setPriority 598 599setPriority(streamID: number, priority: number): Promise\<void> 600 601设置音频流优先级。使用Promise方式异步获取返回值。 602 603**系统能力:** SystemCapability.Multimedia.Media.SoundPool 604 605**参数:** 606 607| 参数名 | 类型 | 必填 | 说明 | 608| -------- | ---------------------- | ---- | --------------------------- | 609| streamID | number | 是 | 音频流ID,通过play方法获取。 | 610| priority | number | 是 | 优先级,0表示最低优先级。 | 611 612**返回值:** 613 614| 类型 | 说明 | 615| ---------------- | -------------------------------- | 616| Promise\<void> | 异步音频池setPriority的Promise返回值。 | 617 618**错误码:** 619 620以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 621 622| 错误码ID | 错误信息 | 623| -------- | --------------------------------------- | 624| 5400102 | Operation not allowed. Return by promise. | 625| 5400105 | Service died. Return by promise. | 626 627**示例:** 628 629```js 630let streamID: number; 631// 先调用play方法获取到对应资源的streamID 632// 给对应的streamID资源设置优先级为1 633 634soundPool.setPriority(streamID, 1).then(() => { 635 console.info('setPriority success'); 636}).catch((err) => { 637 console.error('soundpool setPriority failed and catch error is ' + err.message); 638}); 639``` 640 641### setRate 642 643setRate(streamID: number, rate: audio.AudioRendererRate, callback: AsyncCallback\<void>): void 644 645设置音频流播放速率。使用callback方式异步获取返回值。 646 647**系统能力:** SystemCapability.Multimedia.Media.SoundPool 648 649**参数:** 650 651| 参数名 | 类型 | 必填 | 说明 | 652| -------- | ---------------------- | ---- | --------------------------- | 653| streamID | number | 是 | 音频流ID,通过play方法获取。 | 654| rate | [audio.AudioRendererRate](js-apis-audio.md#audiorendererrate8) | 是 | 音频rate相关参数。 | 655| callback | AsyncCallback\<void> | 是 | 异步音频池setRate方法的回调方法。 | 656 657**错误码:** 658 659以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 660 661| 错误码ID | 错误信息 | 662| -------- | --------------------------------------- | 663| 5400102 | Operation not allowed. Return by callback. | 664| 5400105 | Service died. Return by callback. | 665 666**示例:** 667 668```js 669let streamID: number; 670let selectedAudioRendererRate: audio.AudioRendererRate = audio.AudioRendererRate.RENDER_RATE_NORMAL; // 默认正常速率 671// 先调用play方法获取到对应资源的streamID 672 673soundPool.setRate(streamID, selectedAudioRendererRate, (error: BusinessError) => { 674 if (error) { 675 console.info(`setRate soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 676 } else { 677 console.info('setRate success streamID:' + streamID); 678 } 679}) 680 681``` 682 683### setRate 684 685setRate(streamID: number, rate: audio.AudioRendererRate): Promise\<void> 686 687设置音频流的播放速率。使用Promise方式异步获取返回值。 688 689**系统能力:** SystemCapability.Multimedia.Media.SoundPool 690 691**参数:** 692 693| 参数名 | 类型 | 必填 | 说明 | 694| -------- | ---------------------- | ---- | --------------------------- | 695| streamID | number | 是 | 音频流ID,通过play方法获取。 | 696| rate | [audio.AudioRendererRate](js-apis-audio.md#audiorendererrate8) | 是 | 音频rate相关参数。 | 697 698**返回值:** 699 700| 类型 | 说明 | 701| ---------------- | -------------------------------- | 702| Promise\<void> | 异步音频池setRate方法的Promise返回值。 | 703 704**错误码:** 705 706以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 707 708| 错误码ID | 错误信息 | 709| -------- | --------------------------------------- | 710| 5400102 | Operation not allowed. Return by promise. | 711| 5400105 | Service died. Return by promise. | 712 713**示例:** 714 715```js 716let streamID: number; 717let selectedAudioRendererRate: audio.AudioRendererRate = audio.AudioRendererRate.RENDER_RATE_NORMAL; // 默认正常速率 718// 先调用play方法获取到对应资源的streamID 719 720soundPool.setRate(streamID, selectedAudioRendererRate).then(() => { 721 console.info('setRate success'); 722}).catch((err) => { 723 console.error('soundpool setRate failed and catch error is ' + err.message); 724}); 725``` 726 727### setVolume 728 729setVolume(streamID: number, leftVolume: number, rightVolume: number, callback: AsyncCallback\<void>): void 730 731设置音频流播放音量。使用callback方式异步获取返回值。 732 733**系统能力:** SystemCapability.Multimedia.Media.SoundPool 734 735**参数:** 736 737| 参数名 | 类型 | 必填 | 说明 | 738| -------- | ---------------------- | ---- | --------------------------- | 739| streamID | number | 是 | 音频流ID,通过play方法获取。 | 740| leftVolume | number | 是 | 左声道音量,设置范围为0.0-1.0之间。 | 741| rightVolume | number | 是 | 右声道音量,当前右声道设置无效,以左声道为准。 | 742| callback | AsyncCallback\<void> | 是 | 异步音频池setRate方法的回调方法。 | 743 744**错误码:** 745 746以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 747 748| 错误码ID | 错误信息 | 749| -------- | --------------------------------------- | 750| 5400102 | Operation not allowed. Return by callback. | 751| 5400105 | Service died. Return by callback. | 752 753**示例:** 754 755```js 756let streamID: number; 757// 先调用play方法获取到对应资源的streamID 758//设置音量为0.5 759soundPool.setVolume(streamID, 0.5, 0.5, (error: BusinessError) => { 760 if (error) { 761 console.info(`setVolume soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 762 } else { 763 console.info('setVolume success streamID:' + streamID); 764 } 765}) 766 767``` 768 769### setVolume 770 771setVolume(streamID: number, leftVolume: number, rightVolume: number): Promise\<void> 772 773设置音频流的播放音量。使用Promise方式异步获取返回值。 774 775**系统能力:** SystemCapability.Multimedia.Media.SoundPool 776 777**参数:** 778 779| 参数名 | 类型 | 必填 | 说明 | 780| -------- | ---------------------- | ---- | --------------------------- | 781| streamID | number | 是 | 音频流ID,通过play方法获取。 | 782| leftVolume | number | 是 | 左声道音量,设置范围为0.0-1.0之间。 | 783| rightVolume | number | 是 | 右声道音量,当前右声道设置无效,以左声道为准。 | 784 785**返回值:** 786 787| 类型 | 说明 | 788| ---------------- | -------------------------------- | 789| Promise\<void> | 异步音频池setVolume方法的Promise返回值。 | 790 791**错误码:** 792 793以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 794 795| 错误码ID | 错误信息 | 796| -------- | --------------------------------------- | 797| 5400102 | Operation not allowed. Return by promise. | 798| 5400105 | Service died. Return by promise. | 799 800**示例:** 801 802```js 803let streamID: number; 804selectedAudioRendererRate: number = 0; // 默认正常速率 805// 先调用play方法获取到对应资源的streamID 806 807soundPool.setVolume(streamID, 0.5, 0.5).then(() => { 808 console.info('setVolume success'); 809}).catch((err) => { 810 console.error('soundpool setVolume failed and catch error is ' + err.message); 811}); 812``` 813 814### unload 815 816unload(soundID: number, callback: AsyncCallback\<void>): void 817 818卸载音频资源。使用callback方式异步获取返回值。 819 820**系统能力:** SystemCapability.Multimedia.Media.SoundPool 821 822**参数:** 823 824| 参数名 | 类型 | 必填 | 说明 | 825| -------- | ---------------------- | ---- | --------------------------- | 826| soundID | number | 是 | 资源ID,通过load方法获取。 | 827| callback | AsyncCallback\<void> | 是 | 异步音频池unload方法的回调方法。 | 828 829**错误码:** 830 831以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 832 833| 错误码ID | 错误信息 | 834| -------- | --------------------------------------- | 835| 5400102 | Operation not allowed. Return by callback. | 836| 5400103 | I/O error. Return by callback. | 837| 5400105 | Service died. Return by callback. | 838 839**示例:** 840 841```js 842let soundID: number; 843// 先调用load方法获取到对应资源的soundID 844soundPool.unload(soundID, (error: BusinessError) => { 845 if (error) { 846 console.info(`unload soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 847 } else { 848 console.info('unload success:'); 849 } 850}) 851 852``` 853 854### unload 855 856unload(soundID: number): Promise\<void> 857 858卸载音频资源。使用Promise方式异步获取返回值。 859 860**系统能力:** SystemCapability.Multimedia.Media.SoundPool 861 862**参数:** 863 864| 参数名 | 类型 | 必填 | 说明 | 865| -------- | ---------------------- | ---- | --------------------------- | 866| soundID | number | 是 | 资源ID,通过load方法获取。 | 867 868**返回值:** 869 870| 类型 | 说明 | 871| ---------------- | -------------------------------- | 872| Promise\<void> | 异步音频池unload方法的Promise返回值。 | 873 874**错误码:** 875 876以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 877 878| 错误码ID | 错误信息 | 879| -------- | --------------------------------------- | 880| 5400102 | Operation not allowed. Return by promise. | 881| 5400103 | I/O error. Return by promise. | 882| 5400105 | Service died. Return by promise. | 883 884**示例:** 885 886```js 887let soundID: number; 888// 先调用load方法获取到对应资源的soundID 889 890soundPool.unload(soundID).then(() => { 891 console.info('unload success'); 892}).catch((err) => { 893 console.error('soundpool unload failed and catch error is ' + err.message); 894}); 895``` 896 897### release 898 899release(callback: AsyncCallback\<void>): void 900 901释放音频池实例。使用callback方式异步获取返回值。 902 903**系统能力:** SystemCapability.Multimedia.Media.SoundPool 904 905**参数:** 906 907| 参数名 | 类型 | 必填 | 说明 | 908| -------- | ---------------------- | ---- | --------------------------- | 909| callback | AsyncCallback\<void> | 是 | 异步音频池release方法的回调方法。 | 910 911**错误码:** 912 913以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 914 915| 错误码ID | 错误信息 | 916| -------- | --------------------------------------- | 917| 5400105 | Service died. Return by callback. | 918 919**示例:** 920 921```js 922 923soundPool.release((error: BusinessError) => { 924 if (error) { 925 console.info(`release soundPool Error: errCode is ${error.code}, errMessage is ${error.message}`) 926 } else { 927 console.info('release success'); 928 } 929}) 930 931``` 932 933### release 934 935release(): Promise\<void> 936 937释放音频池实例。使用Promise方式异步获取返回值。 938 939**系统能力:** SystemCapability.Multimedia.Media.SoundPool 940 941**返回值:** 942 943| 类型 | 说明 | 944| ---------------- | -------------------------------- | 945| Promise\<void> | 异步音频池release方法的Promise返回值。 | 946 947**错误码:** 948 949以下错误码的详细介绍请参见[媒体错误码](../errorcodes/errorcode-media.md)。 950 951| 错误码ID | 错误信息 | 952| -------- | --------------------------------------- | 953| 5400105 | Service died. Return by promise. | 954 955**示例:** 956 957```js 958 959soundPool.release().then(() => { 960 console.info('release success'); 961}).catch((err) => { 962 console.error('soundpool release failed and catch error is ' + err.message); 963}); 964``` 965 966### on('loadComplete') 967 968on(type: 'loadComplete', callback: Callback\<number>): void 969 970音频池资源加载完成监听。 971 972**系统能力:** SystemCapability.Multimedia.Media.SoundPool 973 974**参数:** 975 976| 参数名 | 类型 | 必填 | 说明 | 977| -------- | -------- | ---- | ------------------------------------------------------------ | 978| type | string | 是 | 支持的事件:'loadComplete',对应的ID加载完成会触发此回调。 | 979| callback | Callback\<number> | 是 | 对应资源加载完成的资源ID。 | 980 981**示例:** 982 983```js 984soundPool.on('loadComplete', (soundId: number) => { 985 console.info('loadComplete success,soundId:' + soundId) 986}) 987``` 988 989### off('loadComplete') 990 991off(type: 'loadComplete'): void 992 993取消监听资源的加载完成。 994 995**系统能力:** SystemCapability.Multimedia.Media.SoundPool 996 997**参数:** 998 999| 参数名 | 类型 | 必填 | 说明 | 1000| ------ | ------ | ---- | ------------------------------------------------------------ | 1001| type | string | 是 | 取消注册的事件:'loadComplete'。 | 1002 1003**示例:** 1004 1005```js 1006soundPool.off('loadComplete') 1007``` 1008 1009### on('playFinished') 1010 1011on(type: 'playFinished', callback: Callback\<void>): void 1012 1013音频池资源播放完成监听。 1014 1015**系统能力:** SystemCapability.Multimedia.Media.SoundPool 1016 1017**参数:** 1018 1019| 参数名 | 类型 | 必填 | 说明 | 1020| -------- | -------- | ---- | ------------------------------------------------------------ | 1021| type | string | 是 | 支持的事件:'playFinished',音频流播放完成会触发此回调。 | 1022| callback | Callback\<void> | 是 | 异步'playFinished'的回调方法。 | 1023 1024**示例:** 1025 1026```js 1027soundPool.on('playFinished', () => { 1028 console.info('playFinished success') 1029}) 1030``` 1031 1032### off('playFinished') 1033 1034off(type: 'playFinished'): void 1035 1036取消监听音频池资源播放完成。 1037 1038**系统能力:** SystemCapability.Multimedia.Media.SoundPool 1039 1040**参数:** 1041 1042| 参数名 | 类型 | 必填 | 说明 | 1043| ------ | ------ | ---- | ------------------------------------------------------------ | 1044| type | string | 是 | 取消注册的事件:'playFinished'。 | 1045 1046**示例:** 1047 1048```js 1049soundPool.off('playFinished') 1050``` 1051 1052### on('error') 1053 1054on(type: 'error', callback: ErrorCallback): void 1055 1056监听[SoundPool](#soundpool)的错误事件,该事件仅用于错误提示。 1057 1058**系统能力:** SystemCapability.Multimedia.Media.SoundPool 1059 1060**参数:** 1061 1062| 参数名 | 类型 | 必填 | 说明 | 1063| -------- | -------- | ---- | ------------------------------------------------------------ | 1064| type | string | 是 | 错误事件回调类型,支持的事件:'error',用户操作和系统都会触发此事件。 | 1065| callback | function | 是 | 错误事件回调方法:使用播放器的过程中发生错误,会提供错误码ID和错误信息。 | 1066 1067SoundPool回调的**错误分类**<a name = error_info></a>可以分为以下几种: 1068 1069| 错误码ID | 错误信息 | 说明 | 1070| -------- | --------------------- | ------------------------------------------------------------ | 1071| 401 | Invalid Parameter: | 入参错误,表示调用无效。 | 1072| 801 | Unsupport Capability: | 不支持该API能力,表示调用无效。 | 1073| 5400101 | No Memory: | 内存不足。 | 1074| 5400102 | Operation Not Allowed: | 当前状态机不支持此操作,表示调用无效。 | 1075| 5400103 | IO Error: | I/O异常。 | 1076| 5400105 | Service Died: | 播放进程死亡,音频池依赖的service端发生异常。| 1077 1078**示例:** 1079 1080```js 1081soundPool.on('error', (error: BusinessError) => { 1082 console.error('error happened,and error message is :' + error.message) 1083 console.error('error happened,and error code is :' + error.code) 1084}) 1085``` 1086 1087### off('error') 1088 1089off(type: 'error'): void 1090 1091取消监听音频池的错误事件。 1092 1093**系统能力:** SystemCapability.Multimedia.Media.SoundPool 1094 1095**参数:** 1096 1097| 参数名 | 类型 | 必填 | 说明 | 1098| ------ | ------ | ---- | ----------------------------------------- | 1099| type | string | 是 | 错误事件回调类型,取消注册的事件:'error'。 | 1100 1101**示例:** 1102 1103```js 1104soundPool.off('error') 1105```