Flame Audio 或 Audio Player 不停止声音
Flame Audio or Audio Player does not stop the sound
使用 Flame 和 Flame Audio,我无法解决问题。 FlameAudio 返回的 AudioPlayer 上的停止函数不会停止播放循环。不知道是我代码的问题,还是AudioPlayer的问题,还是FlameAudio的问题。
下面是一段在开始时启动声音的代码,应该在结束时停止或取消。使用单指针拖动它可以工作。但是,当使用带有多个指针的 multidrag 并一次释放所有声音时,声音会继续播放。当至少有一个拖动处于活动状态时,代码应该只播放一种声音。
任何人都可以告诉我,如果我做错了什么或者有错误。可在 https://github.com/markohrastovec/flame_audio_test.
找到最小工作示例,它在我的 phone 上展示了问题
@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;
}
}
我认为这是由于 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);
}
}
使用 Flame 和 Flame Audio,我无法解决问题。 FlameAudio 返回的 AudioPlayer 上的停止函数不会停止播放循环。不知道是我代码的问题,还是AudioPlayer的问题,还是FlameAudio的问题。
下面是一段在开始时启动声音的代码,应该在结束时停止或取消。使用单指针拖动它可以工作。但是,当使用带有多个指针的 multidrag 并一次释放所有声音时,声音会继续播放。当至少有一个拖动处于活动状态时,代码应该只播放一种声音。
任何人都可以告诉我,如果我做错了什么或者有错误。可在 https://github.com/markohrastovec/flame_audio_test.
找到最小工作示例,它在我的 phone 上展示了问题 @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;
}
}
我认为这是由于 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);
}
}