常见音频处理
播放音频非常简单!
首先在你的pubspec.yaml
中添加所有你需要使用的音频文件(确保填写的路径文件已经存在)。
你需要在pubspec.yaml
文件中添加类似于:
flutter:
assets:
- assets/audio/explosion.mp3
- assets/audio/music.mp3
最简单的使用方法:
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'); // Or
audio.playLongAudio('music.mp3');
不同之处在于每个实例共享不同的缓存。 通常,你会使用Flame.audio
实例并完全共享缓存。
你的目录结构必须和上方的pubspec.yaml
例子保持一致!
你可以用它来播放MP3, OGG或者WAV。
该函数使用了audioplayers库,便于在游戏中同时播放多个声音(游戏中非常重要)。你可以点击链接查看更多详细内容。
要实现循环播放,只需使用loop
函数:
Flame.audio.loop('music.mp3');
// 或者
Flame.audio.loopLongAudio('music.mp3');
另外,你可以使用Bgm
类(通过Flame.bgm
调用)来循环播放背景音乐。Bgm类可以让Flame在暂停或继续游戏(项目)时控制背景音乐的暂停与恢复。
play/loop
和 playLongAudio/loopLongAudio
的区别;
play/loop
会优化播放效果,允许循环播放但不会在切换时产生间隙,并且不会使游戏帧率下降。尽量使用该函数。playLongAudio/loopLongAudio
允许播放任意长度的音频,但是它们会影响帧率,并且会在循环播放的音频间产生间隔。
你可以预加载音频。首次请求音频时,音频会被存放在内存中。因此,每次播放未加载过的mp3可能会出现延迟。
我们只需这样进行预加载:
Flame.audio.load('explosion.mp3');
你可以在一开始就加载全部的音频,使他们始终播放顺畅
加载多个音频只需:
Flame.audio.loadAll(['explosion.mp3', 'music.mp3'])
最终,你可以通过clear
函数来清理缓存中的内容:
Flame.audio.clear('explosion.mp3');
你也可以通过clearAll
函数来清理全部的缓存。
比如,你的游戏有多个关卡,且每个关卡的配乐完全不同,你就用得上咯。
这两个函数的返回值都是Future<File>
。
无论是play
还是loop
,你都可以传递一个额外的double类型参数,它就是音量(默认为1.0)。
无论是play
还是loop
,它们都会从audioplayers库中返回一个AudioPlayer
实例,该实例允许你停止、暂停和配置其他的东西。
如果你觉得日志太多,可以通过该函数进行屏蔽:
Flame.audio.disableLog();