flutter如何实现flutter_sound和audio_waveforms的音频波形显示
在Flutter中如何结合使用flutter_sound和audio_waveforms插件实现音频波形显示?我尝试用flutter_sound录制音频后,想通过audio_waveforms展示波形,但不知道如何将两者数据对接。具体问题是:
- flutter_sound录制的音频文件如何传递给audio_waveforms解析?
- 是否需要中间转换步骤,比如格式转换或文件路径处理?
- 实时录音时能否动态更新波形?如果有示例代码就更好了。
2 回复
使用Flutter实现音频波形显示,可结合flutter_sound录制音频,audio_waveforms绘制波形。步骤如下:
- 使用flutter_sound录制音频并保存文件。
- 通过audio_waveforms读取音频文件,生成波形数据。
- 使用Waveform或LiveWaveform组件显示波形。
示例代码:
final recorder = FlutterSoundRecorder();
final waveController = AudioWaveformsController();
// 开始录制
await recorder.startRecorder(toFile: 'audio.aac');
// 显示波形
Waveform(
controller: waveController,
// 配置波形样式
);
更多关于flutter如何实现flutter_sound和audio_waveforms的音频波形显示的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中结合 flutter_sound 录制音频,并使用 audio_waveforms 显示波形,可按以下步骤实现:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_sound: ^10.0.0
audio_waveforms: ^3.0.0
2. 实现代码
import 'package:flutter/material.dart';
import 'package:flutter_sound/flutter_sound.dart';
import 'package:audio_waveforms/audio_waveforms.dart';
class AudioRecorderScreen extends StatefulWidget {
@override
_AudioRecorderScreenState createState() => _AudioRecorderScreenState();
}
class _AudioRecorderScreenState extends State<AudioRecorderScreen> {
final FlutterSoundRecorder _recorder = FlutterSoundRecorder();
final WaveController _waveController = WaveController();
bool _isRecording = false;
String? _filePath;
@override
void initState() {
super.initState();
_initRecorder();
}
Future<void> _initRecorder() async {
await _recorder.openRecorder();
await _recorder.setSubscriptionDuration(const Duration(milliseconds: 100));
}
Future<void> _startRecording() async {
final path = '/path/to/save/audio.wav'; // 设置实际存储路径
await _recorder.startRecorder(toFile: path);
_waveController.prepareInput(sampleRate: 16000); // 设置采样率
setState(() {
_isRecording = true;
_filePath = path;
});
}
Future<void> _stopRecording() async {
await _recorder.stopRecorder();
_waveController.finish();
setState(() => _isRecording = false);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
AudioWaveforms(
size: Size(MediaQuery.of(context).size.width, 100),
waveController: _waveController,
enableGesture: false,
waveStyle: WaveStyle(
waveColor: Colors.blue,
showDurationLabel: false,
),
),
ElevatedButton(
onPressed: _isRecording ? _stopRecording : _startRecording,
child: Text(_isRecording ? '停止录音' : '开始录音'),
),
],
),
);
}
@override
void dispose() {
_recorder.closeRecorder();
_waveController.dispose();
super.dispose();
}
}
关键说明:
- 权限配置:需要在
AndroidManifest.xml和Info.plist中申请录音权限 - 路径设置:使用
path_provider获取实际可用的存储路径 - 参数调整:根据音频特性调整
sampleRate和波形样式 - 实时监听:可通过
_recorder.onProgress获取实时音频数据并更新波形
注意事项:
- 确保在真机上测试,模拟器可能无法正常录音
- 不同采样率会影响波形显示精度
- 需处理后台录制时的生命周期管理
此方案实现了录音时的实时波形显示,停止后波形会保留最终状态。

