flutter - 如何阻止音频在颤动中播放
问题描述
我的代码旨在在用户按下播放声音时播放歌曲,我需要一个按钮来停止播放音乐。我之所以选择这样播放音乐是因为音频缓存功能由于某种原因在我的代码中不起作用(我一直收到错误消息说我的文件无法加载)虽然这种方法有效我不知道如何停止像这样播放的音乐。
import 'dart:io';
import 'package:audioplayers/audio_cache.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
import 'package:audioplayers/audioplayers.dart';
import 'dart:io';
class bodyscan extends StatefulWidget {
@override
_bodyscanState createState() => _bodyscanState();
}
enum PlayerState {stopped,playing,paused}
class _bodyscanState extends State<bodyscan> {
String mp3Uri = "";
void _playsound(){
AudioPlayer player = AudioPlayer();
player.play(mp3Uri);
}
void _loadsound() async {
final ByteData data = await rootBundle.load("audio/doomed.m4a");
Directory tempDir = await getTemporaryDirectory();
File tempFile = File('${tempDir.path}/doomed.m4a');
await tempFile.writeAsBytes(data.buffer.asUint8List(), flush:true);
mp3Uri = tempFile.uri.toString();
}
@override
void initState() {
_loadsound();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
InkWell(
enableFeedback: false,
child :Container (
color: Colors.blue,
padding: const EdgeInsets.all(20.0),
child: Text('PlaySound', style: TextStyle(color: Colors.white),) ,
),
onTap: _playsound,
),
],
),
)
);
}
}
解决方案
如果使用AudioCache播放资产中的音频文件,这是我找到的解决方案:
- 创建一个音频播放器
- 在您的 AudioCache 实例中使用它作为固定播放器
- 然后您可以在 AudioPlayer 实例上使用 stop() 方法
const timerFinishedAudio = "alarm-sound.mp3";
const audioFilesPrefix = 'audio/';
final audioPlayer = AudioPlayer();
// in your State
static AudioCache player = new AudioCache(prefix: audioFilesPrefix, fixedPlayer: audioPlayer);
// in a function
player.play(timerFinishedAudio);
// in another function or dispose()
audioPlayer.stop();
推荐阅读
- c# - 无法从方法组转换为线程启动
- php - 从 URL 管理 php 中的特定版本 curl 输出
- c# - 使用 WCF 服务的 .NET Core API 中的异常处理
- scala - 如何将 UDAF 移植到聚合器?
- c++ - 为什么 __int128_t 在 x86-64 GCC 上比 long long 快?
- reactjs - 未捕获的错误:重新渲染过多。React 限制渲染次数以防止无限循环
- android - 如果数据库中存在名称,如何停止进程android
- mysql - mariadb 复制(主/从) - 由于删除查询执行时间长,从属滞后
- angular - 无法为接口对象赋值
- matlab - 如何从多个 .png 图像制作单个 256*256*N(双).mat