flutter AudioPlayer的使用问题及处理

  1. 无法播放本地音频文件AssetSource,报错找不到assets/...
    原因: 播放本地资源时,默认情况下,每个 AudioPlayers 实例都会使用一个共享的全局 AudioCache 实例,该实例会根据 Flutter 的约定配置一个默认前缀"/assets"。
    这就要求 本地资源文件需要放在assets文件夹下.类似下文件结构,并且需要在pubspec.yaml申明资源文件
dart 复制代码
  your_flutter_project/
├── assets/
│   └── audio/
│       └── click.mp3
├── lib/
└── pubspec.yaml

在pubspec.yaml中申明资源

dart 复制代码
flutter:
  assets:
    - assets/audio/

这样就能正常加载.当然这是只能在主项目中这么处理,但在module中就会出问题.

你即便清楚的写明了所属module及位置如下:

AssetSource assetSource = AssetSource("packages/common/assets/blinking_stars.mp3");

加载时会报错找不到 assets/packages/common/assets/blinking_stars.mp3,还是强制前缀惹的祸.

那有没有办法去除AssetSoure的前缀呢?或者改下前缀?

有的.我也是各种翻找后,还是从github的AudioPlayer的项目备注里发现的.

将处理办法摘录如下:

a.删除所有player实例的资产前缀:

dart 复制代码
AudioCache.instance = AudioCache(prefix: '')
final player = AudioPlayer();
await player.play(AssetSource('assets/audio/my-audio.wav'));

b.仅为一个player实例设置不同的前缀(例如,当使用来自另一个包的资产时):

dart 复制代码
final player = AudioPlayer();
player.audioCache = AudioCache(prefix: 'packages/OTHER_PACKAGE/assets/')
await player.play(AssetSource('other-package-audio.wav'));

个人推荐采用a方法.后续的使用就直接写明位置.

这样主项目里的就直接AssetSource('assets/audio/my-audio.wav')

module里的就直接写明位置包名就行AssetSource('packages/OTHER_PACKAGE/assets/other-package-audio.wav')

摘录自

相关推荐
晚霞的不甘16 分钟前
Flutter + OpenHarmony 自动化测试体系:从单元测试到多端 E2E 的全流程保障
flutter·单元测试
松☆2 小时前
OpenHarmony 特有挑战:如何让 Flutter 应用支持分布式软总线
分布式·flutter
峰兄1983059 小时前
探索傅里叶变换与短时傅里叶分析:从理论到脚本实践
flutter
奋斗的小鹰14 小时前
在已有Android工程中添加Flutter模块
android·flutter
笨小孩78714 小时前
Flutter深度解析:从入门到实战的跨平台开发指南
flutter
豫狮恒14 小时前
OpenHarmony Flutter 分布式多模态交互:融合音视频、手势与环境感知的跨端体验革新
flutter·wpf·openharmony
笨小孩78716 小时前
Flutter深度解析:从原理到实战的全栈开发指南
flutter
豫狮恒17 小时前
OpenHarmony Flutter 分布式数据共享实战:从基础存储到跨设备协同
flutter·wpf·openharmony
安卓开发者17 小时前
第一课:Flutter环境搭建与第一个应用 - 从零到一
flutter
L、21817 小时前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos