HarmonyOS 鸿蒙Next SoundPool如何播放rawfile中的mp3?

HarmonyOS 鸿蒙Next SoundPool如何播放rawfile中的mp3?


更多关于HarmonyOS 鸿蒙Next SoundPool如何播放rawfile中的mp3?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

使用SoundPool开发音频播放功能可参考如下文档的demo:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/using-soundpool-for-playback-0000001774120626
加载rawfile目录资源,需要通过
load(fd: number, offset: number, length: number, callback: AsyncCallback): void 或者
load(fd: number, offset: number, length: number): Promise实现:
可参考Api文档进行上述方法搜索查看demo:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-inner-multimedia-soundpool-0000001774281610
看一下上面文档里面的demo,load(uri: string, callback: AsyncCallback): void,加载音频资源。使用callback方式异步获取资源ID,入参uri通过获取文件fd生成以"fd://"开头的文件描述字符串。
该方法不支持加载rawfile目录资源,需要通过load(fd: number, offset: number, length: number, callback: AsyncCallback): void或者load(fd: number, offset: number, length: number): Promise实现。
也可参考以下demo:

import audio from '@ohos.multimedia.audio';
import media from '@ohos.multimedia.media';
import { BusinessError } from '@ohos.base';
import common from '@ohos.app.ability.common';
let soundPool: media.SoundPool;
let streamIda: number = 0;
let soundIda: number = 0;
let audioRendererInfo: audio.AudioRendererInfo = {
  usage: audio.StreamUsage.STREAM_USAGE_MUSIC,
  rendererFlags: 1
}
let PlayParameters: media.PlayParameters = {
  loop: 0, // 循环4次
  rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速
  leftVolume: 0.9, // range = 0.0-1.0
  rightVolume: 0.9, // range = 0.0-1.0
  priority: 3, // 最低优先级
}
@Entry
@Component
struct SoundPoolDemo {
  @State message: string = '播放音频';
  async aboutToAppear(): Promise<void> {
    create();
  }
  async aboutToDisappear() {
    release();
  }
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('play').onClick((event: ClickEvent) => {
          PlaySoundPool1();
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
async function create() {
  //创建soundPool实例
  soundPool = await media.createSoundPool(10, audioRendererInfo);
  //注册监听
  loadCallback();
  finishPlayCallback();
  setErrorCallback();
  CreatAudio('audio1.mp3')
}
async function CreatAudio(path:string) {
  // 加载音频资源
  let context = getContext(SoundPoolDemo) as common.UIAbilityContext;
  let fileDescriptor = await context.resourceManager.getRawFd(path);
  soundPool.load(fileDescriptor.fd,fileDescriptor.offset,fileDescriptor.length).then((soundId1: number) => {
    console.info('soundPool load uri success 1');
    soundIda=soundId1;
    console.log(`${soundId1}`)
  }).catch((err: BusinessError) => {
    console.error('soundPool load failed and catch error is ' + err.message);
  })
}
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.error('error happened,message is :' + error.code);
    console.error('error happened,message is :' + error.message);
  })
}
async function PlaySoundPool1() {
  console.log("play");
  // 开始播放,这边play也可带播放播放的参数PlayParameters
  streamIda = await soundPool.play(soundIda,PlayParameters);
}
async function unload(){
  //终止指定流的播放
  soundPool.stop(streamIda);
  // 卸载音频资源
  await soundPool.unload(soundIda);
}
async function release() {
  if (streamIda!=0) {
    //终止指定流的播放
    soundPool.stop(streamIda);
    // 卸载音频资源
    await soundPool.unload(soundIda);
  }
  //关闭监听
  setOffCallback();
  // 释放SoundPool
  await soundPool.release();
}
//关闭监听
function setOffCallback() {
  soundPool.off('loadComplete');
  soundPool.off('playFinished');
  soundPool.off('error');
}

更多关于HarmonyOS 鸿蒙Next SoundPool如何播放rawfile中的mp3?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,使用Next SoundPool播放rawfile中的mp3文件,可以按照以下步骤操作:

  1. 资源准备:确保你的mp3文件已经放置在项目的rawfile目录下。在HarmonyOS项目中,rawfile目录通常用于存放原始资源文件。

  2. 加载资源:在代码中,你需要通过资源管理器获取到该mp3文件的URI或路径。这通常涉及到使用ResourceManager或类似的API来访问rawfile目录下的文件。

  3. 创建SoundPool:实例化一个NextSoundPool对象,并根据需要配置其参数,如最大流数、音频类型等。

  4. 加载音频:使用NextSoundPoolload方法加载mp3文件。这个方法通常需要传入文件的URI或路径,以及一个用于标识该音频的ID。

  5. 播放音频:加载完成后,使用play方法并传入之前定义的音频ID来播放音频。

  6. 释放资源:在不再需要播放音频时,记得调用NextSoundPoolrelease方法来释放资源。

请注意,以上步骤是基于HarmonyOS的一般编程模型,具体API和方法可能因版本而异。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部