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
相关问题
AudioCapturer录音+AudioRenderer播放音频
596浏览 • 1回复 待解决
SoundPool实现音频播放功能
544浏览 • 1回复 待解决
鸿蒙 如何使用 player 播放网络音频
5869浏览 • 1回复 已解决
使用AudioRenderer开发音频播放功能
424浏览 • 1回复 待解决
音频播放长时任务不生效
445浏览 • 1回复 待解决
AVplayer开发音频播放功能
443浏览 • 1回复 待解决
OH _Audio播放音频问题
491浏览 • 1回复 待解决
SoundPool播放音频是否支持WMV格式
663浏览 • 1回复 待解决
怎么使用player播放网络音频呢?
2126浏览 • 1回复 待解决
AVPlayer实现音频播放(c++侧)
344浏览 • 1回复 待解决
使用AudioRenderer播放pcm音频流失败
496浏览 • 1回复 待解决
鸿蒙-如何实现播放一段音频
9619浏览 • 2回复 待解决
鸿蒙Dev远程真机能否播放音频
3931浏览 • 1回复 待解决
音频音频焦点请求和释放
446浏览 • 1回复 待解决
音频发声设备切换与查询
446浏览 • 1回复 待解决
鸿蒙如何音频文件转成文本
3127浏览 • 1回复 待解决