@@ -42,15 +42,15 @@ import 'package:flutter/material.dart';
42
42
import 'package:livekit_client/livekit_client.dart' ;
43
43
44
44
class SoundWaveformWidget extends StatefulWidget {
45
- final int count ;
45
+ final int barCount ;
46
46
final double width;
47
47
final double minHeight;
48
48
final double maxHeight;
49
49
final int durationInMilliseconds;
50
50
const SoundWaveformWidget ({
51
51
super .key,
52
52
required this .audioTrack,
53
- this .count = 7 ,
53
+ this .barCount = 5 ,
54
54
this .width = 5 ,
55
55
this .minHeight = 8 ,
56
56
this .maxHeight = 100 ,
@@ -64,23 +64,32 @@ class SoundWaveformWidget extends StatefulWidget {
64
64
class _SoundWaveformWidgetState extends State <SoundWaveformWidget >
65
65
with TickerProviderStateMixin {
66
66
late AnimationController controller;
67
- List <double > samples = [0 , 0 , 0 , 0 , 0 , 0 , 0 ];
68
- EventsListener <TrackEvent >? _listener;
67
+ late List <double > samples;
68
+ AudioVisualizer ? _visualizer;
69
+ EventsListener <AudioVisualizerEvent >? _listener;
69
70
70
71
void _startVisualizer (AudioTrack track) async {
71
- await _listener? .dispose ();
72
- _listener = track.createListener ();
72
+ samples = List .filled (widget.barCount, 0 );
73
+ _visualizer ?? = createVisualizer (track,
74
+ options: AudioVisualizerOptions (barCount: widget.barCount));
75
+ _listener ?? = _visualizer? .createListener ();
73
76
_listener? .on < AudioVisualizerEvent > ((e) {
74
77
if (mounted) {
75
78
setState (() {
76
79
samples = e.event.map ((e) => ((e as num ) * 100 ).toDouble ()).toList ();
77
80
});
78
81
}
79
82
});
83
+
84
+ await _visualizer! .start ();
80
85
}
81
86
82
87
void _stopVisualizer (AudioTrack track) async {
88
+ await _visualizer? .stop ();
89
+ await _visualizer? .dispose ();
90
+ _visualizer = null ;
83
91
await _listener? .dispose ();
92
+ _listener = null ;
84
93
}
85
94
86
95
@override
@@ -106,7 +115,7 @@ class _SoundWaveformWidgetState extends State<SoundWaveformWidget>
106
115
107
116
@override
108
117
Widget build (BuildContext context) {
109
- final count = widget.count ;
118
+ final count = widget.barCount ;
110
119
final minHeight = widget.minHeight;
111
120
final maxHeight = widget.maxHeight;
112
121
return AnimatedBuilder (
0 commit comments