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

playloop上,都可以传递一个额外的可选double参数volume(默认值为1.0)。

playloop方法都返回一个新的AudioPlayer实例,允许你停止、暂停和配置其他设置。

标签: flutter, audioplayers, audio, audiocache

添加新评论