当前位置: 首页 > 知识库问答 >
问题:

如何在Flutter应用程序开始时使用音频播放器包开始循环播放音乐?

沙星波
2023-03-14

我想在我的循环应用程序中持续播放音乐,就像商店中的许多游戏应用程序一样。

但是,我不确定何时初始化音乐循环开始以及如何停止它。我创建了一个类,其中包含开始和停止音乐的逻辑

我的应用程序结构也是这样的

主飞镖

Wrapper.dart

class Music {
    AudioCache cache; 
    AudioPlayer player; 

    void _playFile() async{
      player = await cache.play('my_audio.mp3'); 
    }

    void _stopFile() {
      player?.stop(); 
    }

}

共有1个答案

华懿轩
2023-03-14

我可以看到你已经创建了一个Music类。但那不是单例类。所以,每次你得到一个新实例。你需要的是一个单例类。你可以实现这样的东西:

class Music {
  AudioPlayer player = AudioPlayer();
  AudioCache cache = AudioCache();

  Music._privateConstructor() {
    this.player.setVolume(0.5);
  }

  static final Music instance = Music._privateConstructor();

  Future playLoop(String filePath) async {
    player.stop();
    player = await cache.loop(filePath);
  }

  void stopLoop() {
    player?.stop();
  }
}

这保证了每次都获得相同的实例。

此外,您还需要适当地管理状态。

基本上有4种状态,它们是:

>

  • 已恢复:应用程序可见并响应用户输入。

    inactive:应用程序处于非活动状态,不接收用户输入。

    暂停:应用程序当前对用户不可见,不响应用户输入,并且在后台运行。

    分离:应用程序仍然托管在颤振引擎上,但与任何主机视图分离。

    您可以@overoverdidChangeAppLifesycleState()方法。

      @override
      void didChangeAppLifecycleState(AppLifecycleState state) {
        if ((state == AppLifecycleState.paused ||
                state == AppLifecycleState.detached ||
                state == AppLifecycleState.inactive) &&
            musicOn) {
          audio.stopLoop();
        } else if (state == AppLifecycleState.resumed && musicOn) {
          audio.playLoop("loop.mp3");
        }
      }
    

    这样可以防止在最小化并重新打开应用时音乐重叠。

  •  类似资料:
    • 我正在开发一个音频播放器,它可以在后台播放音频文件。我的问题是,当录像机或视频播放器启动时,我需要暂停音频播放器。 有什么方法可以处理这个任务吗?例如,我有来处理这些调用。当我接到呼叫或wnat呼叫时,我们可以使用呼叫状态暂停播放器。我想为录像机或视频播放器以及相同的场景。当视频/录制开始时,我需要暂停音频播放器。

    • ap.playBackgroundAudio(OPTION, CALLBACK) 开始播放音乐。 OPTION 参数说明 名称 类型 必选 描述 url String 是 音乐链接地址 title String 否 音乐标题 singer String 否 演唱者 describe String 否 音乐描述 logo String 否 logo URL cover String 否 封面 URL

    • 如果我的应用程序音频开始播放,我必须停止外部媒体播放器。就youtube而言,它会自动停止,但谷歌的媒体播放器不会停止。 我使用了以下代码。 但它也停止了我的其他音频。任何帮助都将不胜感激。

    • 我正在制作音频播放器(android)。问题是我什么时候启动我的应用程序

    • 我已经创建了一个android应用程序,使用媒体播放器播放文本到语音文件,但是如果其他音频/视频开始播放,那么我的音频也会播放,即同时播放两个音频。 有没有办法在开始另一个音频/视频之前停止第一个音频。 是否有任何广播接收器会在其他音频开始时被调用。 我用过- layer.play播放音频。 和暂停音频。 任何帮助都将不胜感激。

    • 问题内容: 我知道关于SOF的问题很多,但这是“最新的”问题。事实是,我正在尝试创建和警报应用程序,并且我知道有一个警报应用程序可以很好地运行(某种程度上),即使该应用程序未运行且在后台。 我的问题是:你是怎么开始播放声音 后, 你的应用程序已经在后台? UILocalNotification很棒,但是只有在用户单击通知后您才能获得,因此使用AVAudioPlayer播放声音不起作用,无论用户单击