我正在尝试在 Flutter 中创建一个警报,警报音应该在一定时间后响起。在 Flutter 中,这似乎说起来容易做起来难!
尝试使用音频播放器插件来实现这一点。使用 playLocal 函数,其中资产从 rootbundle 加载到应用程序目录中,然后播放
根据 audioplayer github repo 中的答案,这是应该可以解决问题的代码:
class SoundManager {
AudioPlayer audioPlayer = new AudioPlayer();
Future playLocal(localFileName) async {
final dir = await getApplicationDocumentsDirectory();
final file = new File("${dir.path}/$localFileName");
if (!(await file.exists())) {
final soundData = await rootBundle.load("assets/$localFileName");
final bytes = soundData.buffer.asUint8List();
await file.writeAsBytes(bytes, flush: true);
}
await audioPlayer.play(file.path, isLocal: true);
}
}
Run Code Online (Sandbox Code Playgroud)
我不断收到错误消息:“无法加载资产”。资产(mp3/wav 文件)显然在文件夹中,并且该文件夹正确包含在 pubspec.yaml 文件中(其他图像资产从该文件夹正确加载,因此此处指定文件夹本身不是问题)
您可以使用另一个音频库https://pub.dev/packages/audioplayers
音频缓存文档。 https://github.com/luanpotter/audioplayers/blob/master/doc/audio_cache.md
简单的例子:
import 'package:audioplayers/audio_cache.dart';
AudioCache player = AudioCache();
player.play('sounds/test_sound.m4a');
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我的资产文件夹如下所示:assets/sounds/test_sound.m4a
该库将音频缓存为本地文件,然后播放音频
PS:如果你想从本地文件播放音乐,你可以使用 AudioPlayer()。
我的示例返回监听器,当音乐结束时将调用 onPlayCompletion
AudioPlayer _advancedPlayer = AudioPlayer();
Stream<void> playFromLocal(int unitId, int id) {
var link = '/media/$unitId/words/$id.m4a';
_advancedPlayer.stop();
_advancedPlayer.release();
_advancedPlayer = AudioPlayer();
_advancedPlayer.play(Const.basePath + link, isLocal: true);
return _advancedPlayer.onPlayerCompletion;
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
4365 次 |
| 最近记录: |