HarmonyOS 中播放一段几秒钟的音频用哪个API?

HarmonyOS 中播放一段几秒钟的音频用哪个API?目前看AVPlayer 和 SoundPool都不行,示例代码本身就有问题。

HarmonyOS
2024-11-11 11:36:22
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

Sound Pool为API10 Release版本才可以使用,麻烦使用对应API进行验证。

import audio from '@ohos.multimedia.audio'; 
import media from '@ohos.multimedia.media'; 
import common from '@ohos.app.ability.common'; 
 
let soundPool: media.SoundPool; 
let streamId: number = 0; 
let soundId: number = 0; 
let audioRendererInfo: audio.AudioRendererInfo = { 
  usage: audio.StreamUsage.STREAM_USAGE_MUSIC, 
  rendererFlags: 1 
} 
 
async function create() { 
  //创建soundPool实例 
  soundPool = await media.createSoundPool(5, audioRendererInfo); 
  //注册监听 
  loadCallback(); 
  finishPlayCallback(); 
  setErrorCallback(); 
} 
async function loadCallback() { 
  // 加载完成回调 
  soundPool.on('loadComplete', (soundId_: number) => { 
    console.info('loadComplete, soundId: ' + soundId_); 
  }) 
} 
//设置播放完成监听 
async function finishPlayCallback() { 
  // 播放完成回调 
  soundPool.on('playFinished', () => { 
    console.info("recive play finished message"); 
    // 可进行下次播放 
  }) 
} 
//设置错误类型监听 
function setErrorCallback() { 
  soundPool.on('error', (error) => { 
    console.info('error happened,message is :' + error.message); 
  }) 
} 
async function PlaySoundPool() { 
  // 开始播放,这边play也可带播放播放的参数PlayParameters 
  streamId = await soundPool.play(soundId); 
  // 设置循环播放次数 
  soundPool.setLoop(streamId, 2); // 播放3次 
  // 设置对应流的优先级 
  soundPool.setPriority(streamId, 1); 
  // 设置音量 
  soundPool.setVolume(streamId, 0.5, 0.5); 
} 
async function release() { 
  // 终止指定流的播放 
  soundPool.stop(streamId); 
  // 卸载音频资源 
  await soundPool.unload(soundId); 
  //关闭监听 
  setOffCallback(); 
  // 释放SoundPool 
  await soundPool.release(); 
} 
//关闭监听 
function setOffCallback() { 
  soundPool.off('loadComplete'); 
  soundPool.off('playFinished'); 
  soundPool.off('error'); 
} 
 
@Entry 
@Component 
struct SoundPoolTest { 
  async init() { 
    const isLocationAvailable = canIUse("SystemCapability.Multimedia.Media.SoundPool"); 
    // const isLocationAvailable = canIUse('SystemCapability.Location.Location.Core'); 
    if (isLocationAvailable) { 
      await create() 
      let context = getContext(this) as common.UIAbilityContext; 
      let fileDescriptor = await context.resourceManager.getRawFd('01.mp3'); 
      soundId = await soundPool.load(fileDescriptor.fd,fileDescriptor.offset,fileDescriptor.length); 
      console.log('SoundPool is by this device.'); 
    } else { 
      console.log("LXG" + "err") 
      console.log('SoundPool not by this device.'); 
    } 
  } 
  aboutToAppear() { 
    this.init() 
  } 
 
  build() { 
    Column() { 
      Button("Test") 
        .onClick(async ()=>{ 
          PlaySoundPool() 
        }) 
    } 
  } 
}
分享
微博
QQ
微信
回复
2024-11-11 16:15:09
相关问题
鸿蒙-如何实现播放一段音频
11087浏览 • 2回复 待解决
想知道一段 clounm高度
369浏览 • 1回复 待解决
如何实现RSA公钥PK加密一段文字
613浏览 • 1回复 待解决
如何将一段文字保存到剪切板
324浏览 • 1回复 待解决
Scroll初始时自动滚动一段距离
894浏览 • 1回复 待解决
HarmonyOS音频播放问题
420浏览 • 1回复 待解决