一、前言
主要为播放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');
}
}