gpt4 book ai didi

c# - FMOD 声音库 - 同步点让我抓狂!

转载 作者:太空宇宙 更新时间:2023-11-03 20:42:43 24 4
gpt4 key购买 nike

有 FMOD 经验的人可以阻止我丢失它吗?我无法让这些同步点起作用。我有一些游戏音乐,由两部分组成,一个介绍和一个循环。它们是独立的声音,在介绍结束后,它开始循环部分,永远重复。我在介绍结束时设置了一个同步点来触发循环。它工作得很好,直到我尝试停止并重新启动音乐(例如当播放器死亡时)。无论如何,同步点坚持在介绍重新启动后立即触发,即使它已设置为介绍结束。结果是音乐的两个部分同时播放 - 并且似乎在一个 channel 上播放,因为我告诉它重用 channel 。这可能吗?这是我的一些代码(注意 system、intro、loop 和 channel 是成员变量):

public void Play()
{
if (intro != null)
{
CHANNELINDEX index = (channel == null) ? CHANNELINDEX.FREE : CHANNELINDEX.REUSE;
system.playSound(index, intro, false, ref channel);
uint length = 0;
intro.getLength(ref length, TIMEUNIT.MS);
intro.addSyncPoint(length, TIMEUNIT.MS, "StartLoop", ref loopPtr);
channel.setCallback(callback);
}
else system.playSound(CHANNELINDEX.FREE, loop, false, ref channel);
Playing = true;
}

这是同步点:

private FMOD.RESULT SyncCallback(IntPtr c, CHANNEL_CALLBACKTYPE type, IntPtr a, IntPtr b)
{
if (Playing)
{
RESULT result = intro.getSyncPoint(0, ref loopPtr);
intro.deleteSyncPoint(loopPtr);
system.playSound(CHANNELINDEX.REUSE, loop, false, ref channel);
}
return RESULT.OK;
}

至少,这是回调的一个版本。我已经尝试了大约 20 个其他人。请注意,我告诉它删除同步点 - 当我检查返回时它没问题。为了以防万一,我也尝试了 loop.deleteSyncPoint。我还对其执行了 getsyncpointinfo 操作,以确保触发的是我的 StartLoop 同步点。然而,在调用停止后再次调用播放时它仍然会触发:

public void Stop()
{
Playing = false;
if (intro != null && loopPtr != IntPtr.Zero)
{
IntPtr ptr = IntPtr.Zero;
RESULT result = intro.getSyncPoint(0, ref ptr);
result = intro.deleteSyncPoint(ptr);
result = intro.getSyncPoint(0, ref ptr);
loopPtr = IntPtr.Zero;
}
channel.stop();
channel.setPosition(0, TIMEUNIT.MS);
}

请注意 Stop() 也尝试删除同步点,但它也没有这样做(即使结果返回正常)。我尝试在停止时将 channel 位置设置为 0,这让情况变得更糟。在 deletesyncpoint() 调用之后,我在我的同步点尝试了 channel.stop() ,但这导致了堆栈溢出,因为尽管尝试删除它,它仍然在每次调用停止时调用同步点。我给它错误的指针还是什么?我试过制作某种标志来表示不播放循环部分,但我不能,因为它会设置在 Play() 的中间,并且在 Play() 完成后立即调用同步点,在下次调用系统更新时。 FMOD 损坏还是我遗漏了一些明显的东西?或者一些非常晦涩和没有记录的东西......

最佳答案

我刚知道,我希望这对其他人有所帮助,因为谷歌搜索“fmod syncpoint”现在将其作为第一个结果返回。重复是因为有些回调是针对同步点类型的,有些是针对结束的,因为介绍部分已经结束。因此,我意识到我什至不需要自己的同步点。我只是使用介绍的结尾作为触发器。代码更简洁,运行完美。

关于c# - FMOD 声音库 - 同步点让我抓狂!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1940645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com