【问题标题】:How do I prevent audio overlap?如何防止音频重叠?
【发布时间】:2018-09-01 13:19:32
【问题描述】:

抱歉标题。我想不出更好的了。另外,对不起我的英语。

我有这四种形式。表格 2-4 有一个按钮,按下时会播放表格 1 中的特定声音。有时,三个表格中的所有按钮几乎同时按下,这会导致表格 1 播放的音频相互重叠。如何防止这种情况发生?

编辑: 当按下所有按钮时,我希望音频“轮流”播放。 "Audio 2, 3" 必须等待 "Audio 1" 播放完毕后才能播放,然后 Audio 3" 也必须等待 "Audio 2" 播放完毕。每个“音频播放”由一个 SpeechSynthesizer 组成(使用.SpeakAsync)和一个 SoundPlayer(使用 .PlaySync 播放)。我的 ISP 上的互联网中断,所以我只是在使用我的手机。在我的手机上手动输入代码非常困难,对此感到抱歉。

【问题讨论】:

  • 同时按下所有按钮时的预期行为是什么?还分享代码并展示您如何播放声音。要了解有关如何提出好问题的更多信息,请查看How to Ask
  • 我编辑了我的评论 :)
  • 不要在表单中播放音频,而是设计一个专门的类来做到这一点。然后所有表单向该类的同一个实例发送音频播放请求,该实例本身可以自动将不同的剪辑排队,并逐个播放。在软件工程中,我们遵循这些常见的设计实践和原则。
  • TIL。我是否只是将播放声音的代码传输到一个类,它会自动排队播放?

标签: c# winforms


【解决方案1】:

您好,我在制作的游戏中也做过类似的事情,但我遇到了声音重叠播放的问题。在处理声音的方法中,我是这样做的:

SoundPLayer sound = new SoundPlayer(..);
SoundPLayer anotherSound = new SoundPlayer(..);

public async void gameMethod()
{
   sound.Play();
   await Task.Delay(400); //length of sound
   //some code ...
   anotherSound.Play();
}

这对我有用,只是使用 await Task.Delay(..) 来增加声音的时间 - 不确定这是否是这样做的方法,但它可能会有所帮助

【讨论】:

  • 我认为这不适用于我的情况,因为每种声音都采用不同的方法。
猜你喜欢
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2013-01-15
  • 2010-12-26
相关资源
最近更新 更多