【问题标题】:Flame Audio or Audio Player does not stop the soundFlame Audio 或 Audio Player 不会停止声音
【发布时间】:2022-01-21 10:13:59
【问题描述】:

使用 Flame 和 Flame Audio,我无法解决问题。 FlameAudio 返回的 AudioPlayer 上的 stop 函数不会停止循环播放。我不确定这是我的代码问题、AudioPlayer 问题还是 FlameAudio 问题。

下面是在开始时启动声音的一段代码,应该在结束时停止或取消。使用单个指针拖动它可以工作。但是,当使用带有多个指针的 multidrag 并同时释放所有声音时,声音会继续播放。当至少有一次拖动处于活动状态时,代码应该只播放一种声音。

谁能告诉我,如果我做错了什么或者有错误。 https://github.com/markohrastovec/flame_audio_test 提供了在我的手机上显示问题的最小工作示例。

  @override
  void onDragStart(int pointerId, DragStartInfo info) async {
    if (loopPlayer == null && activeDrag.isEmpty) {
      loopPlayer = await FlameAudio.audioCache.loop('sfx/flame.mp3');
    }
    activeDrag.add(pointerId);
  }

  @override
  void onDragEnd(int pointerId, DragEndInfo info) async {
    activeDrag.remove(pointerId);
    if (loopPlayer != null && activeDrag.isEmpty) {
      int result = await loopPlayer!.stop();
      loopPlayer = null;
    }
  }

  @override
  void onDragCancel(int pointerId) async {
    activeDrag.remove(pointerId);
    if (loopPlayer != null && activeDrag.isEmpty) {
      int result = await loopPlayer!.stop();
      loopPlayer = null;
    }
  }

【问题讨论】:

    标签: flutter audio flame


    【解决方案1】:

    我认为这是由于 onDragStart 方法是异步的,它实际上创建了多个播放器,并用变量中的新播放器替换了第一个创建的播放器。如果您在 onDragStart 中执行类似操作,是否会发生这种情况:

      @override
      void onDragStart(int pointerId, DragStartInfo info) async {
        if (loopPlayer == null && activeDrag.isEmpty) {
          activeDrag.add(pointerId);
          loopPlayer = await FlameAudio.audioCache.loop('sfx/flame.mp3');
        } else {
          activeDrag.add(pointerId);
        }
      }
    

    【讨论】:

    • 非常感谢!我非常专注于拖动结束事件,以至于我认为问题实际上已经开始于拖动开始。当然,它现在可以工作了。
    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2017-09-13
    • 2015-11-24
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多