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