Flutter中使用AudioCache播放资源音频文件 作者: 灯小笼 时间: 2019-07-21 分类: 开发 ## Audio Cache 原文地址:https://github.com/luanpotter/audioplayers/blob/master/doc/audio_cache.md 为了使用本地资源,你必须使用`AudioCache`类。 Flutter没有提供对资源播放音频的简单方法,而这个类则提供了相应的方法。实际上它会将资源复制到设备中的一个临时文件夹中,然后将其作为本地文件播放。 它跟踪复制出来的文件,以缓存的形式工作,你可以毫不延迟地重播它们。你也可以实现对文件的预加载。 每个实例都有自己独立的缓存,因此,如果想优化加载时间,可以创建一个单例。 播放一个音频,只需要运行这段代码: ```dart import 'package:audioplayers/audio_cache.dart'; static AudioCache player = AudioCache(); player.play('explosion.mp3'); ``` 这将会播放项目的资源目录中的`explosion.mp3`文件。 文件的结构一般会像下面这样: ``` . └── assets └── explosion.mp3 ``` 不要忘记在`pubspec.yaml`文件中添加这些文件: ```yaml flutter: assets: - assets/explosion.mp3 ``` 如果所有音频都位于assets文件夹中的特定文件夹中,则可以选择将前缀传递给构造函数。例如,Flame使用"audio/"前缀: ```dart AudioCache player = AudioCache(prefix: 'audio/'); player.play('explosion.mp3'); //现在这个文件将从'assets/audio/explosion.mp3'加载 ``` 如果你想一直播放,使用`loop`函数即可: ```dart player.loop('music.mp3'); ``` 最后,你可以预加载音频。音频需要在第一次请求时被复制;因此,第一次播放每个mp3时,可能会出现延迟。为了实现对音频的预加载,只需使用: ```dart player.load('explosion.mp3'); ``` 你可以在一开始就加载你所有的音频,这样它们就可以一直流畅地播放;要加载多个音频,请使用loadAll方法: ```dart player.loadAll(['explosion.mp3', 'music.mp3']); ``` 最后,你可以使用clear方法从缓存中删除相应内容: ```dart player.clear('explosion.mp3'); ``` 要删除所有缓存,可以使用`clearAll`方法。 假设你的游戏有多个关卡,并且每个关卡都有不同的背景音乐,那么这将非常管用。 上述两种加载方法的返回类型都是`Future`。 在`play`和`loop`上,都可以传递一个额外的可选`double`参数volume(默认值为1.0)。 `play`和`loop`方法都返回一个新的`AudioPlayer`实例,允许你停止、暂停和配置其他设置。 标签: flutter, audioplayers, audio, audiocache