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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

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

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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

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() 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
分享
微博
QQ
微信
回复
2024-05-21 17:31:44
相关问题
HarmonyOS 音频播放设备切换
1223浏览 • 1回复 待解决
是否可以进行音频混合播放
209浏览 • 0回复 待解决
HarmonyOS音频播放问题
1119浏览 • 1回复 待解决
HarmonyOS 音频播放相关
678浏览 • 1回复 待解决
HarmonyOS 播放音频示例
655浏览 • 1回复 待解决
SoundPool实现音频播放功能
2167浏览 • 1回复 待解决
HarmonyOS 音频录制与播放
1541浏览 • 1回复 待解决
HarmonyOS 音频播放帧率控制
928浏览 • 1回复 待解决
HarmonyOS ohaudio音频播放设备切换问题
644浏览 • 1回复 待解决
基于AVPlayer音频后台播放
1374浏览 • 1回复 待解决
HarmonyOS 音频后台播放问题
1286浏览 • 1回复 待解决
HarmonyOS 音频播放相关问题咨询
1248浏览 • 2回复 待解决
OH _Audio播放音频问题
3063浏览 • 1回复 待解决
AVplayer开发音频播放功能
1795浏览 • 1回复 待解决
HarmonyOS 播放器后台暂停音频播放
744浏览 • 1回复 待解决