OpenHarmony实战开发-使用SoundPool开发音频播放功能

使用SoundPool(音频池)提供的接口,可以实现低时延短音播放。

当应用开发时,经常需要使用一些急促简短的音效(如相机快门音效、系统通知音效等),此时建议调用SoundPool,实现一次加载,多次低时延播放。

SoundPool当前支持播放1MB以下的音频资源,大小超过1MB的长音频将截取1MB大小数据进行播放。

本开发指导将以SoundPool进行一次低时延播放音频的过程为例,向开发者讲解如何使用SoundPool。详细的API声明请参考SoundPool API参考。

过程包括:创建SoundPool实例,加载音频资源(包括资源的解封装与解码:解码格式参考音频解码支持),设置播放参数(循环模式/播放优先级等),播放控制(播放/停止),释放资源。

在应用开发过程中,开发者应通过监听方法检查当前播放状态并按照一定顺序调用接口,执行对应操作,否则系统可能会抛出异常或生成其他未定义的行为。具体顺序可参考下列开发步骤及对应说明。

开发步骤及注意事项

1.调用createSoundPool方法创建SoundPool实例。

import media from '@ohos.multimedia.media';
import audio from '@ohos.multimedia.audio';
import {
    BusinessError } from '@ohos.base';

let soundPool: media.SoundPool;
let audioRendererInfo: audio.AudioRendererInfo = {
   
  usage : audio.StreamUsage.STREAM_USAGE_MUSIC,
  rendererFlags : 0
}

media.createSoundPool(5, audioRendererInfo).then((soundpool_: media.SoundPool) => {
   
  if (soundpool_ != null) {
   
    soundPool = soundpool_;
    console.info('create SoundPool success');
  } else {
   
    console.error('create SoundPool fail');
  }
}).catch((error: BusinessError) => {
   
  console.error(`soundpool catchCallback, error message:${
    error.message}`);
});

2.调用load方法进行音频资源加载。 可以传入uri或fd加载资源,此处使用传入uri的方式为例,更多方法请参考API文档。

import {
    BusinessError } from '@ohos.base';
import fs from '@ohos.file.fs';

let soundID: number;
let uri: string;
async function load() {
   
  await fs.open('/test_01.mp3', fs.OpenMode.READ_ONLY).then((file: fs.File) => {
   
    console.info("file fd: " + file.fd);
    uri = 'fd://' + (file.fd).toString()
  }); // '/test_01.mp3' 作为样例,使用时需要传入文件对应路径。
  soundPool.load(uri).then((soundId: number) => {
   
    console.info('soundPool load uri success');
    soundID = soundId;
  }).catch((err: BusinessError) => {
   
    console.error('soundPool load failed and catch error is ' + err.message)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值