ArkTS音频播放,音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放

ArkTS音频播放

HarmonyOS
2024-05-20 21:34:02
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
dickhome

音频播放的主要工作是将音频数据转码为可听见的音频模拟信号并通过输出设备进行播放,同时对播放任务进行管理。AudioPlayer是音频播放管理类,用于管理和播放音频媒体。音频播放创建步骤如下:

1. 在音频播放前,防止AudioPlayer被占用,先释放音频资源。

2. 通过createAudioPlayer()构建一个媒体播放的实例,并开始订阅音频播放事件。播放事件回调类型,支持的事件包括:‘play’ | ‘pause’ | ‘stop’ | ‘reset’ | ‘dataLoad’ | ‘finish’ | ‘volumeChange’|‘error’|’’。

  • 设置’dataLoad’ 表示完成音频数据加载后触发该事件,即src属性设置完成后触发该事件。
  • 设置’play’表示完成paly()调用,音频播放,触发该事件。
  • 设置’start’表示完成start()调用,音频开始播放,触发该事件。
  • 设置’pause’表示完成pause()调用,音频暂停播放,触发该事件。
  • 设置’stop’表示完成stop()调用,音频停止播放,触发该事件。
  • 设置’reset’表示完成reset()调用,播放器重置,触发该事件。
  • 设置’finish’表示音频播放完成后触发。
  • 设置’volumeChange’表示播放音量改变后触发该事件
  • 设置’error’ 表示音频播放错误触发该事件。
export class AudioModel { 
  private audioPlayer = undefined; 
 
  initAudioPlayer(handleStateChange: () => void) { 
    this.release() 
    this.audioPlayer = media.createAudioPlayer() 
    //完成音频数据加载 
    this.audioPlayer.on('dataLoad', () => { 
      Logger.info(TAG, `case dataLoad called`) 
      this.audioPlayer.play(); // 调用play方法开始播放,触发'play'事件回调 
    }) 
    //音频播放 
    this.audioPlayer.on('play', () => { 
      console.info('audio play success'); 
      handleStateChange() 
    }) 
    //音频暂停播放 
    this.audioPlayer.on('pause', () => { 
      console.info('audio pause success'); 
      handleStateChange() 
    }) 
    //音频播放完成 
    this.audioPlayer.on('finish', () => { // 设置'finish'事件回调,播放完成触发 
      Logger.info(TAG, `audioPlayer finish called`) 
      handleStateChange() 
    }); 
    //音频停止播放 
    this.audioPlayer.on('stop', () => { 
      Logger.info(TAG, `audioPlayer stop called`) 
      this.audioPlayer.release() //audioPlayer资源被销毁 
      this.audioPlayer = undefined 
    }) 
    //音频播放错误 
    this.audioPlayer.on('error', () => { 
      Logger.info(TAG, `audioPlayer error called`) 
      handleStateChange() 
    }) 
  } 
}

示例中展示正常播放需要调用事件监听。

1. 调用AudioPlayer的方法前,先设置AudioPlayer类中src属性完成音频数据加载。在’dataLoad’事件成功触发后,调用start方法开始音频播放。

  • 设置src指明音频媒体URI,支持当前主流的音频格式(m4a、aac、mp3、ogg、wav)。当src设置成功后,不能再次设置其它src,需调用reset()接口后,才能重新设置src。
  • 设置loop指明音频循环播放属性,设置为’true’表示循环播放,默认为false。
startAudio(pathName: string) { 
  if(typeof (this.audioPlayer) != `undefined`) { 
      Logger.info(TAG, `audioPlayer  startAudio`) 
      this.audioPlayer.reset() 
      this.audioPlayer.src = pathName 
  }    
}

1. 播放过程还可以继续暂停,停止,跳转到指定播放位置,调整音量,释放资源等操作。

  • 通过pause()暂停播放。
  • 通过stop()停止播放。
  • 通过seek()跳转到指定播放位置。
  • 通过setVolume()调整音量。
release() { 
  if (typeof (this.audioPlayer) != `undefined`) { 
    Logger.info(TAG, `audioPlayer  release`) 
    this.audioPlayer.release() 
    this.audioPlayer = undefined 
  } 
} 
 
pause() { 
  Logger.info(TAG, 'audioPlayer pause called') 
  if (typeof (this.audioPlayer) != `undefined`) { 
    this.audioPlayer.pause() 
  } 
} 
 
finish() { 
  if (typeof (this.audioPlayer) != `undefined`) { 
    this.audioPlayer.stop() 
  } 
}
分享
微博
QQ
微信
回复
2024-05-21 17:31:44
相关问题
HarmonyOS 音频播放设备切换
148浏览 • 1回复 待解决
HarmonyOS音频播放问题
330浏览 • 1回复 待解决
基于AVPlayer音频后台播放
458浏览 • 1回复 待解决
HarmonyOS 音频后台播放问题
345浏览 • 1回复 待解决
SoundPool实现音频播放功能
1251浏览 • 1回复 待解决
HarmonyOS 音频录制与播放
527浏览 • 1回复 待解决
HarmonyOS 音频播放帧率控制
95浏览 • 1回复 待解决
HarmonyOS 音频播放缓存大小太大
125浏览 • 1回复 待解决
HarmonyOS 播放本地音频文件
84浏览 • 1回复 待解决
AudioCapturer录音+AudioRenderer播放音频
1202浏览 • 1回复 待解决
HarmonyOS实现后台播放音频
350浏览 • 1回复 待解决
HarmonyOS 音频播放相关问题咨询
100浏览 • 1回复 待解决
OH _Audio播放音频问题
2013浏览 • 1回复 待解决
AVplayer开发音频播放功能
1109浏览 • 1回复 待解决
HarmonyOS 如何判断音频是否在播放
281浏览 • 1回复 待解决
音频播放长时任务不生效
1839浏览 • 1回复 待解决
鸿蒙 如何使用 player 播放网络音频
7414浏览 • 1回复 已解决
使用AudioRenderer开发音频播放功能
1013浏览 • 1回复 待解决