Flutter Flame教程5 -- Audio 音频

2,838 阅读2分钟

Audio 音频


播放音频,非常简单!在任何时候,只需要运行:

    import 'package:flame/flame.dart';
    
    Flame.audio.play('explosion.mp3');
    Flame.audio.playLongAudio('music.mp3');

或者,如果你更喜欢的话:

    import 'package:flame/flame_audio.dart';
    
    FlameAudio audio = FlameAudio();
    
    audio.play('explosion.mp3');
    audio.playLongAudio('music.mp3');

不同点是每一个实例共享不同的缓存。一般来说你应该使用Flame.audio实例,共享缓存。

你必须有合适的文件结构,添加文件到pubspec.yaml文件中,正如如上所述。

可以是MP3,OGG或者WAV文件。

使用audioplayers库,目的是为了允许同步播放多个不同的音频(在游戏中非常重要)。你可以在这个库中找到更详细的解释。

如果你想无限播放,只需要使用loop函数。

    Flame.audio.loop('musci.mp3');
    Flame.audio.loopLongAudio('musci.mp3');

或者,你可以使用Bgm来循环播放背景音乐。当暂停/恢复游戏或者应用时,Bgm类让Flame可以管理自动暂停或者恢复背景音乐。

play/loop和playLongAudio/loopLongAudio的区别是,play/loop使用了优化的属性,使得音频在迭代循环的时候没有间隙,而且游戏帧率几乎不会丢失。在任何时候,你更应该使用这个方法。playLongAudio/loopLongAudio允许播放任何长度的音频,但它们确实会导致帧率丢失,并且在迭代的时候循环的音频会有小的延迟。

最后,你可以预加载音频。音频在第一次使用的时候应该被保存在内存中;因此,当你第一次播放每个mp3时,你可能会有延迟。为了预加载音频,只需要使用:

Flame.audio.load('explosion.mp3');

在一开始的时候,你可以加载所有的音频,所以它们可以播放的很流畅;为了加载多个音频,使用loadAll方法:

Flame.audio.loadAll(['explosion.mp3', 'music.mp3'])

最后,你可以使用clear方法来从缓存中移除:

    Flame.audio.clear('explosion.mp3');

也有clearAll方法,来清除所有的缓存。

这可能非常有用,比如,当你的游戏有很多关,并且每一关都有不同配乐。

两个load方法都为所有加载的File都返回Future。

两个play和loop你都可以传递额外的可选double变量volume(默认是1.0).

两个play和loop方法都返回来自audioplayers的AudioPlayer的实例,它允许你停止、暂停和配置其他的特性。

有许多的日志,这是原始的AudioPlayer插件的功能。在调试时非常哟用,但是之后你可以禁用它们:

Flame.audio.disableLog();