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