XNA 声音开始或停止播放时的小噪音

Posted

技术标签:

【中文标题】XNA 声音开始或停止播放时的小噪音【英文标题】:XNA small noise when sound starts or stops playing 【发布时间】:2015-06-04 10:21:58 【问题描述】:

我制作了一个小应用程序,可以在您按下按键时播放 .wav 文件,本质上是尝试在键盘上播放音乐,但是当我松开按键时扬声器会发出一些噪音,当我按下它时我也相信。 .wav 文件只是一个正弦波,所以我不认为它是问题的根源,关于导致声音的原因和任何解决方法的任何线索?噪音类似于您插入耳机或类似设备时产生的瞬间静电。

【问题讨论】:

您是否尝试过仅在您的电脑上播放音频(相关文件和其他音频)?你的扬声器正常吗? VLC 在 mp3 文件中没有显示出这样的行为,YouTube 在 Flash 和 html5 中都可以正常播放 也许可以提供一些代码 sn-ps 并告诉我们您迄今为止为解决此问题所做的尝试 我真的什么都没试过,因为我只是使用SoundEffect 类,它是Play() 函数......你也可以手动创建一个流我相信,但这有点小题大做 【参考方案1】:

为了解决这个问题,你必须捕获两个键盘状态。

KeyboardState oldState;
KeyboardState currentState;

public void Load()

    oldstate = Keyboard.GetState();


public void Update(GameTime gameTime)

    currentState = Keyboard.GetState();
    //Example below

    if (oldState.IsKeyUp(Keys.Space)
    && currentState.IsKeyDown(Keys.Space))
    
       //Play Sound
    
    oldState = currentState;

这将确保被按下的键的旧状态为 up 而新的状态为 down。这将阻止声音反复播放。然后在更新循环结束时,会将 currentState 设置为 oldState 并重新开始逻辑。

【讨论】:

可能问题确实是在不断地重放文件,我的实现有点旨在避免它,但我显然没有考虑清楚!将通知最终成功。 不幸的是,我们刚刚完成学期考试,我还没有机会给它尽可能多的时间 - 但是我确实尝试了几种方法来防止重播,我几乎成功了更糟糕的是,虽然我确信我会在那里发现一些错误......我还没有放弃,我希望在一周内我能够回来提供更多反馈 事实证明,您所描述的确实会引起非常相似的噪音。我个人在播放条件上犯了一个错误,就是我每次更新都让XNA开始播放声音,所以它会突然停止播放并重新开始,不太清楚具体细节,但不断重播声音是我的问题。不过你的回答也是正确的 我建议使用我的代码,因为它来自一个已经经历过这一切的人,将来会为您省去很多麻烦。 我的代码是相似的,我只是保留了一些关于已经按下的变量,所以我不会重新启动已经播放的键,如果在这个循环中它仍然被按下,所以我也可以停止钥匙抬起时发出声音,我还有更多的中间工作来处理停止,仅此而已,感谢您的关注

以上是关于XNA 声音开始或停止播放时的小噪音的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上播放多个声音会产生变压器式的噪音

如果条件在 XNA 中播放声音,不播放声音?

当另一个声音使用 XNA/XACT 结束时,如何立即播放一个声音?

在 Mac 上使用 OpenAL 播放音频时出现随机噪音

UDP声音传输:播放的声音有很大的噪音

SoundManager2 - 停止声音时的失真