【问题标题】:How to stop audio from playing in flutter如何阻止音频在颤动中播放
【发布时间】:2020-08-10 14:39:53
【问题描述】:

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

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

【问题讨论】:

    标签: flutter audio


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      只需检查是否有方法可以通过以下方法停止音频

      _audioPlayer.stop();
      

      看看这个由 Audioplayers 插件创建的例子:

      https://github.com/luanpotter/audioplayers/tree/master/example/lib

      你可以使用下面的墨水池,onTap你可以使用这个停止方法。

      【讨论】:

        【解决方案3】:

        你试过简单的player.stop()吗?

        如果它不起作用,那么也许您应该尝试将 AudioPlayer 从 'playMusic' 方法移到外部,如下所示:

            AudioPlayer player = new AudioPlayer();
            String mp3Uri = "";
        
            void _playSound() {
              player.play(mp3Uri);
            }
        
            void _stopSound() {
              player.stop();
            }
        

        【讨论】:

        • 我正在使用 AudioCache 播放本地资产文件夹中的文件。 audioCache.play() 方法存在,但 audioCache.stop() 不存在。如何使用 audioCache 停止歌曲??
        • @KPradeepKumarReddy 尝试将 audioCache 变量 player 分配给 null。或者干脆为这个 AudioCache 创建一个 AudioPlayer 并用它来控制。
        • 谢谢。我正在为音频缓存创建音频播放器实例并将其用于控制​​。我们可以知道播放器当前是否正在运行吗?我找不到任何像 audioPlayer.isPlaying() 这样的方法。我想检查播放器是否已经在运行,然后不要再播放了。如何实现这个功能?
        • @KPradeepKumarReddy 我不太记得了,但您似乎可以为此使用 AudioCache 并检查它是否为空
        猜你喜欢
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多