Flutter audiowave_form包无法访问音频文件问题求助
解决audiowave_form包无法找到音频文件的问题
你遇到的核心问题是:pubspec.yaml中配置的是Flutter资产资源路径,但PlayerController.extractWaveformData需要的是设备本地文件的绝对路径,直接用资产相对路径会导致系统找不到文件。
解决步骤:
1. 添加必要依赖
首先在pubspec.yaml中添加path_provider包(用于获取设备本地目录):
dependencies: flutter: sdk: flutter audiowave_form: ^你的版本号 path_provider: ^2.1.1 path: ^1.8.3 # 用于路径拼接
2. 编写资产文件复制到本地的工具函数
在你的ViewModel中添加以下函数,把资产文件复制到设备临时目录:
import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/services.dart'; import 'package:path_provider/path_provider.dart'; import 'package:path/path.dart' as path; Future<String> copyAssetToLocal(String assetPath) async { // 获取临时目录 final tempDir = await getTemporaryDirectory(); // 拼接本地文件路径 final fileName = path.basename(assetPath); final localFile = File(path.join(tempDir.path, fileName)); // 如果文件已存在,直接返回路径 if (await localFile.exists()) { return localFile.path; } // 读取资产文件内容 final byteData = await rootBundle.load(assetPath); final buffer = byteData.buffer; // 写入本地文件 await localFile.writeAsBytes( buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes), ); return localFile.path; }
3. 修改getWavesfromData函数
更新你的波形提取逻辑,先把资产文件复制到本地,再用本地路径调用extractWaveformData:
Future<void> getWavesfromData() async { try { // 先把资产文件复制到本地 final localFilePath = await copyAssetToLocal('audio/Recording3.mp3'); // 使用本地路径提取波形 _waves = await _controller.extractWaveformData( path: localFilePath, noOfSamples: 100, ); rebuildUi(); } catch (e) { print("错误信息:$e"); } }
4. 再次确认pubspec.yaml的资产配置
确保你的资产配置格式正确(注意缩进,assets是flutter下的子项):
flutter: assets: - audio/Recording3.mp3 # 或者如果audio文件夹下有多个文件,可以写: # - audio/
额外注意事项
- 确认资产文件的实际路径:检查项目中
audio文件夹是否在根目录下,文件名和后缀是否完全匹配(区分大小写,比如.mp3不能写成.MP3) - 测试前先清理缓存并重启应用:执行
flutter clean,然后重新运行项目,避免旧的缓存路径干扰
内容的提问来源于stack exchange,提问作者badro
相关产品推荐
相关产品推荐

