首页 > 解决方案 > 如何阻止音频在颤动中播放

问题描述

我的代码旨在在用户按下播放声音时播放歌曲,我需要一个按钮来停止播放音乐。我之所以选择这样播放音乐是因为音频缓存功能由于某种原因在我的代码中不起作用(我一直收到错误消息说我的文件无法加载)虽然这种方法有效我不知道如何停止像这样播放的音乐。

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,
              ),
            ],
          ),
        )
    );
  }
}

标签: flutteraudio

解决方案


如果使用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();

推荐阅读