gpt4 book ai didi

使用 assets_audio_player flutter 音频 slider

转载 作者:行者123 更新时间:2023-12-02 22:52:39 26 4
gpt4 key购买 nike

我正在尝试创建一个 slider 来观看音频进度并寻找音频的某些部分。为了播放本地音频文件,我使用了 assets_audio_player 包裹。这是我的代码:

import 'package:assets_audio_player/assets_audio_player.dart';

...
...

final AssetsAudioPlayer _assetsAudioPlayer = AssetsAudioPlayer();

...
...

StreamBuilder<Duration>(
stream: _assetsAudioPlayer.currentPosition,
builder: (BuildContext context, AsyncSnapshot <Duration> snapshot) {

final Duration _currentDuration = snapshot.data;
final int _milliseconds = _currentDuration.inMilliseconds;
final int _songDurationInMilliseconds = snapshot.data.inMilliseconds;

return Slider(
min: 0,
max: _songDurationInMilliseconds.toDouble(),
value: _songDurationInMilliseconds > _milliseconds
? _milliseconds.toDouble()
: _songDurationInMilliseconds.toDouble(),
onChanged: (double value) {
_assetsAudioPlayer.seek(Duration(milliseconds: (value / 1000.0).toInt()));
},
activeColor: Colors.blue,
inactiveColor: Colors.grey,
);
},
),

但是, slider 的行为与预期相差甚远。我无法寻找,它也不会移动。如何解决这个问题?

最佳答案

您可以直接使用https://github.com/samupra/local_flutter_audio_player
它具有您需要的所有功能

代码片段

Widget slider() {
return Slider(
value: _position.inSeconds.toDouble(),
min: 0.0,
max: _duration.inSeconds.toDouble(),
onChanged: (double value) {
setState(() {
seekToSecond(value.toInt());
value = value;
});});
}

Widget localAsset() {
return _tab([
Text('Play Local Asset \'audio.mp3\':'),
_btn('Play', () => audioCache.play('audio.mp3')),
_btn('Pause',() => advancedPlayer.pause()),
_btn('Stop', () => advancedPlayer.stop()),
slider()
]);
}

工作演示

enter image description here

完整代码
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';

typedef void OnError(Exception exception);

void main() {
runApp(new MaterialApp(home: new ExampleApp()));
}

class ExampleApp extends StatefulWidget {
@override
_ExampleAppState createState() => new _ExampleAppState();
}

class _ExampleAppState extends State<ExampleApp> {
Duration _duration = new Duration();
Duration _position = new Duration();
AudioPlayer advancedPlayer;
AudioCache audioCache;

@override
void initState(){
super.initState();
initPlayer();
}

void initPlayer(){
advancedPlayer = new AudioPlayer();
audioCache = new AudioCache(fixedPlayer: advancedPlayer);

advancedPlayer.durationHandler = (d) => setState(() {
_duration = d;
});

advancedPlayer.positionHandler = (p) => setState(() {
_position = p;
});
}

String localFilePath;

Widget _tab(List<Widget> children) {
return Center(
child: Container(
padding: EdgeInsets.all(16.0),
child: Column(
children: children
.map((w) => Container(child: w, padding: EdgeInsets.all(6.0)))
.toList(),
),
),
);
}

Widget _btn(String txt, VoidCallback onPressed) {
return ButtonTheme(
minWidth: 48.0,
child: RaisedButton(child: Text(txt), onPressed: onPressed));
}

Widget slider() {
return Slider(
value: _position.inSeconds.toDouble(),
min: 0.0,
max: _duration.inSeconds.toDouble(),
onChanged: (double value) {
setState(() {
seekToSecond(value.toInt());
value = value;
});});
}

Widget localAsset() {
return _tab([
Text('Play Local Asset \'audio.mp3\':'),
_btn('Play', () => audioCache.play('audio.mp3')),
_btn('Pause',() => advancedPlayer.pause()),
_btn('Stop', () => advancedPlayer.stop()),
slider()
]);
}

void seekToSecond(int second){
Duration newDuration = Duration(seconds: second);

advancedPlayer.seek(newDuration);
}

@override
Widget build(BuildContext context) {
return DefaultTabController(
length: 1,
child: Scaffold(
appBar: AppBar(
bottom: TabBar(
tabs: [
Tab(text: 'Local Asset'),
],
),
title: Text('audioplayers Example'),
),
body: TabBarView(
children: [localAsset()],
),
),
);
}
}

关于使用 assets_audio_player flutter 音频 slider ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59534170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com