我正在XNA中创建一个游戏,它可以在很多音乐循环上工作,但我似乎无法同步这些声音。
我总是错过几毫秒你能帮帮我吗?
这是我第一次尝试同步声音。请注意,我需要处理数十种声音...
这个同步问题可能与缓存声音有关吗?
是否有外部库让它更容易?
public SoundEffectInstance loop1, loop2;
public int auxControl = 0;
public bool auxB = false, auxA = false;
public void LoadContent()
{
SoundEffect temp1 = Game.Content.Load<SoundEffect>("sounds/Synctest_1");
loop1 = temp1.CreateInstance();
loop1.IsLooped = true;
loop2 = temp1.CreateInstance();
loop2.IsLooped = true;
}
public override void Update(GameTime gameTime)
{
// start first sound
if (auxA == false)
loop1.Play(); auxA = true;
// start counting until 2 seconds
if (auxA)
auxControl += gameTime.ElapsedGameTime.Milliseconds;
// if 2 seconds have passed after first sound start second sound
if (auxControl >= 2000 && auxB == false)
{
loop2.Play();
auxB = true;
}
base.Update(gameTime);
}
谢谢
答案 0 :(得分:1)
对C#一无所知,但如果API不支持,通常很难以毫秒精度同步这些类型的东西。解决方案是自己混合它们并仅使用API进行回放,这样你就可以完全控制它们的发声时间以及它们的组合方式。
在C#中可能有一个更简单的解决方案,但您可以使用http://www.PortAudio.com或许多其他接口构建类似的东西。您可能想在Google上搜索类似Game audio API的内容。
答案 1 :(得分:0)
目前我已经决定实现这一目标的最佳方法是在更新中使用条件,最好是主更新,这样验证就会以更快的方式完成。
这仍然会带来一个问题,因为你可能听到声音之间有一个小小的“嘟嘟”,但几乎没有注意到。
伪代码就是这样的
Update(GameTime gameTime)
{
if (last sound ended)
{
play next;
decide on the next sound; // implement cache here if needed
}
}