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 声音开始或停止播放时的小噪音的主要内容,如果未能解决你的问题,请参考以下文章