Flutter播放音频

本文介绍了如何在Flutter中使用audioplayers库进行音频播放控制,包括预加载、播放、暂停、进度跳转和监听播放位置等功能。通过实例代码详细展示了播放、暂停、拖动播放进度等操作,帮助开发者实现更灵活的音频交互体验。
摘要由CSDN通过智能技术生成

一、前言

主要为播放mp3音频,

在这里插入图片描述

二、引用

audioplayers

功能:控制mp3文件播放。

地址:https://pub.dev/packages/audioplayers

方法:

  • await audioPlayer.setUrl('clicking.mp3'); /// 预加载但不播放,返回1为成功
    
  • await audioPlayer.resume(); /// 快速播放,返回1为成功
    
  • await audioPlayer.pause(); /// 暂停播放
    
  • await audioPlayer.seek(new Duration(seconds: 1)); /// 跳转进度播放
    
  • audioPlayer.onAudioPositionChanged.listen((event) async {
      // event参数可以获取当前进度,也是可以调整的,比如p.inMilliseconds
    })
    
  • await audioPlayer.release(); /// 释放资源
    

三、使用

1. 进度条部分

/// 当前播放进度
var playProcess = 0.0;
/// 是否正在拖动播放部分
var nowSeekPlay = false;

Slider(value: playProcess.value, onChanged: (double v) {
  playProcess.value = v;
},onChangeStart: (double v){
  nowSeekPlay = true;
}, onChangeEnd: (double v){
  seekPlay(Duration(microseconds: (v*实际总微秒).toInt()));
  nowSeekPlay = false;
})

2. 音频播放

AudioPlayer audioPlayer = AudioPlayer();

/// 播放
play() async {
  int result = await audioPlayer.setUrl("http://m701.music.126.net/20220108171336/cf03e7f017702d1c503a8af97277abb9/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/12493523436/3543/fc68/56a2/4436b5c2d97ad152ce6f1a2ca10635a9.mp3");
  await audioPlayer.resume();
  if (result == 1) {
    audioPlayer.onAudioPositionChanged.listen((event) {
      if(!nowSeekPlay && (event.inMicroseconds.toDouble()/实际总微秒) <= 1.0){
        playProcess.value = (event.inMicroseconds.toDouble()/实际总微秒);
      } else if(nowSeekPlay){
      } else {
        playProcess.value = 1.0;
      }
    });
  } else {
    print('play failed');
  }
}

/// 继续播放
continuePlay() async {
  await audioPlayer.resume();
  audioPlayer.onAudioPositionChanged.listen((event) {
    if((event.inMicroseconds.toDouble()/实际总微秒) <= 1.0){
      playProcess.value = (event.inMicroseconds.toDouble()/实际总微秒);
    } else {
      playProcess.value = 1.0;
    }
  });
}

/// 暂停
pause() async {
  int result = await audioPlayer.pause();
  if (result == 1) {
    // success
    print('pause success');
  } else {
    print('pause failed');
  }
}

/// 拖动播放
seekPlay(Duration duration) async {
  int result = await audioPlayer.seek(duration);
  if (result == 1) {
    // success
    print('seek success');
  } else {
    print('seek failed');
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾云鹤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值