HarmonyOS鸿蒙Next中音频文件wav播放demo

HarmonyOS鸿蒙Next中音频文件wav播放demo 有没有音频文件 wav 播放demo

3 回复

可以试下使用SoundPool播放音频,SoundPool支持播放1MB以下的音频资源,如:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/using-soundpool-for-playback-V13

import audio from '@ohos.multimedia.audio';
import media from '@ohos.multimedia.media';
import fs from '@ohos.file.fs'
import picker from '@ohos.file.picker';
import { BusinessError } from '@ohos.base';
import { Context } from '@kit.AbilityKit';

let urii: string = '';
let soundPool: media.SoundPool;
let streamId: number = 0;
const audioSelectOptions = new picker.AudioSelectOptions();
let soundId: 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, // 最低优先级
}

let uri: string = "";

@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('播放音频').onClick(event => {
          PlaySoundPool();
        })
        Button('停止音频').onClick(event => {
          StopSoundPool();
        })
        Button('循环播放').onClick(event => {
          SetLoopPlay();
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

async function create() {
  //创建soundPool实例
  soundPool = await media.createSoundPool(5, audioRendererInfo);
  //注册监听
  loadCallback();
  finishPlayCallback();
  setErrorCallback();
  // 加载音频资源
  const audioViewPicker = new picker.AudioViewPicker();

  let rawFile = getContext().resourceManager.getRawFdSync('test.wav')

  soundPool.load(rawFile.fd, rawFile.offset, rawFile.length).then(soundIdd => {
    console.info('soundPool load uri success');
    soundId = soundIdd;
    console.log('===========soundId: ', soundId)
  }).catch(err => {
    console.error('soundPool load failed and catch error is ' + err.message);
  })
}

async function loadCallback() {

  // 加载完成回调
  soundPool.on('loadComplete', soundId_ => {
    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() {
  console.log("开始播放");
  // 开始播放,这边play也可带播放播放的参数PlayParameters
  streamId = await soundPool.play(soundId, PlayParameters);
}

async function StopSoundPool() {
  console.log("停止播放");
  soundPool.stop(soundId);
}

async function SetLoopPlay() {
  console.log("循环播放");
  let Parameters: media.PlayParameters = {
    loop: -1, // 一直循环
    rate: audio.AudioRendererRate.RENDER_RATE_NORMAL, // 正常倍速
    leftVolume: 0.9, // range = 0.0-1.0
    rightVolume: 0.9, // range = 0.0-1.0
    priority: 3, // 最低优先级
  }
  streamId = await soundPool.play(soundId, Parameters);
}

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');
}

更多关于HarmonyOS鸿蒙Next中音频文件wav播放demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,播放WAV音频文件可以通过使用系统提供的音频播放API实现。首先,确保在项目的config.json文件中声明音频播放的权限。然后,使用AudioPlayer类进行音频播放。以下是一个简单的代码示例:

  1. config.json中添加权限声明:
{
  "module": {
    "reqPermissions": [
      {
        "name": "ohos.permission.MEDIA"
      }
    ]
  }
}
  1. 在代码中创建AudioPlayer实例并播放WAV文件:
import audio from '@ohos.multimedia.audio';

async function playWavFile(filePath: string) {
  const audioPlayer = await audio.createAudioPlayer();
  await audioPlayer.load(filePath);
  await audioPlayer.play();
}

// 调用播放函数
playWavFile('/path/to/your/audiofile.wav');
  1. 处理播放事件:
audioPlayer.on('play', () => {
  console.log('Audio playback started');
});

audioPlayer.on('pause', () => {
  console.log('Audio playback paused');
});

audioPlayer.on('stop', () => {
  console.log('Audio playback stopped');
});

audioPlayer.on('error', (error) => {
  console.error('Audio playback error:', error);
});

通过上述步骤,可以在HarmonyOS鸿蒙Next中实现WAV音频文件的播放。

在HarmonyOS鸿蒙Next中播放WAV音频文件,可以通过使用AudioPlayer类实现。以下是一个简单的示例代码:

import ohos.media.player.Player;
import ohos.media.common.Source;
import ohos.app.Context;

public class WavPlayerDemo {
    private Player audioPlayer;

    public void playWav(Context context, String filePath) {
        Source source = new Source(filePath);
        audioPlayer = new Player(context);
        audioPlayer.setSource(source);
        audioPlayer.prepare();
        audioPlayer.play();
    }

    public void release() {
        if (audioPlayer != null) {
            audioPlayer.release();
            audioPlayer = null;
        }
    }
}

使用时,创建WavPlayerDemo实例并调用playWav方法传入文件路径即可播放WAV文件。播放完成后,调用release方法释放资源。

回到顶部